summaryrefslogtreecommitdiff
path: root/src/lib/evil/evil_libgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/evil/evil_libgen.c')
-rw-r--r--src/lib/evil/evil_libgen.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/lib/evil/evil_libgen.c b/src/lib/evil/evil_libgen.c
new file mode 100644
index 0000000000..6ae58def47
--- /dev/null
+++ b/src/lib/evil/evil_libgen.c
@@ -0,0 +1,44 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <evil_private.h>
+
+#include <stdlib.h>
+#include <string.h> /* strlen */
+
+EVIL_API char *
+evil_basename(char *path)
+{
+ // Expected from posix
+ if ((path == NULL) || (*path == '\0') ) return ".";
+
+ // Remove trailing '\\'
+ unsigned int len = strlen(path);
+ if ((len > 1) && ((path[len -1] == '/') || (path[len -1] == '\\')))
+ path[len -1] = '\0';
+
+ // Search for the last slash
+ while(--len)
+ if ((path[len] == '/') || (path[len] == '\\'))
+ break;
+
+ if(!len) return path;
+ else return &path[len +1];
+}
+
+EVIL_API char *
+evil_dirname(char *path)
+{
+ // Expected from posix
+ if ((path == NULL) || (*path == '\0') ) return ".";
+
+ // Search for the last slash ignoring trailing '\\'
+ unsigned int len = strlen(path);
+ while(--len)
+ if ((path[len] == '/') || (path[len] == '\\'))
+ break;
+ path[len] = '\0';
+
+ return path;
+}