aboutsummaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorsinanmohd <sinan@sinanmohd.com>2023-12-31 00:36:01 +0530
committersinanmohd <sinan@sinanmohd.com>2023-12-31 00:46:01 +0530
commit84f1e50cb1a959f3a835b8ba265159cc6e75635a (patch)
tree9663dd6bfa60c16977df894b48a3d9dc4419239b /util.c
parent50b6b69fcfbe492d9bac3ed1c9d0cd7cc400a5de (diff)
pass/rm: init
Diffstat (limited to 'util.c')
-rw-r--r--util.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/util.c b/util.c
index 14dfeaa..8e3a108 100644
--- a/util.c
+++ b/util.c
@@ -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;