pajoye Fri Jan 16 10:02:50 2009 UTC Modified files: /php-src/main win32_internal_function_disabled.h main.c Log: MFB: - add EG(windows_version_info), set at init time once per instance contains a OSVERSIONINFOEX struct. It lets us determine easily on which windows version is used (for example) - [DOC] add the ability to disable a function when the windows function does not support a feature (for example symlink) - [DOC] symlink, hardlink & co support (1/3) http://cvs.php.net/viewvc.cgi/php-src/main/win32_internal_function_disabled.h?r1=1.1&r2=1.2&diff_format=u Index: php-src/main/win32_internal_function_disabled.h diff -u /dev/null php-src/main/win32_internal_function_disabled.h:1.2 --- /dev/null Fri Jan 16 10:02:50 2009 +++ php-src/main/win32_internal_function_disabled.h Fri Jan 16 10:02:50 2009 @@ -0,0 +1,25 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2009 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | lice...@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Pierre A. Joye <pie...@php.net> | + +----------------------------------------------------------------------+ + */ + +/* $Id: win32_internal_function_disabled.h,v 1.2 2009/01/16 10:02:50 pajoye Exp $ */ + +/* 5 means the min version is 5 (XP/2000), 6 (2k8/vista), etc. */ +static const char *function_name_5[] = {"link", NULL}; +const int function_name_cnt_5 = 1; +static const char *function_name_6[] = {"readlink", "symlink", NULL}; +const int function_name_cnt_6 = 2; http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.788&r2=1.789&diff_format=u Index: php-src/main/main.c diff -u php-src/main/main.c:1.788 php-src/main/main.c:1.789 --- php-src/main/main.c:1.788 Fri Jan 9 15:00:36 2009 +++ php-src/main/main.c Fri Jan 16 10:02:50 2009 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.788 2009/01/09 15:00:36 iliaa Exp $ */ +/* $Id: main.c,v 1.789 2009/01/16 10:02:50 pajoye Exp $ */ /* {{{ includes */ @@ -99,6 +99,33 @@ PHPAPI int core_globals_id; #endif +#ifdef PHP_WIN32 +#include "win32_internal_function_disabled.h" + +static php_win32_disable_functions() { + int i; + TSRMLS_FETCH(); + + if (EG(windows_version_info).dwMajorVersion < 5) { + for (i = 0; i < function_name_cnt_5; i++) { + if (zend_hash_del(CG(function_table), function_name_5[i], strlen(function_name_5[i]) + 1)==FAILURE) { + php_printf("Unable to disable function '%s'\n", function_name_5[i]); + return FAILURE; + } + } + } + + if (EG(windows_version_info).dwMajorVersion < 6) { + for (i = 0; i < function_name_cnt_6; i++) { + if (zend_hash_del(CG(function_table), function_name_6[i], strlen(function_name_6[i]) + 1)==FAILURE) { + php_printf("Unable to disable function '%s'\n", function_name_6[i]); + return FAILURE; + } + } + } +} +#endif + #define SAFE_FILENAME(f) ((f)?(f):"-") /* {{{ PHP_INI_MH @@ -1788,6 +1815,9 @@ #ifdef ZTS zend_executor_globals *executor_globals; void ***tsrm_ls; +#ifdef PHP_WIN32 + DWORD dwVersion = GetVersion(); +#endif php_core_globals *core_globals; #endif @@ -1796,16 +1826,12 @@ WSADATA wsaData; #endif #ifdef PHP_WIN32 - { - DWORD dwVersion = GetVersion(); - /* Get build numbers for Windows NT or Win95 */ if (dwVersion < 0x80000000){ php_os="WINNT"; } else { php_os="WIN32"; } - } #if defined(_MSC_VER) && (_MSC_VER >= 1400) old_invalid_parameter_handler = _set_invalid_parameter_handler(dummy_invalid_parameter_handler); @@ -1862,6 +1888,18 @@ #endif gc_globals_ctor(TSRMLS_C); +#ifdef PHP_WIN32 + { + OSVERSIONINFOEX *osvi = &EG(windows_version_info); + + ZeroMemory(osvi, sizeof(OSVERSIONINFOEX)); + osvi->dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + if( !GetVersionEx((OSVERSIONINFO *) osvi)) { + php_printf("\nGetVersionEx unusable. %d\n", GetLastError()); + return FAILURE; + } + } +#endif EG(bailout) = NULL; EG(error_reporting) = E_ALL & ~E_NOTICE; @@ -2050,6 +2088,10 @@ module->info_func = PHP_MINFO(php_core); } +#ifdef PHP_WIN32 + /* Disable incompatible functions for the running platform */ + php_win32_disable_functions(); +#endif zend_post_startup(TSRMLS_C); module_initialized = 1;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php