*** /dev/null Wed Apr 2 15:04:42 2003 --- src/port/path.c Wed Apr 2 14:56:23 2003 *************** *** 0 **** --- 1,78 ---- + /* $Id: path.c,v 1.1 2002/07/18 04:13:59 momjian Exp $ */ + + #include "c.h" + #include + + /* + * is_absolute_path + */ + bool is_absolute_path(const char *filename) + { + return filename[0] == '/' + #ifdef WIN32 /* WIN32 paths can either have forward or backward slashes */ + || filename[0] == '\\' + || (toupper(filename[0]) >= 'A' && toupper(filename[0]) <= 'Z' && + filename[1] == ':' && (filename[2] == '\\' || filename[2] == '/')) + #endif + ; + } + + + + /* + * first_path_separator + */ + char *first_path_separator(const char *filename) + { + #ifndef WIN32 + return strchr(filename, '/'); + #else + char *slash, *bslash; + + /* How should we handle "C:file.c"? */ + slash = strchr(filename, '/'); + bslash = strchr(filename, '\\'); + if (slash == NULL) + return bslash; + else if (bslash == NULL) + return slash; + else + return (slash < bslash) ? slash : bslash; + #endif + } + + + /* + * last_path_separator + */ + char *last_path_separator(const char *filename) + { + #ifndef WIN32 + return strrchr(filename, '/'); + #else + char *slash, *bslash; + + /* How should we handle "C:file.c"? */ + slash = strrchr(filename, '/'); + bslash = strrchr(filename, '\\'); + if (slash == NULL) + return bslash; + else if (bslash == NULL) + return slash; + else + return (slash > bslash) ? slash : bslash; + #endif + } + + + /* + * Extracts the actual name of the program as called. + */ + char * + get_progname(char *argv0) + { + if (!last_path_separator(argv0)) + return argv0; + else + return last_path_separator(argv0) + 1; + }