Viewing: basename.c
📄 basename.c (Read Only) ⬅ To go back
/* AdrOS basename utility — strip directory from filename */
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
    if (argc <= 1) {
        fprintf(stderr, "usage: basename PATH [SUFFIX]\n");
        return 1;
    }
    char* p = argv[1];
    /* Remove trailing slashes */
    int len = (int)strlen(p);
    while (len > 1 && p[len - 1] == '/') p[--len] = '\0';
    /* Find last slash */
    char* base = p;
    for (char* s = p; *s; s++) {
        if (*s == '/' && *(s + 1)) base = s + 1;
    }
    /* Strip suffix if provided */
    if (argc > 2) {
        int blen = (int)strlen(base);
        int slen = (int)strlen(argv[2]);
        if (blen > slen && strcmp(base + blen - slen, argv[2]) == 0)
            base[blen - slen] = '\0';
    }
    printf("%s\n", base);
    return 0;
}