From 4e1ff1a404339243481ef9d3e92e8547dde7a767 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Fri, 14 Mar 2008 16:24:19 +0200 Subject: [PATCH] Added silc_time_epoch, converting SilcTime to Epoch time value --- lib/silcutil/silctime.c | 20 ++++++++++++++++ lib/silcutil/silctime.h | 16 ++++++++++++- lib/silcutil/tests/test_silcbuffmt.c | 11 +++++++++ lib/silcutil/tests/test_silctime.c | 36 ++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/lib/silcutil/silctime.c b/lib/silcutil/silctime.c index 37444269..c17f08d2 100644 --- a/lib/silcutil/silctime.c +++ b/lib/silcutil/silctime.c @@ -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) diff --git a/lib/silcutil/silctime.h b/lib/silcutil/silctime.h index 4fc7e4b7..ade1e18a 100644 --- a/lib/silcutil/silctime.h +++ b/lib/silcutil/silctime.h @@ -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 diff --git a/lib/silcutil/tests/test_silcbuffmt.c b/lib/silcutil/tests/test_silcbuffmt.c index 6e856e97..8eb19115 100644 --- a/lib/silcutil/tests/test_silcbuffmt.c +++ b/lib/silcutil/tests/test_silcbuffmt.c @@ -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: diff --git a/lib/silcutil/tests/test_silctime.c b/lib/silcutil/tests/test_silctime.c index 82289901..bdf1475b 100644 --- a/lib/silcutil/tests/test_silctime.c +++ b/lib/silcutil/tests/test_silctime.c @@ -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: -- 2.24.0