A include/npe/libgen.h => include/npe/libgen.h +9 -0
@@ 0,0 1,9 @@
+#ifndef _npe_libgen_h_
+#define _npe_libgen_h_
+
+#include <npe.h>
+
+char *dirname(char *path);
+char *basename(char *path);
+
+#endif
A libnpe/basename.c => libnpe/basename.c +20 -0
@@ 0,0 1,20 @@
+#include <libgen.h>
+
+char*
+basename(char *path)
+{
+ char *p;
+
+ if(path == nil || path[0] == 0)
+ return ".";
+ if(path[0] != 0 && path[0] == '/' && path[1] == 0)
+ return path;
+ p = path + strlen(path);
+ for(p--; p > path+1 && *p == '/'; p--)
+ *p = 0;
+ for(p--; p > path && *p != '/'; p--)
+ ;
+ if(*p == '/')
+ return p+1;
+ return p;
+}
A libnpe/dirname.c => libnpe/dirname.c +24 -0
@@ 0,0 1,24 @@
+#include <libgen.h>
+
+char*
+dirname(char *path)
+{
+ char *p;
+
+ if(path == nil || path[0] == 0)
+ return ".";
+ if(path[0] != 0 && path[0] == '/' && path[1] == 0)
+ return path;
+ p = path + strlen(path);
+ for(p--; p > path+1 && *p == '/'; p--)
+ *p = 0;
+ for(p--; p > path && *p != '/'; p--)
+ ;
+ if(*p == '/' && p == path)
+ return "/";
+ if(p == path)
+ return ".";
+ if(*p == '/')
+ *p = 0;
+ return path;
+}
M libnpe/mkfile => libnpe/mkfile +2 -0
@@ 11,8 11,10 @@ HFILES=\
OFILES=\
_main.$O\
_npe.$O\
+ basename.$O\
closedir.$O\
dirfd.$O\
+ dirname.$O\
exp2.$O\
fstatat.$O\
fts_children.$O\