Get rid of capacity argument to ds_init() and update all callers.
[pspp-builds.git] / src / data / casefile.c
index 1ae743bd965fd81ea2c57738ae5e9f114959b1fd..76f1d97a9bae6ec2cb0060eddf8594beb2ad475a 100644 (file)
    casefile_destroy().  This function will also destroy any
    remaining casereaders. */
 
+/* FIXME: should we implement compression? */
+
 /* In-memory cases are arranged in an array of arrays.  The top
    level is variable size and the size of each bottom level array
    is fixed at the number of cases defined here.  */
@@ -127,7 +129,7 @@ struct casefile
     enum { MEMORY, DISK } storage;      /* Where cases are stored. */
     enum { WRITE, READ } mode;          /* Is writing or reading allowed? */
     struct casereader *readers;         /* List of our readers. */
-    int being_destroyed;                /* Does a destructive reader exist? */
+    bool being_destroyed;               /* Does a destructive reader exist? */
     bool ok;                            /* False after I/O error. */
 
     /* Memory storage. */
@@ -147,7 +149,7 @@ struct casereader
     struct casereader *next, *prev;     /* Next, prev in casefile's list. */
     struct casefile *cf;                /* Our casefile. */
     unsigned long case_idx;             /* Case number of current case. */
-    int destructive;                    /* Is this a destructive reader? */
+    bool destructive;                   /* Is this a destructive reader? */
 
     /* Disk storage. */
     int fd;                             /* File descriptor. */
@@ -270,9 +272,9 @@ casefile_error (const struct casefile *cf)
   return !cf->ok;
 }
 
-/* Returns nonzero only if casefile CF is stored in memory (instead of on
-   disk). */
-int
+/* Returns true only if casefile CF is stored in memory (instead of on
+   disk), false otherwise. */
+bool
 casefile_in_core (const struct casefile *cf) 
 {
   assert (cf != NULL);
@@ -633,13 +635,13 @@ casereader_get_casefile (const struct casereader *reader)
 /* Reads a copy of the next case from READER into C.
    Caller is responsible for destroying C.
    Returns true if successful, false at end of file. */
-int
+bool
 casereader_read (struct casereader *reader, struct ccase *c) 
 {
   assert (reader != NULL);
   
   if (!reader->cf->ok || reader->case_idx >= reader->cf->case_cnt) 
-    return 0;
+    return false;
 
   if (reader->cf->storage == MEMORY) 
     {
@@ -648,14 +650,14 @@ casereader_read (struct casereader *reader, struct ccase *c)
 
       case_clone (c, &reader->cf->cases[block_idx][case_idx]);
       reader->case_idx++;
-      return 1;
+      return true;
     }
   else 
     {
       if (reader->buffer_pos + reader->cf->value_cnt > reader->cf->buffer_size)
         {
           if (!fill_buffer (reader))
-            return 0;
+            return false;
           reader->buffer_pos = 0;
         }
 
@@ -665,7 +667,7 @@ casereader_read (struct casereader *reader, struct ccase *c)
       reader->case_idx++;
 
       case_clone (c, &reader->c);
-      return 1;
+      return true;
     }
 }
 
@@ -673,7 +675,7 @@ casereader_read (struct casereader *reader, struct ccase *c)
    to the caller.  Caller is responsible for destroying C.
    Returns true if successful, false at end of file or on I/O
    error. */
-int
+bool
 casereader_read_xfer (struct casereader *reader, struct ccase *c)
 {
   assert (reader != NULL);
@@ -690,7 +692,7 @@ casereader_read_xfer (struct casereader *reader, struct ccase *c)
 
       case_move (c, read_case);
       reader->case_idx++;
-      return 1;
+      return true;
     }
 }
 
@@ -733,17 +735,18 @@ io_error (struct casefile *cf, const char *format, ...)
 {
   if (cf->ok) 
     {
-      struct error e;
+      struct msg m;
       va_list args;
 
-      e.class = ME;
-      e.where.file_name = NULL;
-      e.where.line_number = -1;
-      e.title = NULL;
-
+      m.category = MSG_GENERAL;
+      m.severity = MSG_ERROR;
+      m.where.file_name = NULL;
+      m.where.line_number = -1;
       va_start (args, format);
-      err_vmsg (&e, format, args);
+      m.text = xvasprintf (format, args);
       va_end (args);
+      
+      msg_emit (&m);
     }
   cf->ok = false;
 }
@@ -784,16 +787,14 @@ static int safe_close (int fd)
 static void
 register_atexit (void) 
 {
-  static int registered = 0;
+  static bool registered = false;
   if (!registered) 
     {
-      registered = 1;
+      registered = true;
       atexit (exit_handler);
     }
 }
 
-
-
 /* atexit() handler that closes and deletes our temporary
    files. */
 static void