diff --git a/src/libsrx/src/helpers.c b/src/libsrx/src/helpers.c index 20ec9f10..687b6f46 100644 --- a/src/libsrx/src/helpers.c +++ b/src/libsrx/src/helpers.c @@ -5,6 +5,7 @@ * XXX: removed. */ +#include #include #include #include @@ -13,6 +14,7 @@ #include #include +#include "common.h" int debug; /* Sets debug level (0:off) */ /* TODO remove once confd / statd lib situation is resolved */ @@ -20,6 +22,29 @@ int debug; /* Sets debug level (0:off) */ int vasprintf(char **strp, const char *fmt, va_list ap); #endif +static int do_delete(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftw) +{ + if (ftw->level == 0) + return 1; + + if (remove(fpath) && errno != EBUSY) + WARN("Failed removing %s", fpath); + + return 0; +} + +int rmrf(const char *path) +{ + if (!fisdir(path)) + return 0; + + nftw(path, do_delete, 64, FTW_DEPTH | FTW_PHYS); + if (remove(path) && errno != ENOENT) + WARN("Failed removing path %s", path); + + return 0; +} + char *unquote(char *buf) { char q = buf[0]; diff --git a/src/libsrx/src/helpers.h b/src/libsrx/src/helpers.h index 55e29429..cd3b8fb3 100644 --- a/src/libsrx/src/helpers.h +++ b/src/libsrx/src/helpers.h @@ -7,6 +7,7 @@ int vasprintf(char **strp, const char *fmt, va_list ap); +int rmrf(const char *path); char *unquote(char *buf); char *fgetkey(const char *file, const char *key);