On Tue, Dec 21 2021, René Scharfe wrote: > Am 21.12.21 um 12:51 schrieb Han Xin: >> From: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> >> [...] >> the_hash_algo->init_fn(&c); >> the_hash_algo->update_fn(&c, hdr, hdrlen); >> } else >> diff --git a/bulk-checkin.c b/bulk-checkin.c >> index 8785b2ac80..1733a1de4f 100644 >> --- a/bulk-checkin.c >> +++ b/bulk-checkin.c >> @@ -220,8 +220,8 @@ static int deflate_to_pack(struct bulk_checkin_state *state, >> if (seekback == (off_t) -1) >> return error("cannot find the current offset"); >> >> - header_len = xsnprintf((char *)obuf, sizeof(obuf), "%s %" PRIuMAX, >> - type_name(type), (uintmax_t)size) + 1; >> + header_len = format_object_header((char *)obuf, sizeof(obuf), >> + type, (uintmax_t)size); > ^^^^^^^^^^^ > Same here, just that size is already of type size_t, so a cast makes > even less sense. Thanks, this and the below is something I made sure to include in a re-roll I'm about to send (to do these cleanups in object-file.c separately from Han Xin's series). >> +int format_object_header_extended(char *str, size_t size, enum object_type type, >> + const char *typestr, size_t objsize) >> +{ >> + const char *s = type == OBJ_NONE ? typestr : type_name(type); >> + >> + return xsnprintf(str, size, "%s %"PRIuMAX, s, (uintmax_t)objsize) + 1; > ^^^^^^^^^^^ > This cast is necessary to match PRIuMAX. And that is used because the z > modifier (as in e.g. printf("%zu", sizeof(size_t));) was only added in > C99 and not all platforms may have it. (Perhaps this cautious approach > is worth revisiting separately, now that some time has passed, but this > patch series should still use PRIuMAX, as it does.) I tried to use %z recently and found that the CI breaks on Windows, but this was a few months ago. But I think the status of that particular C99 feature is that we can't use it freely, unfortunately. I may be wrong about that, I haven't looked it any detail beyond running those CI errors.