From: Stanislav Malyshev Date: Tue, 16 Mar 2004 18:27:55 +0000 (+0000) Subject: MFH registry fixes: X-Git-Tag: php-4.3.5RC4~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a207ace664727b39e966d1b292a42c67a6d37910;p=php MFH registry fixes: fix off-by-one in registry per-dir values add IniFilePath value for setting php.ini path via registry --- diff --git a/win32/php_registry.h b/win32/php_registry.h index fe7c1fddd5..2b111dbb8b 100644 --- a/win32/php_registry.h +++ b/win32/php_registry.h @@ -3,5 +3,6 @@ void UpdateIniFromRegistry(char *path TSRMLS_DC); +char *GetIniPathFromRegistry(); #endif /* PHP_REGISTRY_H */ diff --git a/win32/registry.c b/win32/registry.c index 06e6bc0548..c9f419afa5 100644 --- a/win32/registry.c +++ b/win32/registry.c @@ -1,13 +1,15 @@ #include "php.h" #include "php_ini.h" +#define PHP_REGISTRY_KEY "SOFTWARE\\PHP" + void UpdateIniFromRegistry(char *path TSRMLS_DC) { char *p, *orig_path; HKEY MainKey; char *strtok_buf = NULL; - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\PHP\\Per Directory Values", 0, KEY_READ, &MainKey)!=ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, PHP_REGISTRY_KEY "\\Per Directory Values", 0, KEY_READ, &MainKey)!=ERROR_SUCCESS) { return; } @@ -70,7 +72,8 @@ void UpdateIniFromRegistry(char *path TSRMLS_DC) RegEnumValue(hKey, i, namebuf, &namebuf_len, NULL, &lType, valuebuf, &valuebuf_len); if ((lType == REG_SZ) || (lType == REG_EXPAND_SZ)) { - zend_alter_ini_entry(namebuf, namebuf_len + 1, valuebuf, valuebuf_len, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); + /* valuebuf_len includes terminating 0 */ + zend_alter_ini_entry(namebuf, namebuf_len + 1, valuebuf, valuebuf_len?valuebuf_len-1:0, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); } i++; @@ -86,3 +89,23 @@ void UpdateIniFromRegistry(char *path TSRMLS_DC) RegCloseKey(MainKey); efree(orig_path); } + +#define PHPRC_REGISTRY_NAME "IniFilePath" + +char *GetIniPathFromRegistry() +{ + char *reg_location = NULL; + HKEY hKey; + + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, PHP_REGISTRY_KEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + DWORD buflen = MAXPATHLEN; + reg_location = emalloc(MAXPATHLEN+1); + if(RegQueryValueEx(hKey, PHPRC_REGISTRY_NAME, 0, NULL, reg_location, &buflen) != ERROR_SUCCESS) { + efree(reg_location); + reg_location = NULL; + return reg_location; + } + RegCloseKey(hKey); + } + return reg_location; +}