summaryrefslogtreecommitdiff
path: root/src/basename.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1992-11-01 05:44:29 +0000
committerJim Meyering <jim@meyering.net>1992-11-01 05:44:29 +0000
commitccbd1d7dc5189f4637468a8136f672e60ee0e531 (patch)
treef07938daa9443c4a699efa77d88eb9eb2c2e663b /src/basename.c
parent144b82c6c22abaa2a3247dc33b286662a7aa90d9 (diff)
downloadcoreutils-ccbd1d7dc5189f4637468a8136f672e60ee0e531.tar.xz
Initial revision
Diffstat (limited to 'src/basename.c')
-rw-r--r--src/basename.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/basename.c b/src/basename.c
new file mode 100644
index 000000000..767dbafc6
--- /dev/null
+++ b/src/basename.c
@@ -0,0 +1,78 @@
+/* basename -- strip directory and suffix from filenames
+ Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* Usage: basename name [suffix]
+ NAME is a pathname; SUFFIX is a suffix to strip from it.
+
+ basename /usr/foo/lossage/functions.l
+ => functions.l
+ basename /usr/foo/lossage/functions.l .l
+ => functions
+ basename functions.lisp p
+ => functions.lis */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include "system.h"
+
+char *basename ();
+void remove_suffix ();
+void strip_trailing_slashes ();
+
+void
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ char *name;
+
+ if (argc == 1 || argc > 3)
+ {
+ fprintf (stderr, "Usage: %s name [suffix]\n", argv[0]);
+ exit (1);
+ }
+
+ strip_trailing_slashes (argv[1]);
+
+ name = basename (argv[1]);
+
+ if (argc == 3)
+ remove_suffix (name, argv[2]);
+
+ puts (name);
+
+ exit (0);
+}
+
+/* Remove SUFFIX from the end of NAME if it is there, unless NAME
+ consists entirely of SUFFIX. */
+
+void
+remove_suffix (name, suffix)
+ register char *name, *suffix;
+{
+ register char *np, *sp;
+
+ np = name + strlen (name);
+ sp = suffix + strlen (suffix);
+
+ while (np > name && sp > suffix)
+ if (*--np != *--sp)
+ return;
+ if (np > name)
+ *np = '\0';
+}