mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-11 20:13:24 +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;
|
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,
|
int git_futils_cmp_path(const char *name1, int len1, int isdir1,
|
||||||
const char *name2, int len2, int isdir2)
|
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);
|
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 */
|
/* Taken from git.git */
|
||||||
static inline int is_dot_or_dotdot(const char *name)
|
static inline int is_dot_or_dotdot(const char *name)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user