diff --git a/gl/clean-temp.c b/gl/clean-temp.c index b05550a..1de9a0b 100644 --- a/gl/clean-temp.c +++ b/gl/clean-temp.c @@ -670,6 +670,9 @@ fopen_temp (const char *file_name, const char *mode) fp = fopen (file_name, augmented_mode); saved_errno = errno; + fprintf (stderr, + "%s:%d Opened %s with augmode %s\n", __FILE__, __LINE__, file_name, augmented_mode); + freea (augmented_mode); } else @@ -677,6 +680,11 @@ fopen_temp (const char *file_name, const char *mode) { fp = fopen (file_name, mode); saved_errno = errno; + + fprintf (stderr, + "%s:%d Opened %s with mode %s\n", __FILE__, __LINE__, file_name, mode); + + } if (fp != NULL) { diff --git a/src/libpspp/ext-array.c b/src/libpspp/ext-array.c index 57ff8e4..c4a12c0 100644 --- a/src/libpspp/ext-array.c +++ b/src/libpspp/ext-array.c @@ -36,6 +36,7 @@ #include "gettext.h" #define _(msgid) gettext (msgid) + struct ext_array { FILE *file; /* Underlying file. */ @@ -107,6 +108,7 @@ do_seek (const struct ext_array *ea_, off_t offset) static bool do_read (const struct ext_array *ea_, void *buffer, size_t bytes) { + off_t old_pos ; struct ext_array *ea = CONST_CAST (struct ext_array *, ea_); assert (!ext_array_error (ea)); @@ -120,7 +122,10 @@ do_read (const struct ext_array *ea_, void *buffer, size_t bytes) NOT_REACHED (); return false; } + old_pos = ea->position; ea->position += bytes; + if (ea->position < old_pos) + fprintf (stderr, "%s:%d ea->position has overflowed\n", __FILE__, __LINE__); return true; } @@ -131,13 +136,22 @@ do_read (const struct ext_array *ea_, void *buffer, size_t bytes) static bool do_write (struct ext_array *ea, const void *buffer, size_t bytes) { + off_t old_pos; + int r = 0; assert (!ext_array_error (ea)); - if (bytes > 0 && fwrite (buffer, bytes, 1, ea->file) != 1) + + if (bytes > 0 && (r = fwrite (buffer, bytes, 1, ea->file)) != 1) { - error (0, errno, _("writing to temporary file")); + error (0, errno, + _("writing to temporary file (Stream %p, posn 0x%08x %d items written, bytes: %d)"), + ea->file, ea->position, r, bytes); return false; } + old_pos = ea->position; ea->position += bytes; + if (ea->position < old_pos) + fprintf (stderr, "%s:%d ea->position has overflowed\n", __FILE__, __LINE__); + return true; } diff --git a/src/libpspp/temp-file.c b/src/libpspp/temp-file.c index d121cb9..c19fc9e 100644 --- a/src/libpspp/temp-file.c +++ b/src/libpspp/temp-file.c @@ -105,11 +105,16 @@ create_temp_file (void) file_name = xasprintf ("%s/%d", temp_dir->dir_name, idx++); register_temp_file (temp_dir, file_name); + stream = fopen_temp (file_name, "wb+"); + fprintf (stderr, "%s:%d Created tmpfile \"%s\"; Stream %p\n", __FILE__, __LINE__, file_name, stream); if (stream == NULL) unregister_temp_file (temp_dir, file_name); else - setvbuf (stream, NULL, _IOFBF, 65536); + { + int x = setvbuf (stream, NULL, _IOFBF, 65536); + fprintf (stderr, "%s:%d setvbuf result %d\n", __FILE__, __LINE__, x); + } hmapx_insert (&map, file_name, hash_pointer (stream, 0)); @@ -124,6 +129,7 @@ close_temp_file (FILE *file) { struct hmapx_node *node = hmapx_first_with_hash (&map, hash_pointer (file, 0)); char *fn = node->data; + fprintf (stderr, "%s:%d Closing and removing tempfile %s %p\n", __FILE__, __LINE__, fn, file); fclose_temp (file); cleanup_temp_file (temp_dir, fn); hmapx_delete (&map, node);