TLS: PIPELINING under OpenSSL
[exim.git] / src / src / tod.c
index c6afb713eb2bd1706e9100ebe8d0d9c6d8d27583..5f451ba96de445e6b52a60b01f5a04a9ed4bc8dd 100644 (file)
@@ -2,7 +2,7 @@
 *     Exim - an Internet mail transport agent    *
 *************************************************/
 
-/* Copyright (c) University of Cambridge 1995 - 2009 */
+/* Copyright (c) University of Cambridge 1995 - 2014 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 /* A function for returning the time of day in various formats */
@@ -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,20 @@ 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);
+  /* Unix epoch/usec format */
+  (void) sprintf(CS timebuf, TIME_T_FMT "%06ld", tv.tv_sec, (long) tv.tv_usec );
+  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;
@@ -62,8 +74,8 @@ if (type == tod_log) type = log_timezone? tod_log_zone : tod_log_bare;
 
 else if (type == tod_epoch)
   {
-  (void) sprintf(CS timebuf, "%d", (int)now);  /* Unix epoch format */
-  return timebuf;
+  (void) sprintf(CS timebuf, TIME_T_FMT, now);  /* Unix epoch format */
+  return timebuf;      /* NB the above will be wrong if time_t is FP */
   }
 
 else if (type == tod_zulu)