On Sun, Feb 05 2023, René Scharfe wrote: > -static int name_cmp_len(const char *name) > +static size_t name_cmp_len(const char *name) > { > - int i; > - for (i = 0; name[i] && name[i] != '\n' && name[i] != '/'; i++) > - ; > - return i; > + return strcspn(name, "\n/"); > } I wonder if this name_cmp_len() is worth keeping at all. If all we're doing is wrapping strcspn() (which b.t.w, seem to be less "open-coding" and just that it wasn't known to the original author in 5d4a6003354 (Make git-pack-objects a builtin, 2006-08-03)), then just inlining that in the two name_cmp_len() invocations would be better, or maybe: strcspn(..., object_reject); Where we previously declared "object_reject" (or same better name for such a variable) to be "\n/". > static void add_pbase_object(struct tree_desc *tree, > const char *name, > - int cmplen, > + size_t cmplen, > const char *fullname) > { > struct name_entry entry; > int cmp; > > while (tree_entry(tree,&entry)) { > if (S_ISGITLINK(entry.mode)) > continue; > cmp = tree_entry_len(&entry) != cmplen ? 1 : > memcmp(name, entry.path, cmplen); The return of tree_entry_len() is "int", so that's a new implicit cast, but that seems OK in this case (and the "namelen" is another thing we should convert to "size_t").