mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 18:22:16 +00:00
fileops: add git_futils_rmdir_recurs()
git_futils_rmdir_recurs() shall remove the given directory and all subdirectories. This happens only if the directories are empty. Signed-off-by: schu <schu-github@schulog.org>
This commit is contained in:
parent
e190da78f3
commit
42b3a46097
@ -301,6 +301,31 @@ int git_futils_mkdir_r(const char *path, int mode)
|
||||
return GIT_SUCCESS;
|
||||
}
|
||||
|
||||
static int _rmdir_recurs_cb(void *GIT_UNUSED(nil), char *path)
|
||||
{
|
||||
int error = GIT_SUCCESS;
|
||||
|
||||
error = git_futils_isdir(path);
|
||||
if (error == GIT_SUCCESS) {
|
||||
size_t root_size = strlen(path);
|
||||
|
||||
if ((error = git_futils_direach(path, GIT_PATH_MAX, _rmdir_recurs_cb, NULL)) < GIT_SUCCESS)
|
||||
return git__rethrow(error, "Failed to remove directory `%s`", path);
|
||||
|
||||
path[root_size] = '\0';
|
||||
return p_rmdir(path);
|
||||
}
|
||||
|
||||
return git__rethrow(error, "Failed to remove directory. `%s` is not a directory", path);
|
||||
}
|
||||
|
||||
int git_futils_rmdir_recurs(const char *path)
|
||||
{
|
||||
char p[GIT_PATH_MAX];
|
||||
strncpy(p, path, GIT_PATH_MAX);
|
||||
return _rmdir_recurs_cb(NULL, p);
|
||||
}
|
||||
|
||||
int git_futils_cmp_path(const char *name1, int len1, int isdir1,
|
||||
const char *name2, int len2, int isdir2)
|
||||
{
|
||||
|
@ -102,6 +102,9 @@ extern int git_futils_mv_withpath(const char *from, const char *to);
|
||||
*/
|
||||
extern git_off_t git_futils_filesize(git_file fd);
|
||||
|
||||
/* Recursively remove an empty directory structure */
|
||||
extern int git_futils_rmdir_recurs(const char *path);
|
||||
|
||||
/* Taken from git.git */
|
||||
static inline int is_dot_or_dotdot(const char *name)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user