Commit dc597956 authored by Dan Fandrich's avatar Dan Fandrich
Browse files

fseek() with SEEK_SET is broken on large file capable 32-bit systems, so

revert to the SEEK_END method of repositioning the stream after a ftruncate()
and only use SEEK_SET if ftruncate() isn't available.
parent cb9bb31f
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -3773,10 +3773,16 @@ operate(struct Configurable *config, int argc, char *argv[])
                /* truncate file at the position where we started appending */
#ifdef HAVE_FTRUNCATE
                ftruncate( fileno(outs.stream), outs.init);
#endif
                /* now seek to the end of the file, the position where we
                   just truncated the file */
                fseek(outs.stream, outs.init, SEEK_SET);
                   just truncated the file in a large file-safe way */
                fseek(outs.stream, 0, SEEK_END);
#else
                /* ftruncate is not available, so just reposition the file
                   to the location we would have truncated it. This won't
                   work properly with large files on 32-bit systems, but
                   most of those will have ftruncate. */
                fseek(outs.stream, (long)outs.init, SEEK_SET);
#endif
                outs.bytes = 0; /* clear for next round */
              }
              continue;