Skip to content

Commit

Permalink
create_directories(): remove some memcpy() and strchr() calls
Browse files Browse the repository at this point in the history
Remove the call to memcpy() and strchr() for each path component
tested, and instead add each path component as we go forward inside
the while-loop.

Impact: small optimisation

Signed-off-by: Kjetil Barvik <barvik@broadpark.no>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Kjetil Barvik authored and Junio C Hamano committed Feb 10, 2009
1 parent 7847892 commit 81a9aa6
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions entry.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@
#include "blob.h"
#include "dir.h"

static void create_directories(const char *path, const struct checkout *state)
static void create_directories(const char *path, int path_len,
const struct checkout *state)
{
int len = strlen(path);
char *buf = xmalloc(len + 1);
const char *slash = path;

while ((slash = strchr(slash+1, '/')) != NULL) {
len = slash - path;
memcpy(buf, path, len);
char *buf = xmalloc(path_len + 1);
int len = 0;

while (len < path_len) {
do {
buf[len] = path[len];
len++;
} while (len < path_len && path[len] != '/');
if (len >= path_len)
break;
buf[len] = 0;

/*
Expand Down Expand Up @@ -190,6 +194,7 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *t

memcpy(path, state->base_dir, len);
strcpy(path + len, ce->name);
len += ce_namelen(ce);

if (!lstat(path, &st)) {
unsigned changed = ce_match_stat(ce, &st, CE_MATCH_IGNORE_VALID);
Expand Down Expand Up @@ -218,6 +223,6 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *t
return error("unable to unlink old '%s' (%s)", path, strerror(errno));
} else if (state->not_new)
return 0;
create_directories(path, state);
create_directories(path, len, state);
return write_entry(ce, path, state, 0);
}

0 comments on commit 81a9aa6

Please sign in to comment.