From e9921bcbaa37b9c3df39ef1d8182d56a9db3cb11 Mon Sep 17 00:00:00 2001 From: DJ Delorie <dj@redhat.com> Date: Fri, 20 Oct 2000 21:45:50 +0000 Subject: [PATCH] * times.cc (to_time_t): pass zero time as epoch * fhandler.cc (fstat): copy atime/ctime from mtime if they're zero --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/fhandler.cc | 6 ++++++ winsup/cygwin/times.cc | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 075960f0d..8bd756453 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2000-10-20 DJ Delorie <dj@redhat.com> + + * times.cc (to_time_t): pass zero time as epoch + * fhandler.cc (fstat): copy atime/ctime from mtime if they're zero + Thu Oct 19 23:31:41 2000 Christopher Faylor <cgf@cygnus.com> * external.cc (fillout_pinfo): Pass PID_NOREDIR flag to pinfo init to diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index f6ce3adf9..1a7835d60 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -855,6 +855,12 @@ fhandler_disk_file::fstat (struct stat *buf) buf->st_dev = local.dwVolumeSerialNumber; buf->st_size = local.nFileSizeLow; + /* This is for FAT filesystems, which don't support atime/ctime */ + if (buf->st_atime == 0) + buf->st_atime = buf->st_mtime; + if (buf->st_ctime == 0) + buf->st_ctime = buf->st_mtime; + /* Allocate some place to determine the root directory. Need to allocate enough so that rootdir can add a trailing slash if path starts with \\. */ char root[strlen (get_win32_name ()) + 3]; diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc index bff40b612..9960f700b 100644 --- a/winsup/cygwin/times.cc +++ b/winsup/cygwin/times.cc @@ -221,6 +221,11 @@ to_time_t (FILETIME *ptr) long rem; long long x = ((long long) ptr->dwHighDateTime << 32) + ((unsigned)ptr->dwLowDateTime); + + /* pass "no time" as epoch */ + if (x == 0) + return 0; + x -= FACTOR; /* number of 100ns between 1601 and 1970 */ rem = x % ((long long)NSPERSEC); rem += (NSPERSEC / 2);