summaryrefslogtreecommitdiff
path: root/Src/glob.c
diff options
context:
space:
mode:
authorOliver Kiddle <opk@users.sourceforge.net>2007-11-01 17:57:57 +0000
committerOliver Kiddle <opk@users.sourceforge.net>2007-11-01 17:57:57 +0000
commitfe5390a04ce44daf1604298756d772b2ce12b268 (patch)
tree1c13e446cacb0e9462c07e5de027a181b592ea8f /Src/glob.c
parent8d956e9bcb8fe5aa3ca92e3c856b26800af11ff5 (diff)
downloadzsh-fe5390a04ce44daf1604298756d772b2ce12b268.tar.gz
zsh-fe5390a04ce44daf1604298756d772b2ce12b268.zip
24050: handle nanosecond resolution timestamps on systems that support them
Diffstat (limited to 'Src/glob.c')
-rw-r--r--Src/glob.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/Src/glob.c b/Src/glob.c
index b703926a9..e81fd1e97 100644
--- a/Src/glob.c
+++ b/Src/glob.c
@@ -52,6 +52,18 @@ struct gmatch {
long _mtime;
long _ctime;
long _links;
+#ifdef GET_ST_ATIME_NSEC
+ long ansec;
+ long _ansec;
+#endif
+#ifdef GET_ST_MTIME_NSEC
+ long mnsec;
+ long _mnsec;
+#endif
+#ifdef GET_ST_CTIME_NSEC
+ long cnsec;
+ long _cnsec;
+#endif
};
#define GS_NAME 1
@@ -373,6 +385,15 @@ insert(char *s, int checked)
matchptr->mtime = buf.st_mtime;
matchptr->ctime = buf.st_ctime;
matchptr->links = buf.st_nlink;
+#ifdef GET_ST_ATIME_NSEC
+ matchptr->ansec = GET_ST_ATIME_NSEC(buf);
+#endif
+#ifdef GET_ST_MTIME_NSEC
+ matchptr->mnsec = GET_ST_MTIME_NSEC(buf);
+#endif
+#ifdef GET_ST_CTIME_NSEC
+ matchptr->cnsec = GET_ST_CTIME_NSEC(buf);
+#endif
}
if (statted & 2) {
matchptr->_size = buf2.st_size;
@@ -380,6 +401,15 @@ insert(char *s, int checked)
matchptr->_mtime = buf2.st_mtime;
matchptr->_ctime = buf2.st_ctime;
matchptr->_links = buf2.st_nlink;
+#ifdef GET_ST_ATIME_NSEC
+ matchptr->_ansec = GET_ST_ATIME_NSEC(buf);
+#endif
+#ifdef GET_ST_MTIME_NSEC
+ matchptr->_mnsec = GET_ST_MTIME_NSEC(buf);
+#endif
+#ifdef GET_ST_CTIME_NSEC
+ matchptr->_cnsec = GET_ST_CTIME_NSEC(buf);
+#endif
}
matchptr++;
@@ -885,12 +915,24 @@ gmatchcmp(Gmatch a, Gmatch b)
break;
case GS_ATIME:
r = a->atime - b->atime;
+#ifdef GET_ST_ATIME_NSEC
+ if (!r)
+ r = a->ansec - b->ansec;
+#endif
break;
case GS_MTIME:
r = a->mtime - b->mtime;
+#ifdef GET_ST_MTIME_NSEC
+ if (!r)
+ r = a->mnsec - b->mnsec;
+#endif
break;
case GS_CTIME:
r = a->ctime - b->ctime;
+#ifdef GET_ST_CTIME_NSEC
+ if (!r)
+ r = a->cnsec - b->cnsec;
+#endif
break;
case GS_LINKS:
r = b->links - a->links;
@@ -900,12 +942,24 @@ gmatchcmp(Gmatch a, Gmatch b)
break;
case GS__ATIME:
r = a->_atime - b->_atime;
+#ifdef GET_ST_ATIME_NSEC
+ if (!r)
+ r = a->_ansec - b->_ansec;
+#endif
break;
case GS__MTIME:
r = a->_mtime - b->_mtime;
+#ifdef GET_ST_MTIME_NSEC
+ if (!r)
+ r = a->_mnsec - b->_mnsec;
+#endif
break;
case GS__CTIME:
r = a->_ctime - b->_ctime;
+#ifdef GET_ST_CTIME_NSEC
+ if (!r)
+ r = a->_cnsec - b->_cnsec;
+#endif
break;
case GS__LINKS:
r = b->_links - a->_links;