aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2007-11-27 00:57:42 -0600
committerRob Landley <rob@landley.net>2007-11-27 00:57:42 -0600
commitc15b3edf55ebd915b234e2ee6280a19874a052f9 (patch)
tree43d6c9c5bce6f6b7200ebb0aa84479248d1596b5
parent57389ec1d8f5b32e5de97f0f557e5f5c5b7054bb (diff)
downloadtoybox-c15b3edf55ebd915b234e2ee6280a19874a052f9.tar.gz
Patch from Charlie Shepherd to add basename and dirname. (Fixed up to apply.)
-rw-r--r--toys/Config.in16
-rw-r--r--toys/basename.c15
-rw-r--r--toys/dirname.c8
-rw-r--r--toys/toylist.h2
4 files changed, 41 insertions, 0 deletions
diff --git a/toys/Config.in b/toys/Config.in
index 04640c58..34c31107 100644
--- a/toys/Config.in
+++ b/toys/Config.in
@@ -11,6 +11,14 @@ config TOYBOX
With no arguments, shows available commands. First argument is
name of a command to run, followed by any arguments to that command.
+config BASENAME
+ bool "basename"
+ default y
+ help
+ usage: basename path
+
+ Print the part of path after the last slash.
+
config BZCAT
bool "bzcat"
default n
@@ -68,6 +76,14 @@ config DF_PEDANTIC
-k Sets units back to 1024 bytes (the default without -P)
+config DIRNAME
+ bool "dirname"
+ default y
+ help
+ usage: dirname path
+
+ Print the part of path up to the last slash.
+
config DMESG
bool "dmesg"
default y
diff --git a/toys/basename.c b/toys/basename.c
new file mode 100644
index 00000000..2ea6882c
--- /dev/null
+++ b/toys/basename.c
@@ -0,0 +1,15 @@
+#include "toys.h"
+
+int basename_main(void)
+{
+ char *name = basename(toys.optargs[0]);
+ if (toys.optargs[1]) {
+ int slen = strlen(toys.optargs[1]);
+ int name_len = strlen(name);
+ if (slen < name_len)
+ if (!strcmp(name+name_len-slen, toys.optargs[1]))
+ *(name+name_len-slen) = '\0';
+ }
+ puts(name);
+ return 0;
+}
diff --git a/toys/dirname.c b/toys/dirname.c
new file mode 100644
index 00000000..454a5d67
--- /dev/null
+++ b/toys/dirname.c
@@ -0,0 +1,8 @@
+#include "toys.h"
+#include <libgen.h>
+
+int dirname_main(void)
+{
+ puts(dirname(toys.optargs[0]));
+ return 0;
+}
diff --git a/toys/toylist.h b/toys/toylist.h
index a55a56a6..87bffed7 100644
--- a/toys/toylist.h
+++ b/toys/toylist.h
@@ -105,11 +105,13 @@ NEWTOY(toybox, NULL, 0)
// The rest of these are alphabetical, for binary search.
+USE_BASENAME(NEWTOY(basename, "<1>2", TOYFLAG_BIN))
USE_BZCAT(NEWTOY(bzcat, "", TOYFLAG_USR|TOYFLAG_BIN))
USE_CATV(NEWTOY(catv, "vte", TOYFLAG_USR|TOYFLAG_BIN))
USE_COUNT(NEWTOY(count, "", TOYFLAG_USR|TOYFLAG_BIN))
USE_TOYSH(NEWTOY(cd, NULL, TOYFLAG_NOFORK))
USE_DF(NEWTOY(df, "Pkt*a", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_DIRNAME(NEWTOY(dirname, "<1>1", TOYFLAG_BIN))
USE_DMESG(NEWTOY(dmesg, "s#n#c", TOYFLAG_BIN))
USE_ECHO(NEWTOY(echo, "+en", TOYFLAG_BIN))
USE_TOYSH(NEWTOY(exit, NULL, TOYFLAG_NOFORK))