diff --git a/include/Clock.h b/include/Clock.h index 2ed163b..c78e7b5 100644 --- a/include/Clock.h +++ b/include/Clock.h @@ -16,7 +16,7 @@ SNTPError clock_sync(NetworkInterface &net); -const char *clock_timestring(const char *format); +const char *clock_timestring(struct timeval time, const char *format); const char *clock_iso8601string(void); #endif diff --git a/src/Clock.cpp b/src/Clock.cpp index 93a1f8c..2c80205 100644 --- a/src/Clock.cpp +++ b/src/Clock.cpp @@ -28,8 +28,7 @@ return SNTPSuccess; } -const char *clock_timestring(const char *format) { - struct timeval time = clock_time(); +const char *clock_timestring(struct timeval time, const char *format) { struct tm *local_time = localtime(&time.tv_sec); static char buffer[64]; @@ -46,5 +45,19 @@ } const char *clock_iso8601string(void) { - return clock_timestring("%Y-%m-%dT%H:%M:%S"); + struct timeval time = clock_time(); + const char *timestring = clock_timestring(time, "%Y-%m-%dT%H:%M:%S"); + + static char buffer[128]; + int buffer_size = sizeof(buffer); + int written; + written = snprintf( + buffer, buffer_size, "%s.%05li", timestring, time.tv_usec); + + if (written >= buffer_size) { + // It overflowed, so return something useful + return "(iso8601 overflow)"; + } else { + return buffer; + } }