Skip to content
Snippets Groups Projects
Commit 57e17035 authored by rswindell's avatar rswindell
Browse files

Deuce's fexistcase() which uses glob() to match ALL case perversions rather

than just all-upper or all-lower case filenames.
parent 52d78545
No related branches found
No related tags found
No related merge requests found
...@@ -388,27 +388,63 @@ BOOL DLLCALL fexist(const char *filespec) ...@@ -388,27 +388,63 @@ BOOL DLLCALL fexist(const char *filespec)
BOOL DLLCALL fexistcase(char *path) BOOL DLLCALL fexistcase(char *path)
{ {
#if defined(__unix__) #if defined(__unix__)
char tmp[MAX_PATH+1]; char globme[MAX_PATH*4+1];
char fname[MAX_PATH+1];
if(fexist(path)) char tmp[5];
return(TRUE); char *p;
int i,j;
SAFECOPY(tmp,path); glob_t glb;
/* check for uppercase filename */ strncpy(globme,path,MAX_PATH*4);
strupr(getfname(tmp)); p=getfname(globme);
if(fexist(path)) { strncpy(fname,p,MAX_PATH);
strcpy(path,tmp); *p=0;
return(TRUE); for(i=0;fname[i];i++) {
if(isalpha(fname[i])) {
sprintf(tmp,"[%c%c]",toupper(fname[i]),tolower(fname[i]));
}
else {
sprintf(tmp,"%c",fname[i]);
}
strncat(globme,tmp,MAX_PATH*4);
}
if(strcspn(path,"?*")!=strlen(path)) {
strncpy(path,globme,MAX_PATH);
return(fexist(path));
} }
/* check for lowercase filename */ if(glob(globme,GLOB_MARK|GLOB_NOSORT,NULL,&glb))
strlwr(getfname(tmp)); return(FALSE);
if(fexist(path)) {
strcpy(path,tmp); if(glb.gl_matchc>0) {
return(TRUE); /**********************************************************
* 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_matchc;i++) {
if(!strcmp(path,glb.gl_pathv[i])) {
globfree(&glb);
return TRUE;
}
else {
if(*lastchar(glb.gl_pathv[i]) != '/') {
j=i;
}
}
}
if(j>=0) {
strncpy(path,glb.gl_pathv[j],MAX_PATH);
globfree(&glb);
return TRUE;
}
globfree(&glb);
return FALSE;
} }
return(FALSE);
globfree(&glb);
return FALSE;
#else #else
return(fexist(path)); return(fexist(path));
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment