diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c index a6dc042928e9ddd0de309658d29ea3a55ffa7f8b..38acddfa0dc0d6e7654ae56ddd33b66bdf4fc1b4 100644 --- a/src/xpdev/dirwrap.c +++ b/src/xpdev/dirwrap.c @@ -392,20 +392,18 @@ BOOL DLLCALL fexistcase(char *path) char fname[MAX_PATH+1]; char tmp[5]; char *p; - int i,j; + int i; glob_t glb; - strncpy(globme,path,MAX_PATH*4); + SAFECOPY(globme,path); p=getfname(globme); - strncpy(fname,p,MAX_PATH); + SAFECOPY(fname,p); *p=0; for(i=0;fname[i];i++) { - if(isalpha(fname[i])) { + if(isalpha(fname[i])) sprintf(tmp,"[%c%c]",toupper(fname[i]),tolower(fname[i])); - } - else { + else sprintf(tmp,"%c",fname[i]); - } strncat(globme,tmp,MAX_PATH*4); } if(strcspn(path,"?*")!=strlen(path)) { @@ -413,7 +411,7 @@ BOOL DLLCALL fexistcase(char *path) return(fexist(path)); } - if(glob(globme,GLOB_MARK|GLOB_NOSORT,NULL,&glb)) + if(glob(globme,GLOB_MARK,NULL,&glb) != 0) return(FALSE); if(glb.gl_pathc>0) { @@ -421,25 +419,19 @@ BOOL DLLCALL fexistcase(char *path) * If multiple matches are found, return TRUE only if one * * EXACTLY matches path or all but one are directories * **********************************************************/ - j=-1; for(i=0;i<glb.gl_pathc;i++) { - if(!strcmp(path,glb.gl_pathv[i])) { + if(strcmp(path,glb.gl_pathv[i])==0) { globfree(&glb); return TRUE; } - else { - if(*lastchar(glb.gl_pathv[i]) != '/') { - j=i; - } - } + if(*lastchar(glb.gl_pathv[i]) != '/') + break; } - if(j>=0) { - strncpy(path,glb.gl_pathv[j],MAX_PATH); + if(i<glb.gl_pathc) { + strncpy(path,glb.gl_pathv[i],MAX_PATH); globfree(&glb); return TRUE; } - globfree(&glb); - return FALSE; } globfree(&glb);