02110-1301, USA. */
#include <config.h>
-#include "data-writer.h"
+#include <language/data-io/data-writer.h>
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
-#include "alloc.h"
-#include "message.h"
-#include "file-handle.h"
-#include "filename.h"
-#include "str.h"
+#include <libpspp/alloc.h>
+#include <libpspp/message.h>
+#include <language/data-io/file-handle.h>
+#include <data/file-name.h>
+#include <libpspp/str.h>
#include "gettext.h"
#define _(msgid) gettext (msgid)
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. */
};
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;
}
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
len = rec_width;
}
- fwrite (rec, len, 1, w->file.file);
+ fwrite (rec, len, 1, w->file);
return !dfm_write_error (w);
}
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;
}