|
|
1.1 ! root 1: /* ! 2: * Strip filename suffix and directory prefix. ! 3: */ ! 4: ! 5: #include <stdio.h> ! 6: ! 7: char *basename(); ! 8: ! 9: main(argc, argv) ! 10: char *argv[]; ! 11: { ! 12: if (argc < 2 || argc > 3) { ! 13: fprintf(stderr, "Usage: basename string [suffix]\n"); ! 14: exit(1); ! 15: } ! 16: printf("%s\n", basename(argv[1], argc==2 ? NULL : argv[2])); ! 17: exit(0); ! 18: } ! 19: ! 20: /* ! 21: * Do the work of producing a stripping prefixes and ! 22: * a suffix (if not NULL). ! 23: */ ! 24: char * ! 25: basename(s, suffix) ! 26: char *s; ! 27: char *suffix; ! 28: { ! 29: register char *cp, *ep, *sp; ! 30: char *p; ! 31: ! 32: for (ep = cp = s; *ep != '\0'; ep++) ! 33: if (*ep == '/') ! 34: cp = ep+1; ! 35: if ((sp = suffix) != NULL) { ! 36: ep = cp; ! 37: while (*ep++ != '\0') ! 38: ; ! 39: ep--; ! 40: while (*sp++) ! 41: ep--; ! 42: if (ep < cp) ! 43: return (cp); ! 44: p = ep; ! 45: for (sp = suffix; *sp!='\0' && *ep!='\0'; ) ! 46: if (*sp++ != *ep++) ! 47: return (cp); ! 48: if (*sp != '\0') ! 49: return (cp); ! 50: *p = '\0'; ! 51: } ! 52: return (cp); ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.