Skip to content
Snippets Groups Projects
Commit d1a64231 authored by Craig Tiller's avatar Craig Tiller
Browse files

Use stdlib to avoid ubsan errors

parent 91eb28f6
No related branches found
No related tags found
No related merge requests found
......@@ -47,32 +47,17 @@ static void to_fp(void *arg, const char *buf, size_t len) {
fwrite(buf, 1, len, (FILE *)arg);
}
/* Convert gpr_uintmax x to ascii base b (2..16), and write with
(*writer)(arg, ...), zero padding to "chars" digits). */
static void u_to_s(uintmax_t x, unsigned base, int chars,
void (*writer)(void *arg, const char *buf, size_t len),
void *arg) {
char buf[64];
char *p = buf + sizeof(buf);
do {
*--p = "0123456789abcdef"[x % base];
x /= base;
chars--;
} while (x != 0 || chars > 0);
(*writer)(arg, p, (size_t)(buf + sizeof(buf) - p));
}
/* Convert gpr_intmax x to ascii base b (2..16), and write with
(*writer)(arg, ...), zero padding to "chars" digits). */
static void i_to_s(intmax_t x, unsigned base, int chars,
static void i_to_s(intmax_t x, int base, int chars,
void (*writer)(void *arg, const char *buf, size_t len),
void *arg) {
if (x < 0) {
(*writer)(arg, "-", 1);
u_to_s((uintmax_t)-x, base, chars - 1, writer, arg);
} else {
u_to_s((uintmax_t)x, base, chars, writer, arg);
}
char buf[64];
char fmt[32];
GPR_ASSERT(base == 16 || base == 10);
sprintf(fmt, "%%0%d%s", chars, base == 16 ? PRIxMAX : PRIdMAX);
sprintf(buf, fmt, x);
(*writer)(arg, buf, strlen(buf));
}
/* Convert ts to ascii, and write with (*writer)(arg, ...). */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment