summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/checkout.c2
-rw-r--r--src/fileops.c25
-rw-r--r--src/fileops.h17
-rw-r--r--src/odb_loose.c4
-rw-r--r--src/refdb_fs.c3
-rw-r--r--src/repository.c12
6 files changed, 32 insertions, 31 deletions
diff --git a/src/checkout.c b/src/checkout.c
index 8c06b3335..2a8bfd558 100644
--- a/src/checkout.c
+++ b/src/checkout.c
@@ -1366,7 +1366,7 @@ static int checkout_mkdir(
mkdir_opts.dir_map = data->mkdir_map;
mkdir_opts.pool = &data->pool;
- error = git_futils_mkdir_ext(
+ error = git_futils_mkdir_relative(
path, base, mode, flags, &mkdir_opts);
data->perfdata.mkdir_calls += mkdir_opts.perfdata.mkdir_calls;
diff --git a/src/fileops.c b/src/fileops.c
index b7b55159f..b986a6546 100644
--- a/src/fileops.c
+++ b/src/fileops.c
@@ -18,7 +18,7 @@ GIT__USE_STRMAP
int git_futils_mkpath2file(const char *file_path, const mode_t mode)
{
return git_futils_mkdir(
- file_path, NULL, mode,
+ file_path, mode,
GIT_MKDIR_PATH | GIT_MKDIR_SKIP_LAST | GIT_MKDIR_VERIFY_DIR);
}
@@ -331,8 +331,8 @@ GIT_INLINE(int) validate_existing(
return 0;
}
-int git_futils_mkdir_ext(
- const char *path,
+int git_futils_mkdir_relative(
+ const char *relative_path,
const char *base,
mode_t mode,
uint32_t flags,
@@ -343,9 +343,13 @@ int git_futils_mkdir_ext(
ssize_t root = 0, min_root_len, root_len;
char lastch = '/', *tail;
struct stat st;
+ struct git_futils_mkdir_options empty_opts = {0};
+
+ if (!opts)
+ opts = &empty_opts;
/* build path and find "root" where we should start calling mkdir */
- if (git_path_join_unrooted(&make_path, path, base, &root) < 0)
+ if (git_path_join_unrooted(&make_path, relative_path, base, &root) < 0)
return -1;
if (make_path.size == 0) {
@@ -503,17 +507,16 @@ done:
int git_futils_mkdir(
const char *path,
- const char *base,
mode_t mode,
uint32_t flags)
{
struct git_futils_mkdir_options options = {0};
- return git_futils_mkdir_ext(path, base, mode, flags, &options);
+ return git_futils_mkdir_relative(path, NULL, mode, flags, &options);
}
-int git_futils_mkdir_r(const char *path, const char *base, const mode_t mode)
+int git_futils_mkdir_r(const char *path, const mode_t mode)
{
- return git_futils_mkdir(path, base, mode, GIT_MKDIR_PATH);
+ return git_futils_mkdir(path, mode, GIT_MKDIR_PATH);
}
typedef struct {
@@ -777,7 +780,7 @@ static int _cp_r_mkdir(cp_r_info *info, git_buf *from)
/* create root directory the first time we need to create a directory */
if ((info->flags & GIT_CPDIR__MKDIR_DONE_FOR_TO_ROOT) == 0) {
error = git_futils_mkdir(
- info->to_root, NULL, info->dirmode,
+ info->to_root, info->dirmode,
(info->flags & GIT_CPDIR_CHMOD_DIRS) ? GIT_MKDIR_CHMOD : 0);
info->flags |= GIT_CPDIR__MKDIR_DONE_FOR_TO_ROOT;
@@ -785,9 +788,9 @@ static int _cp_r_mkdir(cp_r_info *info, git_buf *from)
/* create directory with root as base to prevent excess chmods */
if (!error)
- error = git_futils_mkdir(
+ error = git_futils_mkdir_relative(
from->ptr + info->from_prefix, info->to_root,
- info->dirmode, info->mkdir_flags);
+ info->dirmode, info->mkdir_flags, NULL);
return error;
}
diff --git a/src/fileops.h b/src/fileops.h
index 0f6466c59..572ff01a5 100644
--- a/src/fileops.h
+++ b/src/fileops.h
@@ -55,12 +55,9 @@ extern int git_futils_creat_locked(const char *path, const mode_t mode);
extern int git_futils_creat_locked_withpath(const char *path, const mode_t dirmode, const mode_t mode);
/**
- * Create a path recursively
- *
- * If a base parameter is being passed, it's expected to be valued with a
- * path pointing to an already existing directory.
+ * Create a path recursively.
*/
-extern int git_futils_mkdir_r(const char *path, const char *base, const mode_t mode);
+extern int git_futils_mkdir_r(const char *path, const mode_t mode);
/**
* Flags to pass to `git_futils_mkdir`.
@@ -111,20 +108,20 @@ struct git_futils_mkdir_options
* and optionally chmods the directory immediately after (or each part of the
* path if requested).
*
- * @param path The path to create.
+ * @param path The path to create, relative to base.
* @param base Root for relative path. These directories will never be made.
* @param mode The mode to use for created directories.
* @param flags Combination of the mkdir flags above.
- * @param opts Extended options, use `git_futils_mkdir` if you are not interested.
+ * @param opts Extended options, or null.
* @return 0 on success, else error code
*/
-extern int git_futils_mkdir_ext(const char *path, const char *base, mode_t mode, uint32_t flags, struct git_futils_mkdir_options *opts);
+extern int git_futils_mkdir_relative(const char *path, const char *base, mode_t mode, uint32_t flags, struct git_futils_mkdir_options *opts);
/**
- * Create a directory or entire path. Similar to `git_futils_mkdir_withperf`
+ * Create a directory or entire path. Similar to `git_futils_mkdir_relative`
* without performance data.
*/
-extern int git_futils_mkdir(const char *path, const char *base, mode_t mode, uint32_t flags);
+extern int git_futils_mkdir(const char *path, mode_t mode, uint32_t flags);
/**
* Create all the folders required to contain
diff --git a/src/odb_loose.c b/src/odb_loose.c
index 99b8f7c91..730c4b1e1 100644
--- a/src/odb_loose.c
+++ b/src/odb_loose.c
@@ -84,9 +84,9 @@ static int object_file_name(
static int object_mkdir(const git_buf *name, const loose_backend *be)
{
- return git_futils_mkdir(
+ return git_futils_mkdir_relative(
name->ptr + be->objects_dirlen, be->objects_dir, be->object_dir_mode,
- GIT_MKDIR_PATH | GIT_MKDIR_SKIP_LAST | GIT_MKDIR_VERIFY_DIR);
+ GIT_MKDIR_PATH | GIT_MKDIR_SKIP_LAST | GIT_MKDIR_VERIFY_DIR, NULL);
}
static size_t get_binary_object_header(obj_hdr *hdr, git_buf *obj)
diff --git a/src/refdb_fs.c b/src/refdb_fs.c
index 1ddce4649..921f7862b 100644
--- a/src/refdb_fs.c
+++ b/src/refdb_fs.c
@@ -1413,7 +1413,8 @@ static int setup_namespace(git_buf *path, git_repository *repo)
git__free(parts);
/* Make sure that the folder with the namespace exists */
- if (git_futils_mkdir_r(git_buf_cstr(path), repo->path_repository, 0777) < 0)
+ if (git_futils_mkdir_relative(git_buf_cstr(path), repo->path_repository,
+ 0777, GIT_MKDIR_PATH, NULL) < 0)
return -1;
/* Return root of the namespaced path, i.e. without the trailing '/refs' */
diff --git a/src/repository.c b/src/repository.c
index 0f37cfbfe..d0bf7dc79 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -1441,8 +1441,8 @@ static int repo_init_structure(
if (chmod)
mkdir_flags |= GIT_MKDIR_CHMOD;
- error = git_futils_mkdir(
- tpl->path, repo_dir, dmode, mkdir_flags);
+ error = git_futils_mkdir_relative(
+ tpl->path, repo_dir, dmode, mkdir_flags, NULL);
}
else if (!external_tpl) {
const char *content = tpl->content;
@@ -1464,7 +1464,7 @@ static int mkdir_parent(git_buf *buf, uint32_t mode, bool skip2)
* don't try to set gid or grant world write access
*/
return git_futils_mkdir(
- buf->ptr, NULL, mode & ~(S_ISGID | 0002),
+ buf->ptr, mode & ~(S_ISGID | 0002),
GIT_MKDIR_PATH | GIT_MKDIR_VERIFY_DIR |
(skip2 ? GIT_MKDIR_SKIP_LAST2 : GIT_MKDIR_SKIP_LAST));
}
@@ -1568,14 +1568,14 @@ static int repo_init_directories(
/* create path #4 */
if (wd_path->size > 0 &&
(error = git_futils_mkdir(
- wd_path->ptr, NULL, dirmode & ~S_ISGID,
+ wd_path->ptr, dirmode & ~S_ISGID,
GIT_MKDIR_VERIFY_DIR)) < 0)
return error;
/* create path #2 (if not the same as #4) */
if (!natural_wd &&
(error = git_futils_mkdir(
- repo_path->ptr, NULL, dirmode & ~S_ISGID,
+ repo_path->ptr, dirmode & ~S_ISGID,
GIT_MKDIR_VERIFY_DIR | GIT_MKDIR_SKIP_LAST)) < 0)
return error;
}
@@ -1585,7 +1585,7 @@ static int repo_init_directories(
has_dotgit)
{
/* create path #1 */
- error = git_futils_mkdir(repo_path->ptr, NULL, dirmode,
+ error = git_futils_mkdir(repo_path->ptr, dirmode,
GIT_MKDIR_VERIFY_DIR | ((dirmode & S_ISGID) ? GIT_MKDIR_CHMOD : 0));
}