Simplify read_directory[_recursive]() arguments
[gitweb.git] / dir.c
diff --git a/dir.c b/dir.c
index 0c8553b27c80ca649fa5b8c864583fb75be6fabe..b0671f59c8d210cc2becdae55da4e55a1d098bdc 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -14,8 +14,7 @@ struct path_simplify {
        const char *path;
 };
 
-static int read_directory_recursive(struct dir_struct *dir,
-       const char *path, const char *base, int baselen,
+static int read_directory_recursive(struct dir_struct *dir, const char *path, int len,
        int check_only, const struct path_simplify *simplify);
 static int get_dtype(struct dirent *de, const char *path);
 
@@ -54,23 +53,22 @@ static int common_prefix(const char **pathspec)
 
 int fill_directory(struct dir_struct *dir, const char **pathspec)
 {
-       const char *path, *base;
-       int baselen;
+       const char *path;
+       int len;
 
        /*
         * Calculate common prefix for the pathspec, and
         * use that to optimize the directory walk
         */
-       baselen = common_prefix(pathspec);
+       len = common_prefix(pathspec);
        path = "";
-       base = "";
 
-       if (baselen)
-               path = base = xmemdupz(*pathspec, baselen);
+       if (len)
+               path = xmemdupz(*pathspec, len);
 
        /* Read the directory and prune it */
-       read_directory(dir, path, base, baselen, pathspec);
-       return baselen;
+       read_directory(dir, path, len, pathspec);
+       return len;
 }
 
 /*
@@ -526,7 +524,7 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
        /* This is the "show_other_directories" case */
        if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
                return show_directory;
-       if (!read_directory_recursive(dir, dirname, dirname, len, 1, simplify))
+       if (!read_directory_recursive(dir, dirname, len, 1, simplify))
                return ignore_directory;
        return show_directory;
 }
@@ -595,15 +593,15 @@ static int get_dtype(struct dirent *de, const char *path)
  * Also, we ignore the name ".git" (even if it is not a directory).
  * That likely will not change.
  */
-static int read_directory_recursive(struct dir_struct *dir, const char *path, const char *base, int baselen, int check_only, const struct path_simplify *simplify)
+static int read_directory_recursive(struct dir_struct *dir, const char *base, int baselen, int check_only, const struct path_simplify *simplify)
 {
-       DIR *fdir = opendir(*path ? path : ".");
+       DIR *fdir = opendir(*base ? base : ".");
        int contents = 0;
 
        if (fdir) {
                struct dirent *de;
-               char fullname[PATH_MAX + 1];
-               memcpy(fullname, base, baselen);
+               char path[PATH_MAX + 1];
+               memcpy(path, base, baselen);
 
                while ((de = readdir(fdir)) != NULL) {
                        int len, dtype;
@@ -614,17 +612,18 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
                                continue;
                        len = strlen(de->d_name);
                        /* Ignore overly long pathnames! */
-                       if (len + baselen + 8 > sizeof(fullname))
+                       if (len + baselen + 8 > sizeof(path))
                                continue;
-                       memcpy(fullname + baselen, de->d_name, len+1);
-                       if (simplify_away(fullname, baselen + len, simplify))
+                       memcpy(path + baselen, de->d_name, len+1);
+                       len = baselen + len;
+                       if (simplify_away(path, len, simplify))
                                continue;
 
                        dtype = DTYPE(de);
-                       exclude = excluded(dir, fullname, &dtype);
+                       exclude = excluded(dir, path, &dtype);
                        if (exclude && (dir->flags & DIR_COLLECT_IGNORED)
-                           && in_pathspec(fullname, baselen + len, simplify))
-                               dir_add_ignored(dir, fullname, baselen + len);
+                           && in_pathspec(path, len, simplify))
+                               dir_add_ignored(dir, path,len);
 
                        /*
                         * Excluded? If we don't explicitly want to show
@@ -634,7 +633,7 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
                                continue;
 
                        if (dtype == DT_UNKNOWN)
-                               dtype = get_dtype(de, fullname);
+                               dtype = get_dtype(de, path);
 
                        /*
                         * Do we want to see just the ignored files?
@@ -651,9 +650,9 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
                        default:
                                continue;
                        case DT_DIR:
-                               memcpy(fullname + baselen + len, "/", 2);
+                               memcpy(path + len, "/", 2);
                                len++;
-                               switch (treat_directory(dir, fullname, baselen + len, simplify)) {
+                               switch (treat_directory(dir, path, len, simplify)) {
                                case show_directory:
                                        if (exclude != !!(dir->flags
                                                        & DIR_SHOW_IGNORED))
@@ -661,7 +660,7 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
                                        break;
                                case recurse_into_directory:
                                        contents += read_directory_recursive(dir,
-                                               fullname, fullname, baselen + len, 0, simplify);
+                                               path, len, 0, simplify);
                                        continue;
                                case ignore_directory:
                                        continue;
@@ -675,7 +674,7 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co
                        if (check_only)
                                goto exit_early;
                        else
-                               dir_add_name(dir, fullname, baselen + len);
+                               dir_add_name(dir, path, len);
                }
 exit_early:
                closedir(fdir);
@@ -738,15 +737,15 @@ static void free_simplify(struct path_simplify *simplify)
        free(simplify);
 }
 
-int read_directory(struct dir_struct *dir, const char *path, const char *base, int baselen, const char **pathspec)
+int read_directory(struct dir_struct *dir, const char *path, int len, const char **pathspec)
 {
        struct path_simplify *simplify;
 
-       if (has_symlink_leading_path(path, strlen(path)))
+       if (has_symlink_leading_path(path, len))
                return dir->nr;
 
        simplify = create_simplify(pathspec);
-       read_directory_recursive(dir, path, base, baselen, 0, simplify);
+       read_directory_recursive(dir, path, len, 0, simplify);
        free_simplify(simplify);
        qsort(dir->entries, dir->nr, sizeof(struct dir_entry *), cmp_name);
        qsort(dir->ignored, dir->ignored_nr, sizeof(struct dir_entry *), cmp_name);