X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ftpath.c;h=9dd863727b2b96878e47b57848e9dc9e2e2af7d5;hb=762b8f1410065bff60b1e174ec58e9d3d229c871;hp=8c339045c252adc34429175c343441ba4d0f4c54;hpb=199ffcf6f817974587a9d5bcf8066531ed0f45ad;p=yaz-moved-to-github.git diff --git a/src/tpath.c b/src/tpath.c index 8c33904..9dd8637 100644 --- a/src/tpath.c +++ b/src/tpath.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: tpath.c,v 1.9 2006-04-27 08:39:05 adam Exp $ + * $Id: tpath.c,v 1.11 2006-06-08 20:55:38 adam Exp $ */ /** * \file tpath.c @@ -45,36 +45,39 @@ char *yaz_filepath_resolve(const char *fname, const char *path, const char *path_sep = 0; size_t len = 0; size_t slen = 0; - + *fullpath = '\0'; if (path) { /* somewhat dirty since we have to consider Windows * drive letters.. */ - if (strchr ("/\\.", *path)) - { + if (path[0] && strchr ("/\\.", *path)) path_sep = strchr (path+1, ':'); - } else if (path[0] && path[1]) path_sep = strchr (path+2, ':'); + else + path_sep = 0; + if (path_sep) len = path_sep - path; else len = strlen(path); + /* is path is relative and base is to be used */ if (!strchr ("/\\", *path) && base) { + /* yes: make base the first part */ strcpy (fullpath, base); slen = strlen(fullpath); fullpath[slen++] = '/'; } - memcpy (fullpath+slen, path, len); + if (len) + memcpy (fullpath+slen, path, len); slen += len; - if (!strchr("/\\", fullpath[slen-1])) + if (slen > 0 && !strchr("/\\", fullpath[slen-1])) fullpath[slen++] = '/'; } strcpy (fullpath+slen, fname); - if (stat(fullpath, &stat_buf) == 0) return fullpath;