summaryrefslogtreecommitdiff
path: root/Src/Modules/datetime.c
diff options
context:
space:
mode:
authordana <dana@dana.is>2018-06-20 17:29:56 -0500
committerdana <dana@dana.is>2018-06-20 17:29:56 -0500
commit394f3a47e464b67b17e2cb7166df066829250e88 (patch)
tree0fe4262c7857d546878f64b53fc2813e6f59296b /Src/Modules/datetime.c
parenteada7e1138a3fca90f085dd764ad86098e58c9ac (diff)
downloadzsh-394f3a47e464b67b17e2cb7166df066829250e88.tar.gz
zsh-394f3a47e464b67b17e2cb7166df066829250e88.zip
43075: Support nanosecond-precision time formatting
* Teach ztrftime() %9. and %N for nanoseconds * Update prompt expansion to pass sub-second times for time formatting * Update zsh/stat to pass sub-second times for atime/mtime/ctime Patch heavily based on Oliver's earlier work @ workers/24059
Diffstat (limited to 'Src/Modules/datetime.c')
-rw-r--r--Src/Modules/datetime.c46
1 files changed, 5 insertions, 41 deletions
diff --git a/Src/Modules/datetime.c b/Src/Modules/datetime.c
index 6e9047bc5..be378b347 100644
--- a/Src/Modules/datetime.c
+++ b/Src/Modules/datetime.c
@@ -180,66 +180,30 @@ getcurrentsecs(UNUSED(Param pm))
}
static double
-getcurrentrealtime(Param pm)
+getcurrentrealtime(UNUSED(Param pm))
{
-#ifdef HAVE_CLOCK_GETTIME
struct timespec now;
-
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- zwarn("%s: unable to retrieve time: %e", pm->node.nam, errno);
- return (double)0.0;
- }
-
+ zgettime(&now);
return (double)now.tv_sec + (double)now.tv_nsec * 1e-9;
-#else
- struct timeval now;
- struct timezone dummy_tz;
-
- (void)pm;
- gettimeofday(&now, &dummy_tz);
-
- return (double)now.tv_sec + (double)now.tv_usec * 1e-6;
-#endif
}
static char **
-getcurrenttime(Param pm)
+getcurrenttime(UNUSED(Param pm))
{
char **arr;
char buf[DIGBUFSIZE];
-
-#ifdef HAVE_CLOCK_GETTIME
struct timespec now;
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- zwarn("%s: unable to retrieve time: %e", pm->node.nam, errno);
- return NULL;
- }
-
- arr = (char **)zhalloc(3 * sizeof(*arr));
- sprintf(buf, "%ld", (long)now.tv_sec);
- arr[0] = dupstring(buf);
- sprintf(buf, "%ld", now.tv_nsec);
- arr[1] = dupstring(buf);
- arr[2] = NULL;
-
- return arr;
-#else
- struct timeval now;
- struct timezone dummy_tz;
-
- (void)pm;
- gettimeofday(&now, &dummy_tz);
+ zgettime(&now);
arr = (char **)zhalloc(3 * sizeof(*arr));
sprintf(buf, "%ld", (long)now.tv_sec);
arr[0] = dupstring(buf);
- sprintf(buf, "%ld", (long)now.tv_usec * 1000);
+ sprintf(buf, "%ld", (long)now.tv_nsec);
arr[1] = dupstring(buf);
arr[2] = NULL;
return arr;
-#endif
}
static struct builtin bintab[] = {