Added silc_time_epoch, converting SilcTime to Epoch time value
authorPekka Riikonen <priikone@silcnet.org>
Fri, 14 Mar 2008 14:24:19 +0000 (16:24 +0200)
committerPekka Riikonen <priikone@silcnet.org>
Fri, 14 Mar 2008 14:24:19 +0000 (16:24 +0200)
lib/silcutil/silctime.c
lib/silcutil/silctime.h
lib/silcutil/tests/test_silcbuffmt.c
lib/silcutil/tests/test_silctime.c

index 37444269efd4ce08ed2d0b7bea4bc39bd06a9710..c17f08d27692e6e6ea1a9b537fa275b88a464b73 100644 (file)
@@ -173,6 +173,26 @@ SilcBool silc_time_value(SilcInt64 time_val, SilcTime ret_time)
   return TRUE;
 }
 
+/* SilcTime to epoch */
+
+SilcUInt64 silc_time_epoch(SilcTime timeval)
+{
+  struct tm val;
+
+  if (!timeval)
+    return 0;
+
+  val.tm_sec = timeval->second;
+  val.tm_min = timeval->minute;
+  val.tm_hour = timeval->hour;
+  val.tm_mday = timeval->day;
+  val.tm_mon = timeval->month - 1;
+  val.tm_year = timeval->year - 1900;
+  val.tm_isdst = timeval->dst;
+
+  return (SilcUInt64)mktime(&val);
+}
+
 /* Returns timezone */
 
 SilcBool silc_timezone(char *timezone, SilcUInt32 timezone_size)
index 4fc7e4b7527042f970aa2c0622b7887e962d18d3..ade1e18ad52151b9667328d995b3a8941af8bd88 100644 (file)
@@ -135,7 +135,7 @@ const char *silc_time_string(SilcInt64 time_val_sec);
  *
  * SYNOPSIS
  *
- *   SilcBool silc_time_value(SilcInt64 time_val_msec, SilcTime ret_time);
+ *    SilcBool silc_time_value(SilcInt64 time_val_msec, SilcTime ret_time);
  *
  * DESCRIPTION
  *
@@ -147,6 +147,20 @@ const char *silc_time_string(SilcInt64 time_val_sec);
  ***/
 SilcBool silc_time_value(SilcInt64 time_val_msec, SilcTime ret_time);
 
+/****f* silcutil/silc_time_value
+ *
+ * SYNOPSIS
+ *
+ *    SilcUInt64 silc_time_epoch(SilcTime timeval);
+ *
+ * DESCRIPTION
+ *
+ *    Converts SilcTime into Epoch time value and returns the converted
+ *    value.
+ *
+ ***/
+SilcUInt64 silc_time_epoch(SilcTime timeval);
+
 /****f* silcutil/silc_timezone
  *
  * SYNOPSIS
index 6e856e974e743e1b7f102104d18d0b224e172002..8eb191153da08f04ec0f5e76d75982f7dbfa07d3 100644 (file)
@@ -147,6 +147,17 @@ int main(int argc, char **argv)
                            SILC_STR_END, SILC_STR_END) < 0)
     goto err;
 
+  SILC_LOG_DEBUG(("Print all lines"));
+  silc_snprintf(string, sizeof(string),
+       "Rfoo\n\n\nbazfoobar\nRbarfoofoo\nRbar\nbaz\nRbazfoo");
+  silc_buffer_set(&buf, string, strlen(string));
+  SILC_LOG_DEBUG(("string: %s", string));
+  if (silc_buffer_unformat(&buf,
+                           SILC_STR_REGEX("", SILC_STR_REGEX_NL),
+                            SILC_STR_FUNC(print, NULL, NULL),
+                           SILC_STR_END, SILC_STR_END) < 0)
+    goto err;
+
   success = TRUE;
 
  err:
index 822899019393d2ee190756293556152a002e9e3e..bdf1475b1f0de7e91d2acbf8bffea331ed63cdd3 100644 (file)
@@ -7,6 +7,7 @@ int main(int argc, char **argv)
   SilcBool success = FALSE;
   SilcTimeStruct curtime;
   unsigned char ts[32];
+  SilcUInt64 val1, val2;
 
   if (argc > 1 && !strcmp(argv[1], "-d")) {
     silc_log_debug(TRUE);
@@ -30,11 +31,46 @@ int main(int argc, char **argv)
   SILC_LOG_DEBUG(("utc_east  : %d", curtime.utc_east));
   SILC_LOG_DEBUG(("dst       : %d", curtime.dst));
 
+
   silc_time_universal_string(&curtime, ts, sizeof(ts));
   SILC_LOG_DEBUG(("Universal: %s", ts));
   silc_time_generalized_string(&curtime, ts, sizeof(ts));
   SILC_LOG_DEBUG(("Generaliz: %s", ts));
 
+
+  val1 = silc_time();
+  SILC_LOG_DEBUG(("Time: %llu", val1));
+  if (!silc_time_value(val1 * 1000, &curtime))
+    goto err;
+  SILC_LOG_DEBUG(("year      : %d", curtime.year));
+  SILC_LOG_DEBUG(("month     : %d", curtime.month));
+  SILC_LOG_DEBUG(("day       : %d", curtime.day));
+  SILC_LOG_DEBUG(("hour      : %d", curtime.hour));
+  SILC_LOG_DEBUG(("minute    : %d", curtime.minute));
+  SILC_LOG_DEBUG(("second    : %d", curtime.second));
+  SILC_LOG_DEBUG(("msecond   : %d", curtime.msecond));
+  SILC_LOG_DEBUG(("utc_hour  : %d", curtime.utc_hour));
+  SILC_LOG_DEBUG(("utc_min   : %d", curtime.utc_minute));
+  SILC_LOG_DEBUG(("utc_east  : %d", curtime.utc_east));
+  SILC_LOG_DEBUG(("dst       : %d", curtime.dst));
+  val2 = silc_time_epoch(&curtime);
+  SILC_LOG_DEBUG(("Time: %llu", val2));
+  if (!silc_time_value(val2 * 1000, &curtime))
+    goto err;
+  SILC_LOG_DEBUG(("year      : %d", curtime.year));
+  SILC_LOG_DEBUG(("month     : %d", curtime.month));
+  SILC_LOG_DEBUG(("day       : %d", curtime.day));
+  SILC_LOG_DEBUG(("hour      : %d", curtime.hour));
+  SILC_LOG_DEBUG(("minute    : %d", curtime.minute));
+  SILC_LOG_DEBUG(("second    : %d", curtime.second));
+  SILC_LOG_DEBUG(("msecond   : %d", curtime.msecond));
+  SILC_LOG_DEBUG(("utc_hour  : %d", curtime.utc_hour));
+  SILC_LOG_DEBUG(("utc_min   : %d", curtime.utc_minute));
+  SILC_LOG_DEBUG(("utc_east  : %d", curtime.utc_east));
+  SILC_LOG_DEBUG(("dst       : %d", curtime.dst));
+  if (val1 != val2)
+    goto err;
+
   success = TRUE;
 
  err: