aboutsummaryrefslogtreecommitdiff
path: root/common/dir.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/dir.h')
-rw-r--r--common/dir.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/common/dir.h b/common/dir.h
new file mode 100644
index 0000000..3e1ca41
--- /dev/null
+++ b/common/dir.h
@@ -0,0 +1,28 @@
+#ifndef _UWU_COMMON_DIR_H_
+#define _UWU_COMMON_DIR_H_
+
+#include <stdlib.h>
+#include <libgen.h>
+#include <string.h>
+
+static char *wrap_name_func(const char *name, char *(*fn)(char *))
+{
+ char *copy = strdup(name);
+ char *result = fn(copy);
+ char *result_copy = strdup(result);
+
+ free(copy);
+ return result_copy;
+}
+
+static inline char *basename_wrapper(const char *name)
+{
+ return wrap_name_func(name, &basename);
+}
+
+static inline char *dirname_wrapper(const char *name)
+{
+ return wrap_name_func(name, &dirname);
+}
+
+#endif