C99 %z (was: [PATCH v7 2/5] object-file API: add a format_object_header() function)
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Feb 1, 2022, 14:28 UTC
- Message-ID
- <220201.86mtjaacc5.gmgdl@evledraar.gmail.com>
- In-Reply-To
- <b2dee243-1a38-531e-02b1-ffd66c465fa5@web.de>
On Tue, Dec 21 2021, René Scharfe wrote:
Show 21 quoted lines
> Am 21.12.21 um 12:51 schrieb Han Xin:
>> From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>> [...]
>> 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).
Show 12 quoted lines
>> +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.