mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 15:48:49 -05:00
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.
This commit is contained in:
parent
cb9bb31f7d
commit
dc59795629
12
src/main.c
12
src/main.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user