| 245 | } |
| 246 | |
| 247 | static char * |
| 248 | u2s(uintmax_t x, unsigned base, bool uppercase, char *s, size_t *slen_p) { |
| 249 | unsigned i; |
| 250 | |
| 251 | i = U2S_BUFSIZE - 1; |
| 252 | s[i] = '\0'; |
| 253 | switch (base) { |
| 254 | case 10: |
| 255 | do { |
| 256 | i--; |
| 257 | s[i] = "0123456789"[x % (uint64_t)10]; |
| 258 | x /= (uint64_t)10; |
| 259 | } while (x > 0); |
| 260 | break; |
| 261 | case 16: { |
| 262 | const char *digits = (uppercase) |
| 263 | ? "0123456789ABCDEF" |
| 264 | : "0123456789abcdef"; |
| 265 | |
| 266 | do { |
| 267 | i--; |
| 268 | s[i] = digits[x & 0xf]; |
| 269 | x >>= 4; |
| 270 | } while (x > 0); |
| 271 | break; |
| 272 | } default: { |
| 273 | const char *digits = (uppercase) |
| 274 | ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| 275 | : "0123456789abcdefghijklmnopqrstuvwxyz"; |
| 276 | |
| 277 | assert(base >= 2 && base <= 36); |
| 278 | do { |
| 279 | i--; |
| 280 | s[i] = digits[x % (uint64_t)base]; |
| 281 | x /= (uint64_t)base; |
| 282 | } while (x > 0); |
| 283 | }} |
| 284 | |
| 285 | *slen_p = U2S_BUFSIZE - 1 - i; |
| 286 | return &s[i]; |
| 287 | } |
| 288 | |
| 289 | static char * |
| 290 | d2s(intmax_t x, char sign, char *s, size_t *slen_p) { |
no outgoing calls
no test coverage detected