summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2007-06-03 03:51:10 +0200
committerMichael Brown2007-06-03 03:51:10 +0200
commit182e3ed61d8db574c2bf7a091ce2221746259cbd (patch)
treee757fc4b0b06f992c34f8653ef3d591e0fb5decd /src
parentAdded [v]asprintf() (diff)
downloadipxe-182e3ed61d8db574c2bf7a091ce2221746259cbd.tar.gz
ipxe-182e3ed61d8db574c2bf7a091ce2221746259cbd.tar.xz
ipxe-182e3ed61d8db574c2bf7a091ce2221746259cbd.zip
Added dirname()
Diffstat (limited to 'src')
-rw-r--r--src/core/basename.c22
-rw-r--r--src/include/libgen.h3
2 files changed, 24 insertions, 1 deletions
diff --git a/src/core/basename.c b/src/core/basename.c
index f50b71513..7340c0d55 100644
--- a/src/core/basename.c
+++ b/src/core/basename.c
@@ -38,3 +38,25 @@ char * basename ( char *path ) {
basename = strrchr ( path, '/' );
return ( basename ? ( basename + 1 ) : path );
}
+
+/**
+ * Return directory name from path
+ *
+ * @v path Full path
+ * @ret dirname Directory name
+ *
+ * Note that this function may modify its argument.
+ */
+char * dirname ( char *path ) {
+ char *separator;
+
+ separator = strrchr ( path, '/' );
+ if ( separator == path ) {
+ return "/";
+ } else if ( separator ) {
+ *separator = 0;
+ return path;
+ } else {
+ return ".";
+ }
+}
diff --git a/src/include/libgen.h b/src/include/libgen.h
index 8fa552a92..56a2f760b 100644
--- a/src/include/libgen.h
+++ b/src/include/libgen.h
@@ -1,6 +1,7 @@
#ifndef _LIBGEN_H
#define _LIBGEN_H
-char * basename ( char *path );
+extern char * basename ( char *path );
+extern char * dirname ( char *path );
#endif /* _LIBGEN_H */