Skip to content

Commit

Permalink
use strip_suffix instead of ends_with in simple cases
Browse files Browse the repository at this point in the history
When stripping a suffix like:

  if (ends_with(str, "foo"))
	buf = xmemdupz(str, strlen(str) - 3);

we can instead use strip_suffix to avoid the constant 3,
which must match the literal "foo" (we sometimes use
strlen("foo") instead, but that means we are repeating
ourselves). The example above becomes:

  if (strip_suffix(str, "foo", &len))
	buf = xmemdupz(str, len);

This also saves a strlen(), since we calculate the string
length when detecting the suffix.

Note that in some cases we also switch from xstrndup to
xmemdupz, which saves a further strlen call.

Signed-off-by: Jeff King <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
peff authored and gitster committed Jun 30, 2014
1 parent 2975c77 commit 26936bf
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 15 deletions.
13 changes: 7 additions & 6 deletions builtin/remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,16 +265,17 @@ static int config_read_branches(const char *key, const char *value, void *cb)
struct string_list_item *item;
struct branch_info *info;
enum { REMOTE, MERGE, REBASE } type;
size_t key_len;

key += 7;
if (ends_with(key, ".remote")) {
name = xstrndup(key, strlen(key) - 7);
if (strip_suffix(key, ".remote", &key_len)) {
name = xmemdupz(key, key_len);
type = REMOTE;
} else if (ends_with(key, ".merge")) {
name = xstrndup(key, strlen(key) - 6);
} else if (strip_suffix(key, ".merge", &key_len)) {
name = xmemdupz(key, key_len);
type = MERGE;
} else if (ends_with(key, ".rebase")) {
name = xstrndup(key, strlen(key) - 7);
} else if (strip_suffix(key, ".rebase", &key_len)) {
name = xmemdupz(key, key_len);
type = REBASE;
} else
return 0;
Expand Down
5 changes: 2 additions & 3 deletions builtin/repack.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,15 @@ static void get_non_kept_pack_filenames(struct string_list *fname_list)
DIR *dir;
struct dirent *e;
char *fname;
size_t len;

if (!(dir = opendir(packdir)))
return;

while ((e = readdir(dir)) != NULL) {
if (!ends_with(e->d_name, ".pack"))
size_t len;
if (!strip_suffix(e->d_name, ".pack", &len))
continue;

len = strlen(e->d_name) - strlen(".pack");
fname = xmemdupz(e->d_name, len);

if (!file_exists(mkpath("%s/%s.keep", packdir, fname)))
Expand Down
6 changes: 3 additions & 3 deletions connected.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,17 @@ static int check_everything_connected_real(sha1_iterate_fn fn,
unsigned char sha1[20];
int err = 0, ac = 0;
struct packed_git *new_pack = NULL;
size_t base_len;

if (fn(cb_data, sha1))
return err;

if (transport && transport->smart_options &&
transport->smart_options->self_contained_and_connected &&
transport->pack_lockfile &&
ends_with(transport->pack_lockfile, ".keep")) {
strip_suffix(transport->pack_lockfile, ".keep", &base_len)) {
struct strbuf idx_file = STRBUF_INIT;
strbuf_addstr(&idx_file, transport->pack_lockfile);
strbuf_setlen(&idx_file, idx_file.len - 5); /* ".keep" */
strbuf_add(&idx_file, transport->pack_lockfile, base_len);
strbuf_addstr(&idx_file, ".idx");
new_pack = add_packed_git(idx_file.buf, idx_file.len, 1);
strbuf_release(&idx_file);
Expand Down
5 changes: 2 additions & 3 deletions help.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ static void list_commands_in_dir(struct cmdnames *cmds,
len = buf.len;

while ((de = readdir(dir)) != NULL) {
int entlen;
size_t entlen;

if (!starts_with(de->d_name, prefix))
continue;
Expand All @@ -156,8 +156,7 @@ static void list_commands_in_dir(struct cmdnames *cmds,
continue;

entlen = strlen(de->d_name) - prefix_len;
if (ends_with(de->d_name, ".exe"))
entlen -= 4;
strip_suffix(de->d_name, ".exe", &entlen);

add_cmdname(cmds, de->d_name + prefix_len, entlen);
}
Expand Down

0 comments on commit 26936bf

Please sign in to comment.