cvs: php-src /main reentrancy.c /win32 readdir.c readdir.h TSRM readdir.h

From: Date: Fri, 10 Nov 2006 11:20:58 +0000
Subject: cvs: php-src /main reentrancy.c /win32 readdir.c readdir.h TSRM readdir.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-41443@lists.php.net to get a copy of this message
dmitry Fri Nov 10 11:20:58 2006 UTC Modified files: /php-src/win32 readdir.c readdir.h /TSRM readdir.h /php-src/main reentrancy.c Log: opendir() is reimplemented using GetFistFile/GetNextFile those are faster then _findfirst/_findnext http://cvs.php.net/viewvc.cgi/php-src/win32/readdir.c?r1=1.11&r2=1.12&diff_format=u Index: php-src/win32/readdir.c diff -u php-src/win32/readdir.c:1.11 php-src/win32/readdir.c:1.12 --- php-src/win32/readdir.c:1.11 Wed Jun 9 14:18:14 2004 +++ php-src/win32/readdir.c Fri Nov 10 11:20:58 2006 @@ -2,8 +2,8 @@ #include <string.h> #include <errno.h> -#include "readdir.h" #include "php.h" +#include "readdir.h" /********************************************************************** * Implement dirent-style opendir/readdir/rewinddir/closedir on Win32 @@ -23,14 +23,14 @@ { DIR *dp; char *filespec; - long handle; + HANDLE handle; int index; - filespec = malloc(strlen(dir) + 2 + 1); + filespec = (char *)malloc(strlen(dir) + 2 + 1); strcpy(filespec, dir); index = strlen(filespec) - 1; if (index >= 0 && (filespec[index] == '/' || - (filespec[index] == '\\' && !IsDBCSLeadByte(filespec[index-1])))) + (filespec[index] == '\\' && (index == 0 || !IsDBCSLeadByte(filespec[index-1]))))) filespec[index] = '\0'; strcat(filespec, "/*"); @@ -38,8 +38,9 @@ dp->offset = 0; dp->finished = 0; - if ((handle = _findfirst(filespec, &(dp->fileinfo))) < 0) { - if (errno == ENOENT) { + if ((handle = FindFirstFile(filespec, &(dp->fileinfo))) == INVALID_HANDLE_VALUE) { + DWORD err = GetLastError(); + if (err == ERROR_NO_MORE_FILES) { dp->finished = 1; } else { free(dp); @@ -60,14 +61,14 @@ return NULL; if (dp->offset != 0) { - if (_findnext(dp->handle, &(dp->fileinfo)) < 0) { + if (FindNextFile(dp->handle, &(dp->fileinfo)) == 0) { dp->finished = 1; return NULL; } } dp->offset++; - strlcpy(dp->dent.d_name, dp->fileinfo.name, _MAX_FNAME+1); + strlcpy(dp->dent.d_name, dp->fileinfo.cFileName, _MAX_FNAME+1); dp->dent.d_ino = 1; dp->dent.d_reclen = strlen(dp->dent.d_name); dp->dent.d_off = dp->offset; @@ -83,7 +84,7 @@ } if (dp->offset != 0) { - if (_findnext(dp->handle, &(dp->fileinfo)) < 0) { + if (FindNextFile(dp->handle, &(dp->fileinfo)) == 0) { dp->finished = 1; *result = NULL; return 0; @@ -91,7 +92,7 @@ } dp->offset++; - strlcpy(dp->dent.d_name, dp->fileinfo.name, _MAX_FNAME+1); + strlcpy(dp->dent.d_name, dp->fileinfo.cFileName, _MAX_FNAME+1); dp->dent.d_ino = 1; dp->dent.d_reclen = strlen(dp->dent.d_name); dp->dent.d_off = dp->offset; @@ -107,7 +108,7 @@ { if (!dp) return 0; - _findclose(dp->handle); + FindClose(dp->handle); if (dp->dir) free(dp->dir); if (dp) @@ -120,27 +121,28 @@ { /* Re-set to the beginning */ char *filespec; - long handle; + HANDLE handle; int index; - _findclose(dp->handle); + FindClose(dp->handle); dp->offset = 0; dp->finished = 0; - filespec = malloc(strlen(dp->dir) + 2 + 1); + filespec = (char *)malloc(strlen(dp->dir) + 2 + 1); strcpy(filespec, dp->dir); index = strlen(filespec) - 1; - if (index >= 0 && (filespec[index] == '/' || filespec[index] == '\\')) + if (index >= 0 && (filespec[index] == '/' || + (filespec[index] == '\\' && (index == 0 || !IsDBCSLeadByte(filespec[index-1]))))) filespec[index] = '\0'; strcat(filespec, "/*"); - if ((handle = _findfirst(filespec, &(dp->fileinfo))) < 0) { - if (errno == ENOENT) - dp->finished = 1; - } + if ((handle = FindFirstFile(filespec, &(dp->fileinfo))) == INVALID_HANDLE_VALUE) { + dp->finished = 1; + } + dp->handle = handle; free(filespec); -return 0; + return 0; } http://cvs.php.net/viewvc.cgi/php-src/win32/readdir.h?r1=1.8&r2=1.9&diff_format=u Index: php-src/win32/readdir.h diff -u php-src/win32/readdir.h:1.8 php-src/win32/readdir.h:1.9 --- php-src/win32/readdir.h:1.8 Mon Jan 27 20:39:30 2003 +++ php-src/win32/readdir.h Fri Nov 10 11:20:58 2006 @@ -7,11 +7,15 @@ * on Windows 95/NT. */ +#define _WIN32_WINNT 0x0400 + +#include <windows.h> + #include <io.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> - +#include <direct.h> /* struct dirent - same as Unix */ @@ -25,10 +29,10 @@ /* typedef DIR - not the same as Unix */ typedef struct { - long handle; /* _findfirst/_findnext handle */ + HANDLE handle; /* _findfirst/_findnext handle */ short offset; /* offset into directory */ short finished; /* 1 if there are not more files */ - struct _finddata_t fileinfo; /* from _findfirst/_findnext */ + WIN32_FIND_DATA fileinfo; /* from _findfirst/_findnext */ char *dir; /* the dir we are reading */ struct dirent dent; /* the dirent to return */ } DIR; http://cvs.php.net/viewvc.cgi/TSRM/readdir.h?r1=1.1&r2=1.2&diff_format=u Index: TSRM/readdir.h diff -u TSRM/readdir.h:1.1 TSRM/readdir.h:1.2 --- TSRM/readdir.h:1.1 Sun Sep 3 18:47:35 2000 +++ TSRM/readdir.h Fri Nov 10 11:20:58 2006 @@ -7,11 +7,15 @@ * on Windows 95/NT. */ +#define _WIN32_WINNT 0x0400 + +#include <windows.h> + #include <io.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> - +#include <direct.h> /* struct dirent - same as Unix */ @@ -25,10 +29,10 @@ /* typedef DIR - not the same as Unix */ typedef struct { - long handle; /* _findfirst/_findnext handle */ + HANDLE handle; /* _findfirst/_findnext handle */ short offset; /* offset into directory */ short finished; /* 1 if there are not more files */ - struct _finddata_t fileinfo; /* from _findfirst/_findnext */ + WIN32_FIND_DATA fileinfo; /* from _findfirst/_findnext */ char *dir; /* the dir we are reading */ struct dirent dent; /* the dirent to return */ } DIR; @@ -38,7 +42,6 @@ struct dirent *readdir(DIR *); int readdir_r(DIR *, struct dirent *, struct dirent **); int closedir(DIR *); -void rewinddir(DIR *); - +int rewinddir(DIR *); #endif /* READDIR_H */ http://cvs.php.net/viewvc.cgi/php-src/main/reentrancy.c?r1=1.44&r2=1.45&diff_format=u Index: php-src/main/reentrancy.c diff -u php-src/main/reentrancy.c:1.44 php-src/main/reentrancy.c:1.45 --- php-src/main/reentrancy.c:1.44 Sun Jan 1 13:09:57 2006 +++ php-src/main/reentrancy.c Fri Nov 10 11:20:58 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: reentrancy.c,v 1.44 2006/01/01 13:09:57 sniper Exp $ */ +/* $Id: reentrancy.c,v 1.45 2006/11/10 11:20:58 dmitry Exp $ */ #include <sys/types.h> #include <string.h> @@ -25,10 +25,6 @@ #include <dirent.h> #endif -#ifdef PHP_WIN32 -#include "win32/readdir.h" -#endif - #include "php_reentrancy.h" #include "ext/standard/php_rand.h" /* for PHP_RAND_MAX */

« previous php.cvs (#41443) next »