diff --git a/src/basename.c b/src/basename.c index d3ac072..07f6906 100644 --- a/src/basename.c +++ b/src/basename.c @@ -7,8 +7,29 @@ #include +/* basename */ +static int _basename(char * arg, char * suf) +{ + char * str; + + str = basename(arg); + if(suf != NULL) + { + int slen; + int alen; + + slen = strlen(str); + alen = strlen(suf); + if(alen < slen && strcmp(suf, &str[slen - alen]) == 0) + str[slen - alen] = '\0'; + } + printf("%s\n", str); + return 0; +} + + /* usage */ -static int usage(void) +static int _usage(void) { fprintf(stderr, "%s", "Usage: basename string [suffix]\n"); return 1; @@ -18,23 +39,9 @@ static int usage(void) /* main */ int main(int argc, char * argv[]) { - char * str; - - /* check for errors */ - if(argc != 2 && argc != 3) - return usage(); - /* basename */ - str = basename(argv[1]); + if(argc == 2) + return _basename(argv[1], NULL); if(argc == 3) - { - int slen; - int alen; - - slen = strlen(str); - alen = strlen(argv[2]); - if(alen < slen && strcmp(argv[2], &str[slen - alen]) == 0) - str[slen - alen] = '\0'; - } - printf("%s\n", str); - return 0; + return _basename(argv[1], argv[2]); + return _usage(); } diff --git a/src/dirname.c b/src/dirname.c index 5f2f503..e7215f7 100644 --- a/src/dirname.c +++ b/src/dirname.c @@ -6,8 +6,16 @@ #include +/* dirname */ +static int _dirname(char * arg) +{ + printf("%s\n", dirname(arg)); + return 0; +} + + /* usage */ -static int usage(void) +static int _usage(void) { fprintf(stderr, "%s", "Usage: dirname string\n"); return 1; @@ -17,10 +25,7 @@ static int usage(void) /* main */ int main(int argc, char * argv[]) { - /* check for errors */ if(argc != 2) - return usage(); - /* dirname */ - printf("%s\n", dirname(argv[1])); - return 0; + return _usage(); + return _dirname(argv[1]); }