time support: check and define NDN_CPP_HAVE_GMTIME_SUPPORT. In ndn_toIsoString and ndn_fromIsoString, return an error if not supported.
diff --git a/ndn-cpp/c/util/time.c b/ndn-cpp/c/util/time.c
index 7ffa517..b7de490 100644
--- a/ndn-cpp/c/util/time.c
+++ b/ndn-cpp/c/util/time.c
@@ -14,14 +14,16 @@
ndn_getNowMilliseconds()
{
struct timeval t;
+ // Note: configure.ac requires gettimeofday.
gettimeofday(&t, 0);
return t.tv_sec * 1000.0 + t.tv_usec / 1000.0;
}
-void
-ndn_toIsoString(ndn_MillisecondsSince1970 time, char *isoString)
+ndn_Error
+ndn_toIsoString(ndn_MillisecondsSince1970 milliseconds, char *isoString)
{
- double secondsSince1970 = time / 1000.0;
+#if NDN_CPP_HAVE_GMTIME_SUPPORT
+ double secondsSince1970 = milliseconds / 1000.0;
char fractionBuffer[10];
sprintf(fractionBuffer, "%.06lf", fmod(secondsSince1970, 1.0));
const char *fraction = strchr(fractionBuffer, '.');
@@ -33,24 +35,35 @@
struct tm* gmt = gmtime(&seconds);
sprintf(isoString, "%04d%02d%02dT%02d%02d%02d%s", 1900 + gmt->tm_year, gmt->tm_mon + 1, gmt->tm_mday,
gmt->tm_hour, gmt->tm_min, gmt->tm_sec, fraction);
+
+ return NDN_ERROR_success;
+#else
+ return NDN_ERROR_Time_functions_are_not_supported_by_the_standard_library;
+#endif
}
-ndn_MillisecondsSince1970
-ndn_fromIsoString(const char* isoString)
+ndn_Error
+ndn_fromIsoString(const char* isoString, ndn_MillisecondsSince1970 *milliseconds)
{
+#if NDN_CPP_HAVE_GMTIME_SUPPORT
// Initialize time zone, etc.
time_t dummyTime = 0;
- struct tm time = *gmtime(&dummyTime);
+ struct tm tm1 = *gmtime(&dummyTime);
- sscanf(isoString, "%4d%2d%2dT%2d%2d", &time.tm_year, &time.tm_mon, &time.tm_mday, &time.tm_hour, &time.tm_min);
+ sscanf(isoString, "%4d%2d%2dT%2d%2d", &tm1.tm_year, &tm1.tm_mon, &tm1.tm_mday, &tm1.tm_hour, &tm1.tm_min);
// Skip the time past minutes and get the float seconds.
double seconds;
sscanf(isoString + (4 + 2 + 2 + 1 + 2 + 2), "%lf", &seconds);
// tm_year starts from 1900.
- time.tm_year -= 1900;
+ tm1.tm_year -= 1900;
// tm_mon starts from 0, not 1.
- time.tm_mon -= 1;
- time.tm_sec = 0;
- return (timegm(&time) + seconds) * 1000.0;
-}
\ No newline at end of file
+ tm1.tm_mon -= 1;
+ tm1.tm_sec = 0;
+
+ *milliseconds = (timegm(&tm1) + seconds) * 1000.0;
+ return NDN_ERROR_success;
+#else
+ return NDN_ERROR_Time_functions_are_not_supported_by_the_standard_library;
+#endif
+}