mirror of
https://github.com/git/git.git
synced 2024-05-04 01:56:15 +02:00
create_directories(): remove some memcpy() and strchr() calls
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>
This commit is contained in:
parent
7847892716
commit
81a9aa60a1
21
entry.c
21
entry.c
|
@ -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;
|
||||
char *buf = xmalloc(path_len + 1);
|
||||
int len = 0;
|
||||
|
||||
while ((slash = strchr(slash+1, '/')) != NULL) {
|
||||
len = slash - path;
|
||||
memcpy(buf, path, len);
|
||||
while (len < path_len) {
|
||||
do {
|
||||
buf[len] = path[len];
|
||||
len++;
|
||||
} while (len < path_len && path[len] != '/');
|
||||
if (len >= path_len)
|
||||
break;
|
||||
buf[len] = 0;
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue