X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fdata-writer.c;h=652d522f3e1ab7ad5f8b363d5c06c09a14e29577;hb=efe067379890a29af2b4ad06bf83df7a2eb4d009;hp=993b81ca3f8dee58f4afb2fd8e56972675600e5f;hpb=dcf9b154cbcaa35c3d8459a201b77eec8bcb30bd;p=pspp diff --git a/src/language/data-io/data-writer.c b/src/language/data-io/data-writer.c index 993b81ca3f..652d522f3e 100644 --- a/src/language/data-io/data-writer.c +++ b/src/language/data-io/data-writer.c @@ -18,15 +18,15 @@ 02110-1301, USA. */ #include -#include "data-writer.h" +#include #include #include #include -#include "alloc.h" -#include "message.h" -#include "file-handle.h" -#include "filename.h" -#include "str.h" +#include +#include +#include +#include +#include #include "gettext.h" #define _(msgid) gettext (msgid) @@ -35,7 +35,7 @@ struct dfm_writer { struct file_handle *fh; /* File handle. */ - struct file_ext file; /* Associated file. */ + FILE *file; /* Associated file. */ char *bounce; /* Bounce buffer for fixed-size fields. */ }; @@ -54,22 +54,14 @@ dfm_open_writer (struct file_handle *fh) w = *aux = xmalloc (sizeof *w); w->fh = fh; - w->file.file = NULL; + w->file = fn_open (fh_get_file_name (w->fh), "wb"); w->bounce = NULL; - w->file.filename = xstrdup (fh_get_filename (w->fh)); - w->file.mode = "wb"; - w->file.file = NULL; - w->file.sequence_no = NULL; - w->file.param = NULL; - w->file.postopen = NULL; - w->file.preclose = NULL; - - if (!fn_open_ext (&w->file)) + if (w->file == NULL) { msg (ME, _("An error occurred while opening \"%s\" for writing " "as a data file: %s."), - fh_get_filename (w->fh), strerror (errno)); + fh_get_file_name (w->fh), strerror (errno)); goto error; } @@ -84,7 +76,7 @@ dfm_open_writer (struct file_handle *fh) bool dfm_write_error (const struct dfm_writer *writer) { - return ferror (writer->file.file); + return ferror (writer->file); } /* Writes record REC having length LEN to the file corresponding to @@ -110,7 +102,7 @@ dfm_put_record (struct dfm_writer *w, const char *rec, size_t len) len = rec_width; } - fwrite (rec, len, 1, w->file.file); + fwrite (rec, len, 1, w->file); return !dfm_write_error (w); } @@ -118,29 +110,29 @@ dfm_put_record (struct dfm_writer *w, const char *rec, size_t len) bool dfm_close_writer (struct dfm_writer *w) { + char *file_name; bool ok; if (w == NULL) return true; + file_name = xstrdup (fh_get_name (w->fh)); if (fh_close (w->fh, "data file", "ws")) - return true; + { + free (file_name); + return true; + } ok = true; - if (w->file.file != NULL) + if (w->file != NULL) { - ok = !dfm_write_error (w); - if (!fn_close_ext (&w->file)) - ok = false; + ok = !dfm_write_error (w) && !fn_close (file_name, w->file); if (!ok) - msg (ME, _("I/O error occurred writing data file \"%s\"."), - fh_get_filename (w->fh)); - - free (w->file.filename); - w->file.filename = NULL; + msg (ME, _("I/O error occurred writing data file \"%s\"."), file_name); } free (w->bounce); free (w); + free (file_name); return ok; }