diff options
author | sinanmohd <sinan@sinanmohd.com> | 2023-12-31 00:36:01 +0530 |
---|---|---|
committer | sinanmohd <sinan@sinanmohd.com> | 2023-12-31 00:46:01 +0530 |
commit | 84f1e50cb1a959f3a835b8ba265159cc6e75635a (patch) | |
tree | 9663dd6bfa60c16977df894b48a3d9dc4419239b /util.c | |
parent | 50b6b69fcfbe492d9bac3ed1c9d0cd7cc400a5de (diff) |
pass/rm: init
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -3,6 +3,8 @@ #include <errno.h> #include <linux/limits.h> #include <ctype.h> +#include <unistd.h> +#include <libgen.h> #include "util.h" @@ -33,6 +35,25 @@ int r_mkdir(const char *path, mode_t mode) return mkdir(path, mode); } +int r_rmdir(const char *prefix_path, char *rm_path) +{ + int r; + char abs_path[PATH_MAX]; + + if (!strcmp(rm_path, ".")) + return 0; + + r = snprintf(abs_path, sizeof(abs_path), "%s/%s", prefix_path, rm_path); + if (r > (int) sizeof(abs_path)) + err_die(1, "path exceeded PATH_MAX"); + + r = rmdir(abs_path); + if (r && errno != EEXIST && errno != ENOTEMPTY) + err_die(1, "%s", strerror(errno)); + + return r_rmdir(prefix_path, dirname(rm_path)); +} + void util_strtrim(char *s) { char *rend; |