X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fmsglog.c;h=ef2cf6b007deef169f6481b32ef7d5c80352479c;hb=b0269e285ccdf7acb8d6231f29d85b56cfdd676c;hp=70c237c3db45111d5b3912b4afc53271a22f47b7;hpb=dde5a3c946871b4aab3d6b436438dd8df11db261;p=pspp diff --git a/src/output/msglog.c b/src/output/msglog.c index 70c237c3db..ef2cf6b007 100644 --- a/src/output/msglog.c +++ b/src/output/msglog.c @@ -24,12 +24,13 @@ #include #include "data/file-name.h" +#include "data/file-handle-def.h" #include "data/settings.h" #include "libpspp/cast.h" +#include "libpspp/message.h" #include "output/driver-provider.h" #include "output/message-item.h" -#include "gl/error.h" #include "gl/fwriteerror.h" #include "gl/xalloc.h" @@ -40,8 +41,7 @@ struct msglog_driver { struct output_driver driver; FILE *file; - char *file_name; - char *command_name; + struct file_handle *handle; }; static const struct output_driver_class msglog_class; @@ -60,10 +60,12 @@ msglog_create (const char *file_name) struct msglog_driver *ml; FILE *file; - file = fn_open (file_name, "w"); + struct file_handle *handle = fh_create_file (NULL, file_name, NULL, fh_default_properties ()); + + file = fn_open (handle, "w"); if (file == NULL) { - error (0, errno, _("error opening output file \"%s\""), file_name); + msg_error (errno, _("error opening output file `%s'"), file_name); return NULL; } @@ -72,10 +74,9 @@ msglog_create (const char *file_name) : SETTINGS_DEVICE_UNFILTERED); ml = xzalloc (sizeof *ml); + ml->handle = handle; output_driver_init (&ml->driver, &msglog_class, file_name, type); ml->file = file; - ml->file_name = xstrdup (file_name); - ml->command_name = NULL; output_driver_register (&ml->driver); @@ -87,9 +88,8 @@ msglog_destroy (struct output_driver *driver) { struct msglog_driver *ml = msglog_driver_cast (driver); - fn_close (ml->file_name, ml->file); - free (ml->file_name); - free (ml->command_name); + fn_close (ml->handle, ml->file); + fh_unref (ml->handle); free (ml); } @@ -98,13 +98,10 @@ msglog_submit (struct output_driver *driver, const struct output_item *item) { struct msglog_driver *ml = msglog_driver_cast (driver); - output_driver_track_current_command (item, &ml->command_name); - if (is_message_item (item)) { const struct message_item *message_item = to_message_item (item); - const struct msg *msg = message_item_get_msg (message_item); - char *s = msg_to_string (msg, ml->command_name); + char *s = msg_to_string (message_item_get_msg (message_item)); fprintf (ml->file, "%s\n", s); free (s); }