diff --git a/src/time.c b/src/time.c index 68f160c..de59624 100644 --- a/src/time.c +++ b/src/time.c @@ -22,27 +22,36 @@ #include "config.h" #include #include +#include #include +#include #include "tio/error.h" #include "tio/print.h" +// "YYYY-MM-DDThh:mm:ss.sss" (ISO-8601 format). +#define TIME_STRING_SIZE 24 + char * current_time(void) { - static char time_string[20]; - time_t t; + static char time_string[TIME_STRING_SIZE]; struct tm *tmp; - t = time(NULL); - tmp = localtime(&t); + struct timeval tv; + gettimeofday(&tv,NULL); + + tmp = localtime(&tv.tv_sec); if (tmp == NULL) { error_printf("Retrieving local time failed"); exit(EXIT_FAILURE); } - strftime(time_string, sizeof(time_string), "%H:%M:%S", tmp); + size_t len = strftime(time_string, sizeof(time_string), "%Y-%m-%dT%H:%M:%S", tmp); + if (len) { + len = snprintf(time_string + len, TIME_STRING_SIZE - len, ".%03ld", (long)tv.tv_usec / 1000); + } - return time_string; + return (len >= 0) && (len < TIME_STRING_SIZE) ? time_string : NULL; } void delay(long ms) diff --git a/src/tty.c b/src/tty.c index 52eafe4..8e1190a 100644 --- a/src/tty.c +++ b/src/tty.c @@ -619,7 +619,7 @@ int tty_connect(void) static char previous_char = 0; static bool first = true; int status; - time_t next_timestamp = 0; + bool next_timestamp = false; char* now = NULL; /* Open tty device */ @@ -658,7 +658,7 @@ int tty_connect(void) tainted = false; if (option.timestamp) - next_timestamp = time(NULL); + next_timestamp = true; /* Save current port settings */ if (tcgetattr(fd, &tio_old) < 0) @@ -715,19 +715,21 @@ int tty_connect(void) if (next_timestamp && input_char != '\n' && input_char != '\r') { now = current_time(); - fprintf(stdout, ANSI_COLOR_GRAY "[%s] " ANSI_COLOR_RESET, now); - if (option.log) - { - log_write('['); - while (*now != '\0') + if (now) { + fprintf(stdout, ANSI_COLOR_GRAY "[%s] " ANSI_COLOR_RESET, now); + if (option.log) { - log_write(*now); - ++now; + log_write('['); + while (*now != '\0') + { + log_write(*now); + ++now; + } + log_write(']'); + log_write(' '); } - log_write(']'); - log_write(' '); + next_timestamp = false; } - next_timestamp = 0; } /* Map input character */ @@ -736,7 +738,7 @@ int tty_connect(void) print('\r'); print('\n'); if (option.timestamp) - next_timestamp = time(NULL); + next_timestamp = true; } else { /* Print received tty character to stdout */ @@ -751,7 +753,7 @@ int tty_connect(void) tainted = true; if (input_char == '\n' && option.timestamp) - next_timestamp = time(NULL); + next_timestamp = true; } else { /* Error reading - device is likely unplugged */