isolate editor variable, only pass line numbers to vi
[unix-history] / usr / src / usr.bin / basename / basename.c
index 57beeae..df5610a 100644 (file)
@@ -1,7 +1,18 @@
 /*
  * Copyright (c) 1987 Regents of the University of California.
 /*
  * Copyright (c) 1987 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
@@ -11,35 +22,32 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)basename.c 4.3 (Berkeley) %G%";
+static char sccsid[] = "@(#)basename.c 4.5 (Berkeley) %G%";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#include <stdio.h>
-
 main(argc, argv)
 main(argc, argv)
-char **argv;
+       int argc;
+       char **argv;
 {
 {
-       register char *p1, *p2, *p3;
+       register char *p, *t;
+       char *base;
 
 
-       if (argc < 2) {
+       if (argc <= 1) {        /* backward compatible */
                putchar('\n');
                exit(1);
        }
                putchar('\n');
                exit(1);
        }
-       p1 = argv[1];
-       p2 = p1;
-       while (*p1) {
-               if (*p1++ == '/')
-                       p2 = p1;
-       }
-       if (argc>2) {
-               for(p3=argv[2]; *p3; p3++) 
-                       ;
-               while(p3>argv[2])
-                       if(p1 <= p2 || *--p3 != *--p1)
-                               goto output;
-               *p1 = '\0';
+       for (p = base = *++argv; *p;)
+               if (*p++ == '/')
+                       base = p;
+       if (argc > 2) {         /* original version allows any # of args */
+               for (t = *++argv; *t; ++t);
+               do {
+                       if (t == *argv) {
+                               *p = '\0';
+                               break;
+                       }
+               } while (p >= base && *--t == *--p);
        }
        }
-output:
-       puts(p2, stdout);
+       puts(base);
        exit(0);
 }
        exit(0);
 }