changeset 404:ad5ffc45aa62

Initial 'basename' implementation
author Tryn Mirell <tryn@mirell.org>
date Sun, 15 Jan 2012 23:20:06 -0600
parents f6ffc6685a9e
children a8b14410e784
files toys/basename.c
diffstat 1 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toys/basename.c	Sun Jan 15 23:20:06 2012 -0600
@@ -0,0 +1,53 @@
+/* vi: set sw=4 ts=4:
+ *
+ * basename.c  
+
+USE_BASENAME(NEWTOY(basename, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+
+config BASENAME
+	bool "basename"
+	default n
+	help
+        usage: basename string [suffix]
+        Return non-directory portion of a pathname
+*/
+
+#include "toys.h"
+
+void basename_main(void)
+{
+    char *arg, *suffix, *base;
+    int arglen;
+
+    arg = toys.optargs[0];
+    suffix = toys.optargs[1];
+
+    // return null string if nothing provided
+    if (!arg) return; 
+
+    arglen = strlen(arg);
+    
+    // handle the case where we only have single slash
+    if (arglen == 1 && arg[0] == '/') {
+        puts("/");
+        return;
+    }
+
+    // remove trailing slash
+    if (arg[arglen - 1] == '/') {
+        arg[arglen - 1] = 0;
+    }
+
+    // get everything past the last /
+    base = strrchr(arg, '/') + 1;
+   
+    // handle the case where we have all slashes
+    if (base[0] == 0) base = "/";  
+    
+    // chop off the suffix if provided
+    if (suffix) {
+        strstr(base, suffix)[0] = 0;
+    }
+
+    puts(base);
+}