shithub: npe

Download patch

ref: 9e05fc749cb48540ee04371cd578f5fd8898b034
parent: 686729f16636fe0310dcb4b3108a572b25c88106
author: Jacob Moody <moody@posixcafe.org>
date: Sun May 7 16:51:26 EDT 2023

npe: add libgen.h

--- /dev/null
+++ b/include/npe/libgen.h
@@ -1,0 +1,9 @@
+#ifndef _npe_libgen_h_
+#define _npe_libgen_h_
+
+#include <npe.h>
+
+char *dirname(char *path);
+char *basename(char *path);
+
+#endif
--- /dev/null
+++ b/libnpe/basename.c
@@ -1,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;
+}
--- /dev/null
+++ b/libnpe/dirname.c
@@ -1,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;
+}
--- a/libnpe/mkfile
+++ b/libnpe/mkfile
@@ -11,8 +11,10 @@
 OFILES=\
 	_main.$O\
 	_npe.$O\
+	basename.$O\
 	closedir.$O\
 	dirfd.$O\
+	dirname.$O\
 	exp2.$O\
 	fstatat.$O\
 	fts_children.$O\