rsys

Basic data structures and low-level features
git clone git://git.meso-star.fr/rsys.git
Log | Files | Refs | README | LICENSE

commit e1741dc2223334fcfe7bbfda240fe106d8c64a0a
parent cb4d6aa378f0dcbcb1c0521e065a571a333d9f65
Author: vaplv <vaplv@free.fr>
Date:   Thu, 21 Jan 2021 09:30:55 +0100

Fix time_dump function

The returned real_dump_size was wrongly evaluated

Diffstat:
Msrc/clock_time.c | 6+++++-
Msrc/test_time.c | 12++++++++++--
2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/clock_time.c b/src/clock_time.c @@ -167,7 +167,7 @@ time_dump "%li %s", (long)Time, Time > 1 ? Suffix "s ": Suffix " "); \ ASSERT(len >= 0); \ if(real_dump_len) { \ - real_dump_len += len; \ + *real_dump_len += (size_t)len; \ } \ if((size_t)len < available_dump_space) { \ dst += len; \ @@ -213,6 +213,9 @@ time_dump if(time_nsec) DUMP(time_nsec, "nsec"); } + /* Remove last space */ + if(real_dump_len) *real_dump_len -= 1; + if(dump) { size_t dump_len = strlen(dump); if(!dump_len && flag) { @@ -225,6 +228,7 @@ time_dump } dump_len = strlen(dump); } + /* Remove last space */ if(dump[dump_len-1] == ' ') { dump[dump_len-1] = '\0'; } diff --git a/src/test_time.c b/src/test_time.c @@ -15,6 +15,7 @@ #include "clock_time.h" #include <stdlib.h> +#include <string.h> int main(int argc, char** argv) @@ -24,6 +25,7 @@ main(int argc, char** argv) char buf[32]; int64_t time = 0; int64_t i = 0; + size_t dump_len; (void)argc, (void)argv; CHK(time_current(&start) == &start); @@ -38,7 +40,8 @@ main(int argc, char** argv) CHK(time_val(&res, TIME_SEC) == time / 1000000000); time_dump - (&res, TIME_SEC|TIME_MSEC|TIME_USEC, NULL, dump, sizeof(dump)); + (&res, TIME_SEC|TIME_MSEC|TIME_USEC, &dump_len, dump, sizeof(dump)); + CHK(dump_len == strlen(dump)); printf(">>> %s.\n", dump); time_dump(&res, TIME_ALL, NULL, dump, sizeof(dump)); printf(">>> %s.\n", dump); @@ -67,8 +70,13 @@ main(int argc, char** argv) res.sec = 5; res.nsec = 524198207; - time_dump(&res, TIME_ALL, NULL, buf, sizeof(buf)); + time_dump(&res, TIME_ALL, &dump_len, buf, sizeof(buf)); + CHK(dump_len >= strlen(buf)); printf(">>> %s.\n", buf); + time_dump(&res, TIME_ALL, &dump_len, dump, sizeof(dump)); + CHK(dump_len >= strlen(dump)); + printf(">>> %s.\n", dump); + return 0; }