From: Adrian Ratiu Date: Thu, 16 Jul 2026 12:40:24 GMT Subject: Re: [PATCH] submodule--helper: avoid use of %zu for now Message-ID: <87a4rrxg3r.fsf@gentoo.mail-host-address-is-not-set> In-Reply-To: On Wed, 15 Jul 2026, Junio C Hamano wrote: > Since d7d850e2b9 (CodingGuidelines: mention C99 features we can't > use, 2022-10-10), our CodingGuidelines document has explicitly > forbidden the use of '%z' and '%zu' printf() format specifiers, > even though C99 does support them. However, a new instance crept > in via 82c36fa0a9 (submodule: hash the submodule name for the > gitdir path, 2026-01-12). > > We could claim that this is an unintentional weather balloon that > nobody has complained about for the past six months since Git 2.54, > proving that it is now safe to use these format specifiers. But > (1) it is probably too early to make that claim, as distributions > often stick to a stale version for several releases, and (2) it is > unlikely that a failure in this code path would manifest as a > major user-visible breakage that would trigger a failure report to > percolate down to us. > > Instead, let's stick to the established workaround recommended by > our CodingGuidelines, which is to cast the value to (uintmax_t) and > format it with PRIuMAX, at least for now. Even if we eventually > perform a bulk update using a Coccinelle script to transition to %z > and %zu in the future, adding one more instance to the pile that > will need such a conversion is hardly a tragedy. > > Signed-off-by: Junio C Hamano > --- > builtin/submodule--helper.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git i/builtin/submodule--helper.c w/builtin/submodule--helper.c > index 1cc82a134d..92e38106c1 100644 > --- i/builtin/submodule--helper.c > +++ w/builtin/submodule--helper.c > @@ -549,7 +549,8 @@ static void create_default_gitdir_config(const char *submodule_name) > } > > /* Case 2.4: If all the above failed, try a hash of the name as a last resort */ > - header_len = snprintf(header, sizeof(header), "blob %zu", strlen(submodule_name)); > + header_len = snprintf(header, sizeof(header), > + "blob %"PRIuMAX, (uintmax_t)strlen(submodule_name)); > the_hash_algo->init_fn(&ctx); > the_hash_algo->update_fn(&ctx, header, header_len); > the_hash_algo->update_fn(&ctx, "\0", 1); LGTM and sorry for not following the guideline. :)