diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/timer.c | 22 | ||||
-rw-r--r-- | lib/timer.h | 2 | ||||
-rw-r--r-- | lib/unaligned.h | 12 |
3 files changed, 23 insertions, 13 deletions
diff --git a/lib/timer.c b/lib/timer.c index ed731d26..ddf41340 100644 --- a/lib/timer.c +++ b/lib/timer.c @@ -305,7 +305,8 @@ tm_format_time(char *x, struct timeformat *fmt, btime t) btime rt = current_real_time() - dt; int v1 = !fmt->limit || (dt < fmt->limit); - tm_format_real_time(x, v1 ? fmt->fmt1 : fmt->fmt2, rt); + if (!tm_format_real_time(x, TM_DATETIME_BUFFER_SIZE, v1 ? fmt->fmt1 : fmt->fmt2, rt)) + strcpy(x, "<error>"); } /* Replace %f in format string with usec scaled to requested precision */ @@ -353,8 +354,8 @@ strfusec(char *buf, int size, const char *fmt, uint usec) return str - buf; } -void -tm_format_real_time(char *x, const char *fmt, btime t) +int +tm_format_real_time(char *x, size_t max, const char *fmt, btime t) { s64 t1 = t TO_S; s64 t2 = t - t1 S; @@ -362,17 +363,14 @@ tm_format_real_time(char *x, const char *fmt, btime t) time_t ts = t1; struct tm tm; if (!localtime_r(&ts, &tm)) - goto err; + return 0; byte tbuf[TM_DATETIME_BUFFER_SIZE]; - if (!strfusec(tbuf, TM_DATETIME_BUFFER_SIZE, fmt, t2)) - goto err; - - if (!strftime(x, TM_DATETIME_BUFFER_SIZE, tbuf, &tm)) - goto err; + if (!strfusec(tbuf, max, fmt, t2)) + return 0; - return; + if (!strftime(x, max, tbuf, &tm)) + return 0; -err: - strcpy(x, "<error>"); + return 1; } diff --git a/lib/timer.h b/lib/timer.h index ed8f0d02..3b99825f 100644 --- a/lib/timer.h +++ b/lib/timer.h @@ -122,6 +122,6 @@ struct timeformat { btime tm_parse_time(char *x); void tm_format_time(char *x, struct timeformat *fmt, btime t); -void tm_format_real_time(char *x, const char *fmt, btime t); +int tm_format_real_time(char *x, size_t max, const char *fmt, btime t); #endif diff --git a/lib/unaligned.h b/lib/unaligned.h index 0da1fdb4..dfe0906f 100644 --- a/lib/unaligned.h +++ b/lib/unaligned.h @@ -20,6 +20,12 @@ #include "sysdep/unix/endian.h" #include "lib/string.h" +static inline u8 +get_u8(const void *p) +{ + return * (u8 *) p; +} + static inline u16 get_u16(const void *p) { @@ -53,6 +59,12 @@ get_u64(const void *p) } static inline void +put_u8(void *p, u8 x) +{ + memcpy(p, &x, 1); +} + +static inline void put_u16(void *p, u16 x) { x = htons(x); |