1*0b459c2cSDavid du Colombier /* basename.c -- return the last element in a path */ 2*0b459c2cSDavid du Colombier 3*0b459c2cSDavid du Colombier #if HAVE_CONFIG_H 4*0b459c2cSDavid du Colombier # include <config.h> 5*0b459c2cSDavid du Colombier #endif 6*0b459c2cSDavid du Colombier 7*0b459c2cSDavid du Colombier #include <backupfile.h> 8*0b459c2cSDavid du Colombier 9*0b459c2cSDavid du Colombier #ifndef FILESYSTEM_PREFIX_LEN 10*0b459c2cSDavid du Colombier #define FILESYSTEM_PREFIX_LEN(f) 0 11*0b459c2cSDavid du Colombier #endif 12*0b459c2cSDavid du Colombier 13*0b459c2cSDavid du Colombier #ifndef ISSLASH 14*0b459c2cSDavid du Colombier #define ISSLASH(c) ((c) == '/') 15*0b459c2cSDavid du Colombier #endif 16*0b459c2cSDavid du Colombier 17*0b459c2cSDavid du Colombier /* In general, we can't use the builtin `basename' function if available, 18*0b459c2cSDavid du Colombier since it has different meanings in different environments. 19*0b459c2cSDavid du Colombier In some environments the builtin `basename' modifies its argument. */ 20*0b459c2cSDavid du Colombier 21*0b459c2cSDavid du Colombier char * base_name(name)22*0b459c2cSDavid du Colombierbase_name (name) 23*0b459c2cSDavid du Colombier char const *name; 24*0b459c2cSDavid du Colombier { 25*0b459c2cSDavid du Colombier char const *base = name += FILESYSTEM_PREFIX_LEN (name); 26*0b459c2cSDavid du Colombier 27*0b459c2cSDavid du Colombier for (; *name; name++) 28*0b459c2cSDavid du Colombier if (ISSLASH (*name)) 29*0b459c2cSDavid du Colombier base = name + 1; 30*0b459c2cSDavid du Colombier 31*0b459c2cSDavid du Colombier return (char *) base; 32*0b459c2cSDavid du Colombier } 33