Received: (from majordom@localhost) by hyperreal.org (8.8.5/8.8.5) id DAA18379; Mon, 18 Aug 1997 03:59:09 -0700 (PDT) Received: (from ben@localhost) by hyperreal.org (8.8.5/8.8.5) id DAA18373 for apache-cvs; Mon, 18 Aug 1997 03:59:07 -0700 (PDT) Date: Mon, 18 Aug 1997 03:59:07 -0700 (PDT) From: Ben Laurie Message-Id: <199708181059.DAA18373@hyperreal.org> To: apache-cvs@hyperreal.org Subject: cvs commit: apachen/src/os/win32 util_win32.c Sender: apache-cvs-owner@apache.org Precedence: bulk Reply-To: new-httpd@apache.org ben 97/08/18 03:59:06 Modified: src ApacheCore.dsp ApacheCore.mak src/core conf.h http_request.c httpd.h Added: src/os/win32 util_win32.c Log: First crack at Win32 filename canonicalisation. Needs work! Revision Changes Path 1.6 +4 -0 apachen/src/ApacheCore.dsp Index: ApacheCore.dsp =================================================================== RCS file: /export/home/cvs/apachen/src/ApacheCore.dsp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ApacheCore.dsp 1997/08/13 08:37:13 1.5 +++ ApacheCore.dsp 1997/08/18 10:59:01 1.6 @@ -253,6 +253,10 @@ # End Source File # Begin Source File +SOURCE=.\os\win32\util_nt.c +# End Source File +# Begin Source File + SOURCE=.\core\util_script.c # End Source File # Begin Source File 1.12 +61 -164 apachen/src/ApacheCore.mak Index: ApacheCore.mak =================================================================== RCS file: /export/home/cvs/apachen/src/ApacheCore.mak,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- ApacheCore.mak 1997/08/13 08:37:14 1.11 +++ ApacheCore.mak 1997/08/18 10:59:02 1.12 @@ -92,6 +92,7 @@ -@erase "$(INTDIR)\util_md5.obj" -@erase "$(INTDIR)\util_script.obj" -@erase "$(INTDIR)\util_snprintf.obj" + -@erase "$(INTDIR)\util_win32.obj" -@erase "$(INTDIR)\vc50.idb" -@erase "$(OUTDIR)\ApacheCore.dll" -@erase "$(OUTDIR)\ApacheCore.exp" @@ -160,7 +161,8 @@ "$(INTDIR)\util_date.obj" \ "$(INTDIR)\util_md5.obj" \ "$(INTDIR)\util_script.obj" \ - "$(INTDIR)\util_snprintf.obj" + "$(INTDIR)\util_snprintf.obj" \ + "$(INTDIR)\util_win32.obj" "$(OUTDIR)\ApacheCore.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< @@ -268,6 +270,8 @@ -@erase "$(INTDIR)\util_script.sbr" -@erase "$(INTDIR)\util_snprintf.obj" -@erase "$(INTDIR)\util_snprintf.sbr" + -@erase "$(INTDIR)\util_win32.obj" + -@erase "$(INTDIR)\util_win32.sbr" -@erase "$(INTDIR)\vc50.idb" -@erase "$(INTDIR)\vc50.pdb" -@erase "$(OUTDIR)\ApacheCore.bsc" @@ -329,7 +333,8 @@ "$(INTDIR)\util_date.sbr" \ "$(INTDIR)\util_md5.sbr" \ "$(INTDIR)\util_script.sbr" \ - "$(INTDIR)\util_snprintf.sbr" + "$(INTDIR)\util_snprintf.sbr" \ + "$(INTDIR)\util_win32.sbr" "$(OUTDIR)\ApacheCore.bsc" : "$(OUTDIR)" $(BSC32_SBRS) $(BSC32) @<< @@ -386,7 +391,8 @@ "$(INTDIR)\util_date.obj" \ "$(INTDIR)\util_md5.obj" \ "$(INTDIR)\util_script.obj" \ - "$(INTDIR)\util_snprintf.obj" + "$(INTDIR)\util_snprintf.obj" \ + "$(INTDIR)\util_win32.obj" "$(OUTDIR)\ApacheCore.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< @@ -961,11 +967,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_A=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_access.obj" "$(INTDIR)\mod_access.sbr" : $(SOURCE)\ @@ -1015,11 +1016,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_AC=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_actions.obj" "$(INTDIR)\mod_actions.sbr" : $(SOURCE)\ @@ -1057,11 +1053,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_AL=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_alias.obj" "$(INTDIR)\mod_alias.sbr" : $(SOURCE)\ @@ -1109,11 +1100,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_AS=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_asis.obj" "$(INTDIR)\mod_asis.sbr" : $(SOURCE) $(DEP_CPP_MOD_AS)\ @@ -1157,11 +1143,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_AU=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_auth.obj" "$(INTDIR)\mod_auth.sbr" : $(SOURCE) $(DEP_CPP_MOD_AU)\ @@ -1211,11 +1192,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_AUT=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_autoindex.obj" "$(INTDIR)\mod_autoindex.sbr" : $(SOURCE)\ @@ -1267,11 +1243,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_C=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_cgi.obj" "$(INTDIR)\mod_cgi.sbr" : $(SOURCE) $(DEP_CPP_MOD_C)\ @@ -1321,11 +1292,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_D=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_dir.obj" "$(INTDIR)\mod_dir.sbr" : $(SOURCE) $(DEP_CPP_MOD_D)\ @@ -1363,11 +1329,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_DL=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_dll.obj" "$(INTDIR)\mod_dll.sbr" : $(SOURCE) $(DEP_CPP_MOD_DL)\ @@ -1405,11 +1366,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_E=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_env.obj" "$(INTDIR)\mod_env.sbr" : $(SOURCE) $(DEP_CPP_MOD_E)\ @@ -1459,11 +1415,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_I=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_imap.obj" "$(INTDIR)\mod_imap.sbr" : $(SOURCE) $(DEP_CPP_MOD_I)\ @@ -1513,13 +1464,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_IN=\ - ".\core\sfio.h"\ - ".\modules\standard\config.h"\ - ".\modules\standard\modules\perl\mod_perl.h"\ "$(INTDIR)\mod_include.obj" "$(INTDIR)\mod_include.sbr" : $(SOURCE)\ @@ -1567,11 +1511,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_IS=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_isapi.obj" "$(INTDIR)\mod_isapi.sbr" : $(SOURCE)\ @@ -1611,11 +1550,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_L=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_log_config.obj" "$(INTDIR)\mod_log_config.sbr" : $(SOURCE)\ @@ -1655,11 +1589,6 @@ ".\modules\standard\mod_mime.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_M=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_mime.obj" "$(INTDIR)\mod_mime.sbr" : $(SOURCE) $(DEP_CPP_MOD_M)\ @@ -1705,11 +1634,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_N=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_negotiation.obj" "$(INTDIR)\mod_negotiation.sbr" : $(SOURCE)\ @@ -1751,11 +1675,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_S=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_setenvif.obj" "$(INTDIR)\mod_setenvif.sbr" : $(SOURCE)\ @@ -1793,11 +1712,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MOD_U=\ - ".\core\sfio.h"\ "$(INTDIR)\mod_userdir.obj" "$(INTDIR)\mod_userdir.sbr" : $(SOURCE)\ @@ -1835,11 +1749,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_MODUL=\ - ".\core\sfio.h"\ "$(INTDIR)\modules.obj" "$(INTDIR)\modules.sbr" : $(SOURCE) $(DEP_CPP_MODUL)\ @@ -1850,28 +1759,21 @@ !ENDIF SOURCE=.\os\win32\multithread.c - -!IF "$(CFG)" == "ApacheCore - Win32 Release" - DEP_CPP_MULTI=\ ".\core\conf.h"\ ".\core\multithread.h"\ ".\regex\regex.h"\ +!IF "$(CFG)" == "ApacheCore - Win32 Release" + + "$(INTDIR)\multithread.obj" : $(SOURCE) $(DEP_CPP_MULTI) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "ApacheCore - Win32 Debug" -DEP_CPP_MULTI=\ - ".\core\conf.h"\ - ".\core\multithread.h"\ - ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - "$(INTDIR)\multithread.obj" "$(INTDIR)\multithread.sbr" : $(SOURCE)\ $(DEP_CPP_MULTI) "$(INTDIR)" @@ -1881,23 +1783,19 @@ !ENDIF SOURCE=.\os\win32\readdir.c - -!IF "$(CFG)" == "ApacheCore - Win32 Release" - DEP_CPP_READD=\ ".\os\win32\readdir.h"\ +!IF "$(CFG)" == "ApacheCore - Win32 Release" + + "$(INTDIR)\readdir.obj" : $(SOURCE) $(DEP_CPP_READD) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "ApacheCore - Win32 Debug" -DEP_CPP_READD=\ - ".\os\win32\readdir.h"\ - {$(INCLUDE)}"sys\types.h"\ - "$(INTDIR)\readdir.obj" "$(INTDIR)\readdir.sbr" : $(SOURCE) $(DEP_CPP_READD)\ "$(INTDIR)" @@ -1938,11 +1836,6 @@ ".\core\rfc1413.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_RFC14=\ - ".\core\sfio.h"\ "$(INTDIR)\rfc1413.obj" "$(INTDIR)\rfc1413.sbr" : $(SOURCE) $(DEP_CPP_RFC14)\ @@ -1953,9 +1846,6 @@ !ENDIF SOURCE=.\os\win32\service.c - -!IF "$(CFG)" == "ApacheCore - Win32 Release" - DEP_CPP_SERVI=\ ".\core\conf.h"\ ".\core\multithread.h"\ @@ -1963,20 +1853,15 @@ ".\regex\regex.h"\ +!IF "$(CFG)" == "ApacheCore - Win32 Release" + + "$(INTDIR)\service.obj" : $(SOURCE) $(DEP_CPP_SERVI) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "ApacheCore - Win32 Debug" -DEP_CPP_SERVI=\ - ".\core\conf.h"\ - ".\core\multithread.h"\ - ".\os\win32\service.h"\ - ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - "$(INTDIR)\service.obj" "$(INTDIR)\service.sbr" : $(SOURCE) $(DEP_CPP_SERVI)\ "$(INTDIR)" @@ -2013,11 +1898,6 @@ ".\core\httpd.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_UTIL_=\ - ".\core\sfio.h"\ "$(INTDIR)\util.obj" "$(INTDIR)\util.sbr" : $(SOURCE) $(DEP_CPP_UTIL_)\ @@ -2028,28 +1908,21 @@ !ENDIF SOURCE=.\core\util_date.c - -!IF "$(CFG)" == "ApacheCore - Win32 Release" - DEP_CPP_UTIL_D=\ ".\core\conf.h"\ ".\core\util_date.h"\ ".\regex\regex.h"\ +!IF "$(CFG)" == "ApacheCore - Win32 Release" + + "$(INTDIR)\util_date.obj" : $(SOURCE) $(DEP_CPP_UTIL_D) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "ApacheCore - Win32 Debug" -DEP_CPP_UTIL_D=\ - ".\core\conf.h"\ - ".\core\util_date.h"\ - ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - "$(INTDIR)\util_date.obj" "$(INTDIR)\util_date.sbr" : $(SOURCE)\ $(DEP_CPP_UTIL_D) "$(INTDIR)" @@ -2088,11 +1961,6 @@ ".\core\util_md5.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_UTIL_M=\ - ".\core\sfio.h"\ "$(INTDIR)\util_md5.obj" "$(INTDIR)\util_md5.sbr" : $(SOURCE) $(DEP_CPP_UTIL_M)\ @@ -2144,11 +2012,6 @@ ".\core\util_script.h"\ ".\os\win32\readdir.h"\ ".\regex\regex.h"\ - {$(INCLUDE)}"sys\stat.h"\ - {$(INCLUDE)}"sys\types.h"\ - -NODEP_CPP_UTIL_S=\ - ".\core\sfio.h"\ "$(INTDIR)\util_script.obj" "$(INTDIR)\util_script.sbr" : $(SOURCE)\ @@ -2159,29 +2022,63 @@ !ENDIF SOURCE=.\core\util_snprintf.c - -!IF "$(CFG)" == "ApacheCore - Win32 Release" - DEP_CPP_UTIL_SN=\ ".\core\conf.h"\ ".\regex\regex.h"\ +!IF "$(CFG)" == "ApacheCore - Win32 Release" + + "$(INTDIR)\util_snprintf.obj" : $(SOURCE) $(DEP_CPP_UTIL_SN) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ELSEIF "$(CFG)" == "ApacheCore - Win32 Debug" -DEP_CPP_UTIL_SN=\ + +"$(INTDIR)\util_snprintf.obj" "$(INTDIR)\util_snprintf.sbr" : $(SOURCE)\ + $(DEP_CPP_UTIL_SN) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE=.\os\win32\util_win32.c + +!IF "$(CFG)" == "ApacheCore - Win32 Release" + +DEP_CPP_UTIL_W=\ + ".\core\alloc.h"\ + ".\core\buff.h"\ ".\core\conf.h"\ + ".\core\httpd.h"\ + ".\os\win32\readdir.h"\ ".\regex\regex.h"\ {$(INCLUDE)}"sys\stat.h"\ {$(INCLUDE)}"sys\types.h"\ +NODEP_CPP_UTIL_W=\ + ".\core\sfio.h"\ + -"$(INTDIR)\util_snprintf.obj" "$(INTDIR)\util_snprintf.sbr" : $(SOURCE)\ - $(DEP_CPP_UTIL_SN) "$(INTDIR)" +"$(INTDIR)\util_win32.obj" : $(SOURCE) $(DEP_CPP_UTIL_W) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "ApacheCore - Win32 Debug" + +DEP_CPP_UTIL_W=\ + ".\core\alloc.h"\ + ".\core\buff.h"\ + ".\core\conf.h"\ + ".\core\httpd.h"\ + ".\os\win32\readdir.h"\ + ".\regex\regex.h"\ + + +"$(INTDIR)\util_win32.obj" "$(INTDIR)\util_win32.sbr" : $(SOURCE)\ + $(DEP_CPP_UTIL_W) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) 1.126 +1 -0 apachen/src/core/conf.h Index: conf.h =================================================================== RCS file: /export/home/cvs/apachen/src/core/conf.h,v retrieving revision 1.125 retrieving revision 1.126 diff -u -r1.125 -r1.126 --- conf.h 1997/08/18 07:19:34 1.125 +++ conf.h 1997/08/18 10:59:03 1.126 @@ -574,6 +574,7 @@ #define USE_LONGJMP #define HAVE_MMAP #define MULTITHREAD +#define HAVE_CANONICAL_FILENAME typedef int uid_t; typedef int gid_t; typedef int pid_t; 1.77 +5 -1 apachen/src/core/http_request.c Index: http_request.c =================================================================== RCS file: /export/home/cvs/apachen/src/core/http_request.c,v retrieving revision 1.76 retrieving revision 1.77 diff -u -r1.76 -r1.77 --- http_request.c 1997/08/18 07:17:26 1.76 +++ http_request.c 1997/08/18 10:59:04 1.77 @@ -249,7 +249,7 @@ void *per_dir_defaults = r->server->lookup_defaults; void **sec = (void **)sconf->sec->elts; int num_sec = sconf->sec->nelts; - char *test_filename = pstrdup (r->pool, r->filename); + char *test_filename; char *test_dirname; int res; unsigned i,num_dirs; @@ -268,6 +268,10 @@ return OK; } + + /* FIX ME: this is disgusting - Ben */ + r->filename = os_canonical_filename(r->pool, r->filename); + test_filename = pstrdup(r->pool, r->filename); /* Go down the directory hierarchy. Where we have to check for symlinks, * do so. Where a .htaccess file has permission to override anything, 1.140 +6 -0 apachen/src/core/httpd.h Index: httpd.h =================================================================== RCS file: /export/home/cvs/apachen/src/core/httpd.h,v retrieving revision 1.139 retrieving revision 1.140 diff -u -r1.139 -r1.140 --- httpd.h 1997/08/17 11:40:13 1.139 +++ httpd.h 1997/08/18 10:59:04 1.140 @@ -830,6 +830,12 @@ API_EXPORT(int) is_directory(const char *name); API_EXPORT(int) can_exec(const struct stat *); API_EXPORT(void) chdir_file(const char *file); + +#ifndef HAVE_CANONICAL_FILENAME +#define os_canonical_filename(p,f) pstrdup(p,f) +#endif + +API_EXPORT(char *)os_canonical_filename(pool *p,const char *file); char *get_local_host(pool *); unsigned long get_virthost_addr (const char *hostname, unsigned short *port); 1.1 apachen/src/os/win32/util_win32.c Index: util_win32.c =================================================================== #include #include #include "httpd.h" static void sub_canonical_filename(char *szCanon,const char *szFile) { char buf[_MAX_PATH]; int n; char *szFilePart; WIN32_FIND_DATA d; HANDLE h; n=GetFullPathName(szFile,sizeof buf,buf,&szFilePart); assert(n); assert(n < sizeof buf); if(!strchr(buf,'*') && !strchr(buf,'?')) { h=FindFirstFile(buf,&d); if(h != INVALID_HANDLE_VALUE) FindClose(h); } else h=INVALID_HANDLE_VALUE; if(szFilePart < buf+3) { strcpy(szCanon,buf); szCanon[2]='/'; return; } if(szFilePart != buf+3) { char b2[_MAX_PATH]; assert(szFilePart > buf+3); szFilePart[-1]='\0'; sub_canonical_filename(b2,buf); strcpy(szCanon,b2); strcat(szCanon,"/"); } else { strcpy(szCanon,buf); szCanon[2]='/'; szCanon[3]='\0'; } if(h == INVALID_HANDLE_VALUE) strcat(szCanon,szFilePart); else strcat(szCanon,d.cFileName); } API_EXPORT(char *) os_canonical_filename(pool *pPool,const char *szFile) { char buf[_MAX_PATH]; sub_canonical_filename(buf,szFile); strlwr(buf); return pstrdup(pPool,buf); }