summaryrefslogtreecommitdiff
path: root/usr/src/cmd/basename
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/basename')
-rw-r--r--usr/src/cmd/basename/Makefile53
-rw-r--r--usr/src/cmd/basename/basename.c110
-rw-r--r--usr/src/cmd/basename/basename.sh42
3 files changed, 205 insertions, 0 deletions
diff --git a/usr/src/cmd/basename/Makefile b/usr/src/cmd/basename/Makefile
new file mode 100644
index 0000000000..f6da64048b
--- /dev/null
+++ b/usr/src/cmd/basename/Makefile
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+#ident "%Z%%M% %I% %E% SMI"
+#
+# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+PROG= basename
+XPG4PROG= basename
+
+SRCS= $(PROG:%=%.sh)
+
+include ../Makefile.cmd
+
+$(XPG4) := CFLAGS += $(CCVERBOSE)
+
+.KEEP_STATE:
+
+all: $(PROG) $(XPG4)
+
+$(PROG): $(PROG).sh
+ $(RM) $@
+ cat $(PROG).sh > $@
+ chmod +x $@
+
+install: all $(ROOTPROG) $(ROOTXPG4PROG)
+
+clean:
+
+lint: lint_PROG
+
+include ../Makefile.targ
diff --git a/usr/src/cmd/basename/basename.c b/usr/src/cmd/basename/basename.c
new file mode 100644
index 0000000000..c4d3fbb733
--- /dev/null
+++ b/usr/src/cmd/basename/basename.c
@@ -0,0 +1,110 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void output(char *);
+static void usage(void);
+
+int
+main(int argc, char **argv)
+{
+ char *p;
+ char *string;
+ char *suffix;
+
+ (void) setlocale(LC_ALL, "");
+#if !defined(TEXT_DOMAIN)
+#define TEXT_DOMAIN "SYS_TEST"
+#endif
+ (void) textdomain(TEXT_DOMAIN);
+
+ if (argc == 1)
+ output(".");
+
+ if (strcmp(argv[1], "--") == 0) {
+ argv++;
+ argc--;
+ }
+
+ if (argc == 1)
+ output(".");
+
+ if (argc > 3)
+ usage();
+
+ string = argv[1];
+ suffix = (argc == 2) ? NULL : argv[2];
+
+ if (*string == '\0')
+ output(".");
+
+ /* remove trailing slashes */
+ p = string + strlen(string) -1;
+ while ((p >= string) && (*p == '/'))
+ *p-- = '\0';
+
+ if (*string == '\0')
+ output("/");
+
+ /* skip to one past last slash */
+ if ((p = strrchr(string, '/')) != NULL)
+ string = p + 1;
+
+ /*
+ * if a suffix is present and is not the same as the remaining
+ * string and is identical to the last characters in the remaining
+ * string, remove those characters from the string.
+ */
+ if (suffix != NULL)
+ if (strcmp(string, suffix) != NULL) {
+ p = string + strlen(string) - strlen(suffix);
+ if (strcmp(p, suffix) == NULL)
+ *p = '\0';
+ }
+
+ output(string);
+ return (0);
+}
+
+static void
+output(char *string)
+{
+ (void) printf("%s\n", string);
+ exit(0);
+}
+
+static void usage(void)
+{
+ (void) fprintf(stderr,
+ gettext("Usage: basename string [ suffix ]\n"));
+ exit(1);
+}
diff --git a/usr/src/cmd/basename/basename.sh b/usr/src/cmd/basename/basename.sh
new file mode 100644
index 0000000000..2c7249f007
--- /dev/null
+++ b/usr/src/cmd/basename/basename.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/sh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
+# All Rights Reserved
+
+
+#ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.8 */
+if [ $# -gt 2 ]
+then
+ echo >&2 "Usage: basename [ path [ suffix-pattern ] ]"
+ exit 1
+fi
+# If no first argument or first argument is null, make first argument
+# "." Add beginning slash, then remove trailing slashes, then remove
+# everything up through last slash, then remove suffix pattern if
+# second argument is present.
+# If nothing is left, first argument must be of form //*, in which
+# case the basename is /.
+exec /usr/bin/expr \
+ "/${1:-.}" : '\(.*[^/]\)/*$' : '.*/\(..*\)' : "\\(.*\\)$2\$" \| \
+ "/${1:-.}" : '\(.*[^/]\)/*$' : '.*/\(..*\)' \| \
+ "/${1:-.}" : '.*/\(..*\)'