grep: run setup_git_directory_gently() sooner
[gitweb.git] / setup.c
diff --git a/setup.c b/setup.c
index 7e0460205dc1d15007849f367d21e999f2da044c..28a2b69d05fec6b07ad8c478676548daf6ad4447 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -170,6 +170,8 @@ static int is_git_directory(const char *suspect)
        char path[PATH_MAX];
        size_t len = strlen(suspect);
 
+       if (PATH_MAX <= len + strlen("/objects"))
+               die("Too long path: %.*s", 60, suspect);
        strcpy(path, suspect);
        if (getenv(DB_ENVIRONMENT)) {
                if (access(getenv(DB_ENVIRONMENT), X_OK))
@@ -315,7 +317,7 @@ const char *read_gitfile_gently(const char *path)
  * We cannot decide in this function whether we are in the work tree or
  * not, since the config can only be read _after_ this function was called.
  */
-const char *setup_git_directory_gently(int *nongit_ok)
+static const char *setup_git_directory_gently_1(int *nongit_ok)
 {
        const char *work_tree_env = getenv(GIT_WORK_TREE_ENVIRONMENT);
        const char *env_ceiling_dirs = getenv(CEILING_DIRECTORIES_ENVIRONMENT);
@@ -323,7 +325,8 @@ const char *setup_git_directory_gently(int *nongit_ok)
        const char *gitdirenv;
        const char *gitfile_dir;
        int len, offset, ceil_offset, root_len;
-       int current_device = 0, one_filesystem = 1;
+       dev_t current_device = 0;
+       int one_filesystem = 1;
        struct stat buf;
 
        /*
@@ -470,6 +473,16 @@ const char *setup_git_directory_gently(int *nongit_ok)
        return cwd + offset;
 }
 
+const char *setup_git_directory_gently(int *nongit_ok)
+{
+       const char *prefix;
+
+       prefix = setup_git_directory_gently_1(nongit_ok);
+       if (startup_info)
+               startup_info->have_repository = !nongit_ok || !*nongit_ok;
+       return prefix;
+}
+
 int git_config_perm(const char *var, const char *value)
 {
        int i;