Skip to content

Commit 20869d1

Browse files
peffgitster
authored andcommitted
convert trivial uses of strncmp() to starts_with()
It's more readable to use starts_with() instead of strncmp() to match a prefix, as the latter requires a manually-computed length, and has the funny "matching is zero" return value common to cmp functions. This patch converts several cases which were found with: git grep 'strncmp(.*, [0-9]*)' But note that it doesn't convert all such cases. There are several where the magic length number is repeated elsewhere in the code, like: /* handle "buf" which isn't NUL-terminated and might be too small */ if (len >= 3 && !strncmp(buf, "foo", 3)) or: /* exact match for "foo", but within a larger string */ if (end - buf == 3 && !strncmp(buf, "foo", 3)) While it would not produce the wrong outcome to use starts_with() in these cases, we'd still be left with one instance of "3". We're better to leave them for now, as the repeated "3" makes it clear that the two are linked (there may be other refactorings that handle both, but they're out of scope for this patch). A few things to note while reading the patch: - all cases but one are trying to match, and so lose the extra "!". The case in the first hunk of urlmatch.c is not-matching, and hence gains a "!". - the case in remote-fd.c is matching the beginning of "connect foo", but we never look at str+8 to parse the "foo" part (which would make this a candidate for skip_prefix(), not starts_with()). This seems at first glance like a bug, but is a limitation of how remote-fd works. - the second hunk in urlmatch.c shows some cases adjacent to other strncmp() calls that are left. These are of the "exact match within a larger string" type, as described above. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4dbebc3 commit 20869d1

File tree

4 files changed

+6
-6
lines changed

4 files changed

+6
-6
lines changed

builtin/remote-fd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static void command_loop(int input_fd, int output_fd)
4040
if (!strcmp(buffer, "capabilities")) {
4141
printf("*connect\n\n");
4242
fflush(stdout);
43-
} else if (!strncmp(buffer, "connect ", 8)) {
43+
} else if (starts_with(buffer, "connect ")) {
4444
printf("\n");
4545
fflush(stdout);
4646
if (bidirectional_transfer_loop(input_fd,

bundle-uri.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ static int config_to_packet_line(const char *key, const char *value, void *data)
620620
{
621621
struct packet_reader *writer = data;
622622

623-
if (!strncmp(key, "bundle.", 7))
623+
if (starts_with(key, "bundle."))
624624
packet_write_fmt(writer->fd, "%s=%s", key, value);
625625

626626
return 0;

ref-filter.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1209,7 +1209,7 @@ static const char *copy_name(const char *buf)
12091209
{
12101210
const char *cp;
12111211
for (cp = buf; *cp && *cp != '\n'; cp++) {
1212-
if (!strncmp(cp, " <", 2))
1212+
if (starts_with(cp, " <"))
12131213
return xmemdupz(buf, cp - buf);
12141214
}
12151215
return xstrdup("");

urlmatch.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ static char *url_normalize_1(const char *url, struct url_info *out_info, char al
209209
*/
210210
if (!url_len || strchr(":/?#", *url)) {
211211
/* Missing host invalid for all URL schemes except file */
212-
if (strncmp(norm.buf, "file:", 5)) {
212+
if (!starts_with(norm.buf, "file:")) {
213213
if (out_info) {
214214
out_info->url = NULL;
215215
out_info->err = _("missing host and scheme is not 'file:'");
@@ -268,11 +268,11 @@ static char *url_normalize_1(const char *url, struct url_info *out_info, char al
268268
if (url == slash_ptr) {
269269
/* Skip ":" port with no number, it's same as default */
270270
} else if (slash_ptr - url == 2 &&
271-
!strncmp(norm.buf, "http:", 5) &&
271+
starts_with(norm.buf, "http:") &&
272272
!strncmp(url, "80", 2)) {
273273
/* Skip http :80 as it's the default */
274274
} else if (slash_ptr - url == 3 &&
275-
!strncmp(norm.buf, "https:", 6) &&
275+
starts_with(norm.buf, "https:") &&
276276
!strncmp(url, "443", 3)) {
277277
/* Skip https :443 as it's the default */
278278
} else {

0 commit comments

Comments
 (0)