#include #include static char dot[] = "."; extern "C" { char* basename(char* path) { // If path is NULL, or the string's length is 0, return . if (!path) return dot; usize len = strlen(path); if (!len) return dot; // Strip trailing slashes. char* it = path + len - 1; while (*it == '/' && it != path) { it--; } *(it + 1) = 0; if (it == path) return path; // Return path from the first character if there are no more slashes, or from the first character after the last // slash. char* beg = strrchr(path, '/'); if (!beg) return path; return beg + 1; } char* dirname(char* path) { // If path is NULL, or the string's length is 0, return . if (!path) return dot; usize len = strlen(path); if (!len) return dot; if (len == 1 && *path != '/') return dot; // Strip trailing slashes. char* it = path + len - 1; while (*it == '/' && it != path) { it--; } *(char*)(it + 1) = 0; if (it == path) return path; // Search for the last slash. If there is none, return . // Otherwise, we end the string there and return. char* end = strrchr(path, '/'); if (!end) return dot; if (end != path) *end = 0; else *(end + 1) = 0; return path; } }