diff options
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 35 |
1 files changed, 5 insertions, 30 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 8548f5e4a..d4f497246 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1737,37 +1737,12 @@ setmode (int fd, int mode) extern "C" int ftruncate64 (int fd, _off64_t length) { - int res = -1, res_bug = 0; - - if (length < 0) - set_errno (EINVAL); + int res = -1; + cygheap_fdget cfd (fd); + if (cfd >= 0) + res = cfd->ftruncate (length); else - { - cygheap_fdget cfd (fd); - if (cfd >= 0) - { - HANDLE h = cygheap->fdtab[fd]->get_handle (); - - if (cfd->get_handle ()) - { - /* remember curr file pointer location */ - _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 = res_bug; - - /* restore original file pointer location */ - cfd->lseek (prev_loc, SEEK_SET); - } - } - } - + set_errno (EBADF); syscall_printf ("%d = ftruncate (%d, %D)", res, fd, length); return res; } |