Support expansion variable for hi-res timestamp (bug 1172).
authorJeremy Harris <jgh146exb@wizmail.org>
Mon, 23 Apr 2012 20:03:46 +0000 (21:03 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Thu, 17 May 2012 21:27:04 +0000 (22:27 +0100)
src/src/expand.c
src/src/macros.h
src/src/tod.c

index a571fa5267d950fd6812e95e8ba9a203c3d4d1ca..70fb32c5e3dd110afd060ee1320fe12b6da81179 100644 (file)
@@ -363,6 +363,7 @@ enum {
                         /* local_scan()) */
   vtype_todbsdin,       /* value not used; generate BSD inbox tod */
   vtype_tode,           /* value not used; generate tod in epoch format */
+  vtype_todel,          /* value not used; generate tod in epoch/usec format */
   vtype_todf,           /* value not used; generate full tod */
   vtype_todl,           /* value not used; generate log tod */
   vtype_todlf,          /* value not used; generate log file datestamp tod */
@@ -620,6 +621,7 @@ static var_entry var_table[] = {
 #endif
   { "tod_bsdinbox",        vtype_todbsdin,    NULL },
   { "tod_epoch",           vtype_tode,        NULL },
+  { "tod_epoch_l",         vtype_todel,       NULL },
   { "tod_full",            vtype_todf,        NULL },
   { "tod_log",             vtype_todl,        NULL },
   { "tod_logfile",         vtype_todlf,       NULL },
@@ -1589,6 +1591,9 @@ while (last > first)
     case vtype_tode:                           /* Unix epoch time of day */
     return tod_stamp(tod_epoch);
 
+    case vtype_todel:                          /* Unix epoch/usec time of day */
+    return tod_stamp(tod_epoch_l);
+
     case vtype_todf:                           /* Full time of day */
     return tod_stamp(tod_full);
 
index 9889d681301dd5e91ee656b6504fce5ad25ec29d..f7a22b668b0e111ebc42b74a071d97de4e8a1412 100644 (file)
@@ -196,7 +196,7 @@ enum { RESET_NEXT, RESET_ANSWERS, RESET_AUTHORITY, RESET_ADDITIONAL };
 
 enum { tod_log, tod_log_bare, tod_log_zone, tod_log_datestamp_daily,
        tod_log_datestamp_monthly, tod_zone, tod_full, tod_bsdin,
-       tod_mbx, tod_epoch, tod_zulu };
+       tod_mbx, tod_epoch, tod_epoch_l, tod_zulu };
 
 /* For identifying types of driver */
 
index c6afb713eb2bd1706e9100ebe8d0d9c6d8d27583..9aa845c822b706596a3653ecd0450de460f7213a 100644 (file)
@@ -34,6 +34,7 @@ option.
 Argument:  type of timestamp required:
              tod_bsdin                  BSD inbox format
              tod_epoch                  Unix epoch format
+             tod_epochl                 Unix epoch/usec format
              tod_full                   full date and time
              tod_log                    log file data line format,
                                           with zone if log_timezone is TRUE
@@ -51,9 +52,19 @@ Returns:   pointer to fixed buffer containing the timestamp
 uschar *
 tod_stamp(int type)
 {
-time_t now = time(NULL);
+time_t now;
 struct tm *t;
 
+if (type == tod_epoch_l)
+  {
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+  (void) sprintf(CS timebuf, "%ld%06ld", tv.tv_sec, tv.tv_usec );  /* Unix epoch/usec format */
+  return timebuf;
+  }
+
+now = time(NULL);
+
 /* Vary log type according to timezone requirement */
 
 if (type == tod_log) type = log_timezone? tod_log_zone : tod_log_bare;