pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] pspp/src data/ChangeLog data/filename.c data/fi...


From: Ben Pfaff
Subject: [Pspp-cvs] pspp/src data/ChangeLog data/filename.c data/fi...
Date: Sun, 16 Apr 2006 02:42:39 +0000

CVSROOT:        /cvsroot/pspp
Module name:    pspp
Branch:         
Changes by:     Ben Pfaff <address@hidden>      06/04/16 02:42:39

Modified files:
        src/data       : ChangeLog filename.c filename.h 
        src/language/data-io: ChangeLog data-reader.c data-writer.c 

Log message:
        Remove last users of struct file_ext, and then get rid of struct
        file_ext entirely.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/data/ChangeLog.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/data/filename.c.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/data/filename.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/data-io/ChangeLog.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/data-io/data-reader.c.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/data-io/data-writer.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text

Patches:
Index: pspp/src/data/ChangeLog
diff -u pspp/src/data/ChangeLog:1.10 pspp/src/data/ChangeLog:1.11
--- pspp/src/data/ChangeLog:1.10        Sun Apr 16 01:05:14 2006
+++ pspp/src/data/ChangeLog     Sun Apr 16 02:42:39 2006
@@ -1,3 +1,12 @@
+Sat Apr 15 19:36:47 2006  Ben Pfaff  <address@hidden>
+
+       Remove ill-considered file routines that are no longer used.
+       
+       * filename.c: (fn_open_ext) Removed.
+       (fn_close_ext) Removed.
+
+       * filename.h: (struct file_ext) Removed.
+
 Mon Apr  3 13:22:39 2006  Ben Pfaff  <address@hidden>
 
        * variable.c (var_is_valid_name): Move declarations before code
Index: pspp/src/data/filename.c
diff -u pspp/src/data/filename.c:1.6 pspp/src/data/filename.c:1.7
--- pspp/src/data/filename.c:1.6        Tue Apr  4 07:30:46 2006
+++ pspp/src/data/filename.c    Sun Apr 16 02:42:39 2006
@@ -782,113 +782,6 @@
   else
     return fclose (f);
 }
-
-/* More extensive file handling. */
-
-/* File open routine that extends fn_open().  Opens or reopens a
-   file according to the contents of file_ext F.  Returns nonzero on
-   success.  If 0 is returned, errno is set to a sensible value. */
-int
-fn_open_ext (struct file_ext *f)
-{
-  char *p;
-
-  p = strstr (f->filename, "%d");
-  if (p)
-    {
-      char *s = local_alloc (strlen (f->filename)
-                             + INT_STRLEN_BOUND (int) - 1);
-      char *cp;
-
-      memcpy (s, f->filename, p - f->filename);
-      cp = spprintf (&s[p - f->filename], "%d", *f->sequence_no);
-      strcpy (cp, &p[2]);
-
-      if (f->file)
-       {
-         int error = 0;
-
-         if (f->preclose)
-           if (f->preclose (f) == 0)
-             error = errno;
-
-         if (EOF == fn_close (f->filename, f->file) || error)
-           {
-             f->file = NULL;
-             local_free (s);
-
-             if (error)
-               errno = error;
-
-             return 0;
-           }
-
-         f->file = NULL;
-       }
-
-      f->file = fn_open (s, f->mode);
-      local_free (s);
-
-      if (f->file && f->postopen)
-       if (f->postopen (f) == 0)
-         {
-           int error = errno;
-           fn_close (f->filename, f->file);
-           errno = error;
-
-           return 0;
-         }
-
-      return (f->file != NULL);
-    }
-  else if (f->file)
-    return 1;
-  else
-    {
-      f->file = fn_open (f->filename, f->mode);
-
-      if (f->file && f->postopen)
-       if (f->postopen (f) == 0)
-         {
-           int error = errno;
-           fn_close (f->filename, f->file);
-           errno = error;
-
-           return 0;
-         }
-
-      return (f->file != NULL);
-    }
-}
-
-/* Properly closes the file associated with file_ext F, if any.
-   Return nonzero on success.  If zero is returned, errno is set to a
-   sensible value. */
-int
-fn_close_ext (struct file_ext *f)
-{
-  if (f->file)
-    {
-      int error = 0;
-
-      if (f->preclose)
-       if (f->preclose (f) == 0)
-         error = errno;
-
-      if (EOF == fn_close (f->filename, f->file) || error)
-       {
-         f->file = NULL;
-
-         if (error)
-           errno = error;
-
-         return 0;
-       }
-
-      f->file = NULL;
-    }
-  return 1;
-}
 
 #ifdef unix
 /* A file's identity. */
Index: pspp/src/data/filename.h
diff -u pspp/src/data/filename.h:1.2 pspp/src/data/filename.h:1.3
--- pspp/src/data/filename.h:1.2        Tue Mar 28 06:05:06 2006
+++ pspp/src/data/filename.h    Sun Apr 16 02:42:39 2006
@@ -65,26 +65,5 @@
 void fn_free_identity (struct file_identity *);
 int fn_compare_file_identities (const struct file_identity *,
                                 const struct file_identity *);
-
-/* Extended file routines. */
-struct file_ext;
-
-typedef int (*file_callback) (struct file_ext *);
-
-/* File callbacks may not return zero to indicate failure unless they
-   set errno to a sensible value. */
-struct file_ext
-  {
-    char *filename;            /* Filename. */
-    const char *mode;          /* Open mode, i.e, "wb". */
-    FILE *file;                        /* File. */
-    int *sequence_no;          /* Page number, etc. */
-    void *param;               /* User data. */
-    file_callback postopen;    /* Called after FILE opened. */
-    file_callback preclose;    /* Called before FILE closed. */
-  };
-
-int fn_open_ext (struct file_ext *file);
-int fn_close_ext (struct file_ext *file);
 
 #endif /* filename_h */
Index: pspp/src/language/data-io/ChangeLog
diff -u pspp/src/language/data-io/ChangeLog:1.2 
pspp/src/language/data-io/ChangeLog:1.3
--- pspp/src/language/data-io/ChangeLog:1.2     Sun Apr 16 01:05:15 2006
+++ pspp/src/language/data-io/ChangeLog Sun Apr 16 02:42:39 2006
@@ -1,3 +1,26 @@
+Sat Apr 15 19:38:13 2006  Ben Pfaff  <address@hidden>
+
+       Remove last users of struct file_ext so we can get rid of it
+       entirely.
+       
+       * data-reader.c: (struct dfm_reader) Change file member from
+       struct file_ext to FILE *.  Updated all references.
+       (dfm_close_reader) Close file with fn_close() instead of
+       fn_close_ext().  Also, make a copy of the file name from the file
+       handle before closing it, because we can't extract it after we
+       close the file.
+       (dfm_open_reader) Open file with fn_open() instead of
+       fn_open_ext().
+
+       * data-writer.c: (struct dfm_writer) Change file member 
+       struct file_ext to FILE *.  Updated all references.
+       (dfm_close_writer) Close file with fn_close() instead of
+       fn_close_ext().  Also, make a copy of the file name from the file
+       handle before closing it, because we can't extract it after we
+       close the file.
+       (dfm_open_writer) Open file with fn_open() instead of
+       fn_open_ext().
+
 Sat Apr 15 18:00:32 2006  Ben Pfaff  <address@hidden>
 
        * data-list.c: Add prototype to suppress warning for
Index: pspp/src/language/data-io/data-reader.c
diff -u pspp/src/language/data-io/data-reader.c:1.3 
pspp/src/language/data-io/data-reader.c:1.4
--- pspp/src/language/data-io/data-reader.c:1.3 Fri Mar 31 00:30:21 2006
+++ pspp/src/language/data-io/data-reader.c     Sun Apr 16 02:42:39 2006
@@ -56,7 +56,7 @@
     struct string line;         /* Current line. */
     struct string scratch;      /* Extra line buffer. */
     enum dfm_reader_flags flags; /* Zero or more of DFM_*. */
-    struct file_ext file;      /* Associated file. */
+    FILE *file;                 /* Associated file. */
     size_t pos;                 /* Offset in line of current character. */
     unsigned eof_cnt;           /* # of attempts to advance past EOF. */
   };
@@ -67,21 +67,22 @@
 {
   int still_open;
   bool is_inline;
+  char *file_name;
 
   if (r == NULL)
     return;
 
   is_inline = r->fh == fh_inline_file ();
+  file_name = is_inline ? NULL : xstrdup (fh_get_filename (r->fh));
   still_open = fh_close (r->fh, "data file", "rs");
-  if (still_open)
-    return;
-
-  if (!is_inline)
+  if (still_open) 
     {
-      fn_close_ext (&r->file);
-      free (r->file.filename);
-      r->file.filename = NULL;
+      free (file_name);
+      return; 
     }
+
+  if (!is_inline)
+    fn_close (file_name, r->file);
   else
     {
       /* Skip any remaining data on the inline file. */
@@ -96,6 +97,7 @@
   ds_destroy (&r->line);
   ds_destroy (&r->scratch);
   free (r);
+  free (file_name);
 }
 
 /* Opens the file designated by file handle FH for reading as a
@@ -125,15 +127,8 @@
     {
       r->where.filename = fh_get_filename (fh);
       r->where.line_number = 0; 
-      r->file.file = NULL;
-      r->file.filename = xstrdup (fh_get_filename (r->fh));
-      r->file.mode = "rb";
-      r->file.file = NULL;
-      r->file.sequence_no = NULL;
-      r->file.param = NULL;
-      r->file.postopen = NULL;
-      r->file.preclose = NULL;
-      if (!fn_open_ext (&r->file))
+      r->file = fn_open (fh_get_filename (fh), "rb");
+      if (r->file == NULL)
         {
           msg (ME, _("Could not open \"%s\" for reading as a data file: %s."),
                fh_get_filename (r->fh), strerror (errno));
@@ -151,7 +146,7 @@
 bool
 dfm_reader_error (const struct dfm_reader *r) 
 {
-  return fh_get_referent (r->fh) == FH_REF_FILE && ferror (r->file.file);
+  return fh_get_referent (r->fh) == FH_REF_FILE && ferror (r->file);
 }
 
 /* Reads a record from the inline file into R.
@@ -200,9 +195,9 @@
   if (fh_get_mode (r->fh) == FH_MODE_TEXT)
     {
       ds_clear (&r->line);
-      if (!ds_gets (&r->line, r->file.file)) 
+      if (!ds_gets (&r->line, r->file)) 
         {
-          if (ferror (r->file.file))
+          if (ferror (r->file))
             msg (ME, _("Error reading file %s: %s."),
                  fh_get_name (r->fh), strerror (errno));
           return false;
@@ -216,11 +211,10 @@
       if (ds_length (&r->line) < record_width) 
         ds_rpad (&r->line, record_width, 0);
           
-      amt = fread (ds_c_str (&r->line), 1, record_width,
-                   r->file.file);
+      amt = fread (ds_c_str (&r->line), 1, record_width, r->file);
       if (record_width != amt)
         {
-          if (ferror (r->file.file))
+          if (ferror (r->file))
             msg (ME, _("Error reading file %s: %s."),
                  fh_get_name (r->fh), strerror (errno));
           else if (amt != 0)
Index: pspp/src/language/data-io/data-writer.c
diff -u pspp/src/language/data-io/data-writer.c:1.2 
pspp/src/language/data-io/data-writer.c:1.3
--- pspp/src/language/data-io/data-writer.c:1.2 Wed Mar 15 03:29:10 2006
+++ pspp/src/language/data-io/data-writer.c     Sun Apr 16 02:42:39 2006
@@ -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,18 +54,10 @@
 
   w = *aux = xmalloc (sizeof *w);
   w->fh = fh;
-  w->file.file = NULL;
+  w->file = fn_open (fh_get_filename (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."),
@@ -84,7 +76,7 @@
 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 @@
       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 @@
 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;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]