From c28ba8c1947e1b31874bf5888742d1607ed7ae61 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Thu, 25 Apr 2013 21:37:25 +0200 Subject: [PATCH] fix 32 wrap around bug when handling 64 bit time values Signed-off-by: John Crispin --- log.c | 6 ++++-- logread.c | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/log.c b/log.c index d2a7158..82fb8f8 100644 --- a/log.c +++ b/log.c @@ -12,6 +12,8 @@ * GNU General Public License for more details. */ +#include + #include #include @@ -56,7 +58,7 @@ static int read_log(struct ubus_context *ctx, struct ubus_object *obj, blobmsg_add_u32(&b, "id", l->id); blobmsg_add_u32(&b, "priority", l->priority); blobmsg_add_u32(&b, "source", l->source); - blobmsg_add_u64(&b, "time", (l->ts.tv_sec * 1000) + (l->ts.tv_nsec / 1000000)); + blobmsg_add_u64(&b, "time", l->ts.tv_sec); blobmsg_close_table(&b, entry); l = log_list(count, l); } @@ -116,7 +118,7 @@ void ubus_notify_log(struct log_head *l) blobmsg_add_u32(&b, "id", l->id); blobmsg_add_u32(&b, "priority", l->priority); blobmsg_add_u32(&b, "source", l->source); - blobmsg_add_u64(&b, "time", (l->ts.tv_sec * 1000) + (l->ts.tv_nsec / 1000000)); + blobmsg_add_u64(&b, "time", (((__u64) l->ts.tv_sec) * 1000) + (l->ts.tv_nsec / 1000000)); ret = ubus_notify(_ctx, &log_object, l->data, b.head, -1); if (ret) diff --git a/logread.c b/logread.c index b7f9ebe..2a0ffde 100644 --- a/logread.c +++ b/logread.c @@ -130,7 +130,7 @@ static void read_cb(struct ubus_request *req, int type, struct blob_attr *msg) if (!tb[LOG_MSG] || !tb[LOG_ID] || !tb[LOG_PRIO] || !tb[LOG_SOURCE] || !tb[LOG_TIME]) continue; - t = blobmsg_get_u64(tb[LOG_TIME]) / 1000; + t = blobmsg_get_u64(tb[LOG_TIME]); c = ctime(&t); c[strlen(c) - 1] = '\0'; printf("%s - %s: %s\n", -- 2.25.1