diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cf64bd3661254e1ce6629cb872dfb94f06452f62..bd77a34ef90496a2617bba17e98fc34bc881211e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -779,6 +779,7 @@ virStrToLong_ui; virStrToLong_ull; virStrcpy; virStrncpy; +virTimestamp; # uuid.h diff --git a/src/util/util.c b/src/util/util.c index 2632fe701f6aec3df8917f39dabe52f6564c326f..f7c7d3253ce8b0b632f2f447206a7f85109c7fdf 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -38,6 +38,7 @@ #include #include #include +#include #if HAVE_MMAP # include #endif @@ -2912,3 +2913,30 @@ int virBuildPathInternal(char **path, ...) return ret; } + +/** + * virTimestamp: + * + * Return an allocated string containing the current date and time, + * followed by ": ". Return NULL on allocation failure. + */ +char * +virTimestamp(void) +{ + struct timeval cur_time; + struct tm time_info; + char timestr[100]; + char *timestamp; + + gettimeofday(&cur_time, NULL); + localtime_r(&cur_time.tv_sec, &time_info); + + strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", &time_info); + + if (virAsprintf(×tamp, "%s.%03d: ", + timestr, (int) cur_time.tv_usec / 1000) < 0) { + return NULL; + } + + return timestamp; +} diff --git a/src/util/util.h b/src/util/util.h index 5de4fd67d4825da3b5ac0820ae721dd6d9a92333..a240d8791c7f228160887655d7c8a761f38c4f7d 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -160,6 +160,7 @@ int virFileOpenTtyAt(const char *ptmx, char* virFilePid(const char *dir, const char *name); + int virFileWritePidPath(const char *path, pid_t pid) ATTRIBUTE_RETURN_CHECK; int virFileWritePid(const char *dir, @@ -277,4 +278,6 @@ void virFileWaitForDevices(void); # define virBuildPath(path, ...) virBuildPathInternal(path, __VA_ARGS__, NULL) int virBuildPathInternal(char **path, ...) ATTRIBUTE_SENTINEL; +char *virTimestamp(void); + #endif /* __VIR_UTIL_H__ */