From 2e41976b562f37a3a03372058798073563e09239 Mon Sep 17 00:00:00 2001 From: Pierre Humblet Date: Sat, 28 Aug 2004 01:37:27 +0000 Subject: [PATCH] 2004-08-28 Pierre Humblet * syscalls.cc (ftruncate64): On 9x, call write with a zero length to zero fill when the file is extended. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/syscalls.cc | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) 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);