lstat_cache(): swap func(length, string) into func(string, length)

Swap function argument pair (length, string) into (string, length) to
conform with the commonly used order inside the GIT source code.

Also, add a note about this fact into the coding guidelines.

Signed-off-by: Kjetil Barvik <barvik@broadpark.no>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Kjetil Barvik 2009-02-09 21:54:06 +01:00 committed by Junio C Hamano
parent 148bc06b91
commit 571998921d
10 changed files with 23 additions and 20 deletions

View File

@ -129,3 +129,6 @@ For C programs:
used in the git core command set (unless your command is clearly used in the git core command set (unless your command is clearly
separate from it, such as an importer to convert random-scm-X separate from it, such as an importer to convert random-scm-X
repositories to git). repositories to git).
- When we pass <string, length> pair to functions, we should try to
pass them in that order.

View File

@ -148,7 +148,7 @@ static const char **validate_pathspec(int argc, const char **argv, const char *p
if (pathspec) { if (pathspec) {
const char **p; const char **p;
for (p = pathspec; *p; p++) { for (p = pathspec; *p; p++) {
if (has_symlink_leading_path(strlen(*p), *p)) { if (has_symlink_leading_path(*p, strlen(*p))) {
int len = prefix ? strlen(prefix) : 0; int len = prefix ? strlen(prefix) : 0;
die("'%s' is beyond a symbolic link", *p + len); die("'%s' is beyond a symbolic link", *p + len);
} }

View File

@ -2360,7 +2360,7 @@ static int check_to_create_blob(const char *new_name, int ok_if_exists)
* In such a case, path "new_name" does not exist as * In such a case, path "new_name" does not exist as
* far as git is concerned. * far as git is concerned.
*/ */
if (has_symlink_leading_path(strlen(new_name), new_name)) if (has_symlink_leading_path(new_name, strlen(new_name)))
return 0; return 0;
return error("%s: already exists in working directory", new_name); return error("%s: already exists in working directory", new_name);

View File

@ -195,7 +195,7 @@ static int process_path(const char *path)
struct stat st; struct stat st;
len = strlen(path); len = strlen(path);
if (has_symlink_leading_path(len, path)) if (has_symlink_leading_path(path, len))
return error("'%s' is beyond a symbolic link", path); return error("'%s' is beyond a symbolic link", path);
/* /*

View File

@ -724,10 +724,10 @@ struct checkout {
}; };
extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath); extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath);
extern int has_symlink_leading_path(int len, const char *name); extern int has_symlink_leading_path(const char *name, int len);
extern int has_symlink_or_noent_leading_path(int len, const char *name); extern int has_symlink_or_noent_leading_path(const char *name, int len);
extern int has_dirs_only_path(int len, const char *name, int prefix_len); extern int has_dirs_only_path(const char *name, int len, int prefix_len);
extern void invalidate_lstat_cache(int len, const char *name); extern void invalidate_lstat_cache(const char *name, int len);
extern void clear_lstat_cache(void); extern void clear_lstat_cache(void);
extern struct alternate_object_database { extern struct alternate_object_database {

View File

@ -31,7 +31,7 @@ static int check_removed(const struct cache_entry *ce, struct stat *st)
return -1; return -1;
return 1; return 1;
} }
if (has_symlink_leading_path(ce_namelen(ce), ce->name)) if (has_symlink_leading_path(ce->name, ce_namelen(ce)))
return 1; return 1;
if (S_ISDIR(st->st_mode)) { if (S_ISDIR(st->st_mode)) {
unsigned char sub[20]; unsigned char sub[20];

2
dir.c
View File

@ -720,7 +720,7 @@ int read_directory(struct dir_struct *dir, const char *path, const char *base, i
{ {
struct path_simplify *simplify; struct path_simplify *simplify;
if (has_symlink_leading_path(strlen(path), path)) if (has_symlink_leading_path(path, strlen(path)))
return dir->nr; return dir->nr;
simplify = create_simplify(pathspec); simplify = create_simplify(pathspec);

View File

@ -20,7 +20,7 @@ static void create_directories(const char *path, const struct checkout *state)
* we test the path components of the prefix with the * we test the path components of the prefix with the
* stat() function instead of the lstat() function. * stat() function instead of the lstat() function.
*/ */
if (has_dirs_only_path(len, buf, state->base_dir_len)) if (has_dirs_only_path(buf, len, state->base_dir_len))
continue; /* ok, it is already a directory. */ continue; /* ok, it is already a directory. */
/* /*

View File

@ -70,7 +70,7 @@ static inline void reset_lstat_cache(void)
* of the prefix, where the cache should use the stat() function * of the prefix, where the cache should use the stat() function
* instead of the lstat() function to test each path component. * instead of the lstat() function to test each path component.
*/ */
static int lstat_cache(int len, const char *name, static int lstat_cache(const char *name, int len,
int track_flags, int prefix_len_stat_func) int track_flags, int prefix_len_stat_func)
{ {
int match_len, last_slash, last_slash_dir, previous_slash; int match_len, last_slash, last_slash_dir, previous_slash;
@ -185,7 +185,7 @@ static int lstat_cache(int len, const char *name,
* Invalidate the given 'name' from the cache, if 'name' matches * Invalidate the given 'name' from the cache, if 'name' matches
* completely with the cache. * completely with the cache.
*/ */
void invalidate_lstat_cache(int len, const char *name) void invalidate_lstat_cache(const char *name, int len)
{ {
int match_len, previous_slash; int match_len, previous_slash;
@ -214,9 +214,9 @@ void clear_lstat_cache(void)
/* /*
* Return non-zero if path 'name' has a leading symlink component * Return non-zero if path 'name' has a leading symlink component
*/ */
int has_symlink_leading_path(int len, const char *name) int has_symlink_leading_path(const char *name, int len)
{ {
return lstat_cache(len, name, return lstat_cache(name, len,
FL_SYMLINK|FL_DIR, USE_ONLY_LSTAT) & FL_SYMLINK|FL_DIR, USE_ONLY_LSTAT) &
FL_SYMLINK; FL_SYMLINK;
} }
@ -225,9 +225,9 @@ int has_symlink_leading_path(int len, const char *name)
* Return non-zero if path 'name' has a leading symlink component or * Return non-zero if path 'name' has a leading symlink component or
* if some leading path component does not exists. * if some leading path component does not exists.
*/ */
int has_symlink_or_noent_leading_path(int len, const char *name) int has_symlink_or_noent_leading_path(const char *name, int len)
{ {
return lstat_cache(len, name, return lstat_cache(name, len,
FL_SYMLINK|FL_NOENT|FL_DIR, USE_ONLY_LSTAT) & FL_SYMLINK|FL_NOENT|FL_DIR, USE_ONLY_LSTAT) &
(FL_SYMLINK|FL_NOENT); (FL_SYMLINK|FL_NOENT);
} }
@ -239,9 +239,9 @@ int has_symlink_or_noent_leading_path(int len, const char *name)
* 'prefix_len', thus we then allow for symlinks in the prefix part as * 'prefix_len', thus we then allow for symlinks in the prefix part as
* long as those points to real existing directories. * long as those points to real existing directories.
*/ */
int has_dirs_only_path(int len, const char *name, int prefix_len) int has_dirs_only_path(const char *name, int len, int prefix_len)
{ {
return lstat_cache(len, name, return lstat_cache(name, len,
FL_DIR|FL_FULLPATH, prefix_len) & FL_DIR|FL_FULLPATH, prefix_len) &
FL_DIR; FL_DIR;
} }

View File

@ -61,7 +61,7 @@ static void unlink_entry(struct cache_entry *ce)
char *cp, *prev; char *cp, *prev;
char *name = ce->name; char *name = ce->name;
if (has_symlink_or_noent_leading_path(ce_namelen(ce), ce->name)) if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
return; return;
if (unlink(name)) if (unlink(name))
return; return;
@ -583,7 +583,7 @@ static int verify_absent(struct cache_entry *ce, const char *action,
if (o->index_only || o->reset || !o->update) if (o->index_only || o->reset || !o->update)
return 0; return 0;
if (has_symlink_or_noent_leading_path(ce_namelen(ce), ce->name)) if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
return 0; return 0;
if (!lstat(ce->name, &st)) { if (!lstat(ce->name, &st)) {