test-bzr.sh, test-hg.sh: allow running from any dir
[gitweb.git] / abspath.c
index a7ab8e908f8188ae1b55fca15cc2fb8772f40096..e390994abff32054452e878484e79c249474389f 100644 (file)
--- a/abspath.c
+++ b/abspath.c
@@ -35,7 +35,14 @@ static const char *real_path_internal(const char *path, int die_on_error)
 {
        static char bufs[2][PATH_MAX + 1], *buf = bufs[0], *next_buf = bufs[1];
        char *retval = NULL;
+
+       /*
+        * If we have to temporarily chdir(), store the original CWD
+        * here so that we can chdir() back to it at the end of the
+        * function:
+        */
        char cwd[1024] = "";
+
        int buf_index = 1;
 
        int depth = MAXDEPTH;
@@ -103,7 +110,7 @@ static const char *real_path_internal(const char *path, int die_on_error)
                                else
                                        goto error_out;
                        }
-                       if (len && !is_dir_sep(buf[len-1]))
+                       if (len && !is_dir_sep(buf[len - 1]))
                                buf[len++] = '/';
                        strcpy(buf + len, last_elem);
                        free(last_elem);
@@ -146,6 +153,11 @@ const char *real_path(const char *path)
        return real_path_internal(path, 1);
 }
 
+const char *real_path_if_valid(const char *path)
+{
+       return real_path_internal(path, 0);
+}
+
 static const char *get_pwd_cwd(void)
 {
        static char cwd[PATH_MAX + 1];
@@ -189,7 +201,7 @@ const char *absolute_path(const char *path)
                if (!cwd)
                        die_errno("Cannot determine the current working directory");
                len = strlen(cwd);
-               fmt = (len > 0 && is_dir_sep(cwd[len-1])) ? "%s%s" : "%s/%s";
+               fmt = (len > 0 && is_dir_sep(cwd[len - 1])) ? "%s%s" : "%s/%s";
                if (snprintf(buf, PATH_MAX, fmt, cwd, path) >= PATH_MAX)
                        die("Too long path: %.*s", 60, path);
        }
@@ -204,7 +216,7 @@ const char *absolute_path(const char *path)
 const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
 {
        static char path[PATH_MAX];
-#ifndef WIN32
+#ifndef GIT_WINDOWS_NATIVE
        if (!pfx_len || is_absolute_path(arg))
                return arg;
        memcpy(path, pfx, pfx_len);