X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ftpath.c;h=b802c98033a0af6df45dfc91bfc58f9fdc85e644;hp=c743a6025bf7a0479b3c33ec666427ed9f4d4fb8;hb=cf6bf2f04ed7e376bfd9a37f7ef4ab0366f46804;hpb=88d3bedf772316f87e1996f655ccf8d1e2589755 diff --git a/src/tpath.c b/src/tpath.c index c743a60..b802c98 100644 --- a/src/tpath.c +++ b/src/tpath.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2010 Index Data + * Copyright (C) 1995-2011 Index Data * See the file LICENSE for details. */ /** @@ -14,7 +14,6 @@ #include #include -#include #include #include #if HAVE_SYS_TYPES_H @@ -33,12 +32,12 @@ FILE *yaz_path_fopen(const char *path, const char *name, const char *mode) { - return yaz_fopen (path, name, mode, 0); + return yaz_fopen(path, name, mode, 0); } int yaz_fclose (FILE *f) { - return fclose (f); + return fclose(f); } @@ -51,10 +50,10 @@ size_t yaz_filepath_comp(const char **path_p, const char **comp) /* somewhat dirty since we have to consider Windows * drive letters.. */ - if (path[0] && strchr ("/\\.", path[0])) - path_sep = strchr (path+1, ':'); + if (path[0] && strchr("/\\.", path[0])) + path_sep = strchr(path+1, ':'); else if (path[0] && path[1]) - path_sep = strchr (path+2, ':'); + path_sep = strchr(path+2, ':'); else path_sep = 0; @@ -75,7 +74,9 @@ size_t yaz_filepath_comp(const char **path_p, const char **comp) char *yaz_filepath_resolve(const char *fname, const char *path, const char *base, char *fullpath) { - for(;;) + if (path && *path == '\0') + path = 0; + for (;;) { struct stat stat_buf; size_t slen = 0; @@ -90,19 +91,19 @@ char *yaz_filepath_resolve(const char *fname, const char *path, if (!len) break; - if (!strchr ("/\\", *comp) && base) + if (!strchr("/\\", *comp) && base) { /* yes: make base the first part */ - strcpy (fullpath, base); + strcpy(fullpath, base); slen = strlen(fullpath); fullpath[slen++] = '/'; } - memcpy (fullpath+slen, comp, len); + memcpy(fullpath+slen, comp, len); slen += len; - if (slen > 0 && !strchr("/\\", fullpath[slen-1])) + if(slen > 0 && !strchr("/\\", fullpath[slen-1])) fullpath[slen++] = '/'; } - strcpy (fullpath+slen, fname); + strcpy(fullpath+slen, fname); if (stat(fullpath, &stat_buf) == 0) return fullpath; if (!path) @@ -121,14 +122,15 @@ FILE *yaz_fopen(const char *path, const char *fname, const char *mode, return fopen(fullpath, mode); } -int yaz_is_abspath (const char *p) +int yaz_is_abspath(const char *p) { if (*p == '/') return 1; #ifdef WIN32 if (*p == '\\') return 1; - if (*p && p[1] == ':' && isalpha(*p)) + if (*p && p[1] == ':' && + ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))) return 1; #endif return 0;