X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=path.c;h=d2c076d7cbad3a16a002897d926cc13633be4f77;hb=0f03ca946142bd656c1af9ff811cb9efbc8314da;hp=5d82503b6bd0a384b7918f2df497972f9492efa5;hpb=ada5853c98c5c0ad84a990cc6ee7365a14555c0f;p=git.git diff --git a/path.c b/path.c index 5d82503b6..d2c076d7c 100644 --- a/path.c +++ b/path.c @@ -13,9 +13,15 @@ #include "cache.h" #include -static char pathname[PATH_MAX]; static char bad_path[] = "/bad-path/"; +static char *get_pathname(void) +{ + static char pathname_array[4][PATH_MAX]; + static int index; + return pathname_array[3 & ++index]; +} + static char *cleanup_path(char *path) { /* Clean it up */ @@ -31,6 +37,7 @@ char *mkpath(const char *fmt, ...) { va_list args; unsigned len; + char *pathname = get_pathname(); va_start(args, fmt); len = vsnprintf(pathname, PATH_MAX, fmt, args); @@ -43,6 +50,7 @@ char *mkpath(const char *fmt, ...) char *git_path(const char *fmt, ...) { const char *git_dir = get_git_dir(); + char *pathname = get_pathname(); va_list args; unsigned len; @@ -77,20 +85,12 @@ int git_mkstemp(char *path, size_t len, const char *template) pch += n; } - safe_strncpy(pch, template, len); + strlcpy(pch, template, len); return mkstemp(path); } -char *safe_strncpy(char *dest, const char *src, size_t n) -{ - strncpy(dest, src, n); - dest[n - 1] = '\0'; - - return dest; -} - int validate_symref(const char *path) { struct stat st; @@ -279,7 +279,7 @@ int adjust_shared_perm(const char *path) : 0)); if (S_ISDIR(mode)) mode |= S_ISGID; - if (chmod(path, mode) < 0) + if ((mode & st.st_mode) != mode && chmod(path, mode) < 0) return -2; return 0; }