| 337 | } |
| 338 | |
| 339 | static void format_with_commas(char *buf, size_t buflen, uint64_t v) { |
| 340 | char tmp[32]; |
| 341 | int n = snprintf(tmp, sizeof(tmp), "%llu", (unsigned long long)v); |
| 342 | int out = 0; |
| 343 | for (int i = 0; i < n && out < (int)buflen - 1; ++i) { |
| 344 | int remaining = n - i; |
| 345 | if (i > 0 && (remaining % 3) == 0) { |
| 346 | if (out < (int)buflen - 1) buf[out++] = ','; |
| 347 | } |
| 348 | buf[out++] = tmp[i]; |
| 349 | } |
| 350 | buf[out] = 0; |
| 351 | } |
| 352 | |
| 353 | size_t dump_alloc_leaks(FILE *out) { |
| 354 | // Disarm so fprintf/Sym*/etc don't churn the map during the dump. |