basename.c (92920) | basename.c (99137) |
---|---|
1/*- 2 * Copyright (c) 1991, 1993, 1994 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 30 unchanged lines hidden (view full) --- 39 40#if 0 41#ifndef lint 42static char sccsid[] = "@(#)basename.c 8.4 (Berkeley) 5/4/95"; 43#endif /* not lint */ 44#endif 45 46#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1991, 1993, 1994 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 30 unchanged lines hidden (view full) --- 39 40#if 0 41#ifndef lint 42static char sccsid[] = "@(#)basename.c 8.4 (Berkeley) 5/4/95"; 43#endif /* not lint */ 44#endif 45 46#include <sys/cdefs.h> |
47__FBSDID("$FreeBSD: head/usr.bin/basename/basename.c 92920 2002-03-22 01:22:50Z imp $"); | 47__FBSDID("$FreeBSD: head/usr.bin/basename/basename.c 99137 2002-06-30 13:40:35Z jmallett $"); |
48 49#include <err.h> 50#include <libgen.h> 51#include <stdio.h> 52#include <stdlib.h> 53#include <string.h> 54#include <unistd.h> 55 56int main(int, char **); 57void usage(void); 58 59int 60main(argc, argv) 61 int argc; 62 char **argv; 63{ | 48 49#include <err.h> 50#include <libgen.h> 51#include <stdio.h> 52#include <stdlib.h> 53#include <string.h> 54#include <unistd.h> 55 56int main(int, char **); 57void usage(void); 58 59int 60main(argc, argv) 61 int argc; 62 char **argv; 63{ |
64 char *p, *q; 65 int ch; | 64 char *p, *q, *suffix; 65 size_t suffixlen; 66 int aflag, ch; |
66 | 67 |
67 while ((ch = getopt(argc, argv, "")) != -1) | 68 aflag = 0; 69 suffix = NULL; 70 suffixlen = 0; 71 72 while ((ch = getopt(argc, argv, "as:")) != -1) |
68 switch(ch) { | 73 switch(ch) { |
74 case 'a': 75 aflag = 1; 76 break; 77 case 's': 78 suffix = optarg; 79 break; |
|
69 case '?': 70 default: 71 usage(); 72 } 73 argc -= optind; 74 argv += optind; 75 | 80 case '?': 81 default: 82 usage(); 83 } 84 argc -= optind; 85 argv += optind; 86 |
76 if (argc != 1 && argc != 2) | 87 if (argc < 1) |
77 usage(); 78 79 if (!*argv[0]) { 80 printf("\n"); 81 exit(0); 82 } 83 if ((p = basename(argv[0])) == NULL) 84 err(1, "%s", argv[0]); | 88 usage(); 89 90 if (!*argv[0]) { 91 printf("\n"); 92 exit(0); 93 } 94 if ((p = basename(argv[0])) == NULL) 95 err(1, "%s", argv[0]); |
85 if (*++argv && (q = strchr(p, '\0') - strlen(*argv)) > p && 86 strcmp(*argv, q) == 0) | 96 if ((suffix == NULL && !aflag) && argc == 2) { 97 suffix = argv[1]; 98 argc--; 99 } 100 if (suffix != NULL) 101 suffixlen = strlen(suffix); 102 while (argc--) { 103 if ((p = basename(*argv)) == NULL) 104 err(1, "%s", argv[0]); 105 if (suffixlen && (q = strchr(p, '\0') - suffixlen) > p && 106 strcmp(suffix, q) == 0) |
87 *q = '\0'; | 107 *q = '\0'; |
88 (void)printf("%s\n", p); | 108 argv++; 109 (void)printf("%s\n", p); 110 } |
89 exit(0); 90} 91 92void 93usage() 94{ 95 | 111 exit(0); 112} 113 114void 115usage() 116{ 117 |
96 (void)fprintf(stderr, "usage: basename string [suffix]\n"); | 118 (void)fprintf(stderr, 119"usage: basename string [suffix]\n" 120" basename [-a] [-s suffix] string [...]\n"); |
97 exit(1); 98} | 121 exit(1); 122} |