aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/other/filename.c
diff options
context:
space:
mode:
authorWilliam Harrington <kb0iic@berzerkula.org>2025-01-14 16:06:02 -0600
committerWilliam Harrington <kb0iic@berzerkula.org>2025-01-14 16:06:02 -0600
commit0cc9b20c15460213e488bf5e70963b941482f628 (patch)
treebb0143245583ec846630f39bfa2258dba640ccd7 /sdk/other/filename.c
parent0e084ade5069756d487b5c948c48b777e37c00c9 (diff)
Add source.
Diffstat (limited to 'sdk/other/filename.c')
-rw-r--r--sdk/other/filename.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/sdk/other/filename.c b/sdk/other/filename.c
new file mode 100644
index 0000000..2a7275e
--- /dev/null
+++ b/sdk/other/filename.c
@@ -0,0 +1,74 @@
+/*
+ * Portable file and directory name functions.
+ * $Id$
+ * Copyright (c) 1997 by Tycho Softworks.
+ * For conditions of distribution and reuse see product license.
+ */
+
+#include <other/files.h>
+#include <std/string.h>
+#include <std/math.h>
+
+char *dirname(char *path)
+{
+ char *p = basename(path);
+ if(p == path)
+ return ".";
+
+ *(--p) = 0;
+ return path;
+}
+
+char *basename(const char *path)
+{
+ char *p = strrchr(path, '/');
+#if defined(_MSDOS) || defined(_OS2) || defined(_WIN32)
+ char *p1 = strrchr(path, '\\');
+ p = max(p, p1);
+#endif
+
+ if(p)
+ return ++p;
+ else
+ return (char *)path;
+}
+
+char *extfname(const char *path)
+{
+ char *e = strrchr(pathfname(path), '.');
+
+ if(e)
+ return e;
+ else
+ return "";
+}
+
+bool ispath(const char *p)
+{
+ if(strchr(p, '/'))
+ return TRUE;
+#if defined(_MSDOS) || defined(_OS2) || defined(_WIN32)
+ if(strchr(p, '\\'))
+ return TRUE;
+#endif
+ return FALSE;
+}
+
+bool isroot(const char *p)
+{
+#if defined(_MSDOS) || defined(_OS2) || defined(_WIN32)
+ if(!strncmp(p, "\\\\", 2))
+ return TRUE;
+
+ if(p[1] == ':')
+ return TRUE;
+#else
+ if(*p == '/')
+ return TRUE;
+#endif
+ return FALSE;
+}
+
+
+
+