The GDateTime APIs provided by GLib avoid portability pitfalls, such
as some platforms where 'struct timeval.tv_sec' field is still 'long'
instead of 'time_t'. When combined with automatic cleanup, GDateTime
often results in simpler code too.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
hw/net/rocker/rocker.h | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/hw/net/rocker/rocker.h b/hw/net/rocker/rocker.h
index 941c932265..412fa44d01 100644
--- a/hw/net/rocker/rocker.h
+++ b/hw/net/rocker/rocker.h
@@ -25,14 +25,9 @@
#if defined(DEBUG_ROCKER)
# define DPRINTF(fmt, ...) \
do { \
- struct timeval tv; \
- char timestr[64]; \
- time_t now; \
- gettimeofday(&tv, NULL); \
- now = tv.tv_sec; \
- strftime(timestr, sizeof(timestr), "%T", localtime(&now)); \
- fprintf(stderr, "%s.%06ld ", timestr, tv.tv_usec); \
- fprintf(stderr, "ROCKER: " fmt, ## __VA_ARGS__); \
+ g_autoptr(GDateTime) now = g_date_time_new_now_local(); \
+ g_autofree char *nowstr = g_date_time_format(now, "%T.%f");\
+ fprintf(stderr, "%s ROCKER: " fmt, nowstr, ## __VA_ARGS__);\
} while (0)
#else
static inline GCC_FMT_ATTR(1, 2) int DPRINTF(const char *fmt, ...)
--
2.31.1
ping: anyone willing to give a review of this one
On Wed, May 05, 2021 at 11:36:58AM +0100, Daniel P. Berrangé wrote:
> The GDateTime APIs provided by GLib avoid portability pitfalls, such
> as some platforms where 'struct timeval.tv_sec' field is still 'long'
> instead of 'time_t'. When combined with automatic cleanup, GDateTime
> often results in simpler code too.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> hw/net/rocker/rocker.h | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/hw/net/rocker/rocker.h b/hw/net/rocker/rocker.h
> index 941c932265..412fa44d01 100644
> --- a/hw/net/rocker/rocker.h
> +++ b/hw/net/rocker/rocker.h
> @@ -25,14 +25,9 @@
> #if defined(DEBUG_ROCKER)
> # define DPRINTF(fmt, ...) \
> do { \
> - struct timeval tv; \
> - char timestr[64]; \
> - time_t now; \
> - gettimeofday(&tv, NULL); \
> - now = tv.tv_sec; \
> - strftime(timestr, sizeof(timestr), "%T", localtime(&now)); \
> - fprintf(stderr, "%s.%06ld ", timestr, tv.tv_usec); \
> - fprintf(stderr, "ROCKER: " fmt, ## __VA_ARGS__); \
> + g_autoptr(GDateTime) now = g_date_time_new_now_local(); \
> + g_autofree char *nowstr = g_date_time_format(now, "%T.%f");\
> + fprintf(stderr, "%s ROCKER: " fmt, nowstr, ## __VA_ARGS__);\
> } while (0)
> #else
> static inline GCC_FMT_ATTR(1, 2) int DPRINTF(const char *fmt, ...)
> --
> 2.31.1
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
Daniel P. Berrangé <berrange@redhat.com> wrote:
> ping: anyone willing to give a review of this one
>
> On Wed, May 05, 2021 at 11:36:58AM +0100, Daniel P. Berrangé wrote:
>> The GDateTime APIs provided by GLib avoid portability pitfalls, such
>> as some platforms where 'struct timeval.tv_sec' field is still 'long'
>> instead of 'time_t'. When combined with automatic cleanup, GDateTime
>> often results in simpler code too.
>>
>> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
>> ---
>> hw/net/rocker/rocker.h | 11 +++--------
>> 1 file changed, 3 insertions(+), 8 deletions(-)
>>
>> diff --git a/hw/net/rocker/rocker.h b/hw/net/rocker/rocker.h
>> index 941c932265..412fa44d01 100644
>> --- a/hw/net/rocker/rocker.h
>> +++ b/hw/net/rocker/rocker.h
>> @@ -25,14 +25,9 @@
>> #if defined(DEBUG_ROCKER)
>> # define DPRINTF(fmt, ...) \
>> do { \
>> - struct timeval tv; \
>> - char timestr[64]; \
>> - time_t now; \
>> - gettimeofday(&tv, NULL); \
>> - now = tv.tv_sec; \
>> - strftime(timestr, sizeof(timestr), "%T", localtime(&now)); \
>> - fprintf(stderr, "%s.%06ld ", timestr, tv.tv_usec); \
>> - fprintf(stderr, "ROCKER: " fmt, ## __VA_ARGS__); \
>> + g_autoptr(GDateTime) now = g_date_time_new_now_local(); \
>> + g_autofree char *nowstr = g_date_time_format(now, "%T.%f");\
>> + fprintf(stderr, "%s ROCKER: " fmt, nowstr, ## __VA_ARGS__);\
>> } while (0)
>> #else
>> static inline GCC_FMT_ATTR(1, 2) int DPRINTF(const char *fmt, ...)
Reviewed-by: Juan Quintela <quintela@redhat.com>
© 2016 - 2026 Red Hat, Inc.