Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
create_directories(): remove some memcpy() and strchr() calls
author
Kjetil Barvik
<barvik@broadpark.no>
Mon, 9 Feb 2009 20:54:08 +0000
(21:54 +0100)
committer
Junio C Hamano
<gitster@pobox.com>
Tue, 10 Feb 2009 04:59:26 +0000
(20:59 -0800)
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>
entry.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
7847892
)
diff --git
a/entry.c
b/entry.c
index bb6bdb90e3b976ca8045b74338980a3cb627fcb9..cc8f0c607729e4e4c5cde9e52dc0af0735fb26ba 100644
(file)
--- a/
entry.c
+++ b/
entry.c
@@
-2,15
+2,19
@@
#include "blob.h"
#include "dir.h"
#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;
/*
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);
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);
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;
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);
}
return write_entry(ce, path, state, 0);
}