diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index a92166b22..c0a458131 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2004-08-28 Pierre Humblet + + * syscalls.cc (ftruncate64): On 9x, call write with a zero length + to zero fill when the file is extended. + 2004-08-24 Corinna Vinschen * syscalls.cc (link): Avoid compiler warning. diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 1b3e3c512..d928bd6e4 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1676,7 +1676,7 @@ setmode (int fd, int mode) extern "C" int ftruncate64 (int fd, _off64_t length) { - int res = -1; + int res = -1, res_bug = 0; if (length < 0) set_errno (EINVAL); @@ -1693,10 +1693,13 @@ ftruncate64 (int fd, _off64_t length) _off64_t prev_loc = cfd->lseek (0, SEEK_CUR); cfd->lseek (length, SEEK_SET); + /* Fill the space with 0, if needed */ + if (wincap.has_lseek_bug ()) + res_bug = cfd->write (&res, 0); if (!SetEndOfFile (h)) __seterrno (); else - res = 0; + res = res_bug; /* restore original file pointer location */ cfd->lseek (prev_loc, SEEK_SET);