From the manual page, we know there are two versions of basename()
implementation. One for POSIX
-compliant:
#include <libgen.h>
char *basename(char *path);
Another for GNU
version:
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <string.h>
But the manual
doesn’t mention that the prototype type of GNU
version is different from POSIX
-compliant one (The parameter type is const char*
, not char*
):
char *basename (const char *__filename)
And the implementation is also simple, just invokes strrchr()
:
char *
__basename (const char *filename)
{
char *p = strrchr (filename, '/');
return p ? p + 1 : (char *) filename;
}