| 232 | } |
| 233 | |
| 234 | static char * |
| 235 | u2s(uintmax_t x, unsigned base, bool uppercase, char *s, size_t *slen_p) { |
| 236 | unsigned i; |
| 237 | |
| 238 | i = U2S_BUFSIZE - 1; |
| 239 | s[i] = '\0'; |
| 240 | switch (base) { |
| 241 | case 10: |
| 242 | do { |
| 243 | i--; |
| 244 | s[i] = "0123456789"[x % (uint64_t)10]; |
| 245 | x /= (uint64_t)10; |
| 246 | } while (x > 0); |
| 247 | break; |
| 248 | case 16: { |
| 249 | const char *digits = (uppercase) |
| 250 | ? "0123456789ABCDEF" |
| 251 | : "0123456789abcdef"; |
| 252 | |
| 253 | do { |
| 254 | i--; |
| 255 | s[i] = digits[x & 0xf]; |
| 256 | x >>= 4; |
| 257 | } while (x > 0); |
| 258 | break; |
| 259 | } default: { |
| 260 | const char *digits = (uppercase) |
| 261 | ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| 262 | : "0123456789abcdefghijklmnopqrstuvwxyz"; |
| 263 | |
| 264 | assert(base >= 2 && base <= 36); |
| 265 | do { |
| 266 | i--; |
| 267 | s[i] = digits[x % (uint64_t)base]; |
| 268 | x /= (uint64_t)base; |
| 269 | } while (x > 0); |
| 270 | }} |
| 271 | |
| 272 | *slen_p = U2S_BUFSIZE - 1 - i; |
| 273 | return &s[i]; |
| 274 | } |
| 275 | |
| 276 | static char * |
| 277 | d2s(intmax_t x, char sign, char *s, size_t *slen_p) { |
no outgoing calls
no test coverage detected