mirror of
https://github.com/reactos/reactos.git
synced 2024-07-13 16:15:05 +00:00
- Sync RegGetValueA/W with wine head
svn path=/trunk/; revision=35143
This commit is contained in:
parent
2a31d8815d
commit
77993cf0e3
|
@ -1831,7 +1831,11 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
hKey, debugstr_w(pszSubKey), debugstr_w(pszValue), dwFlags, pdwType,
|
hKey, debugstr_w(pszSubKey), debugstr_w(pszValue), dwFlags, pdwType,
|
||||||
pvData, pcbData, cbData);
|
pvData, pcbData, cbData);
|
||||||
|
|
||||||
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND))
|
if (pvData && !pcbData)
|
||||||
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) &&
|
||||||
|
((dwFlags & RRF_RT_ANY) != RRF_RT_ANY))
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
if (pszSubKey && pszSubKey[0])
|
if (pszSubKey && pszSubKey[0])
|
||||||
|
@ -1849,7 +1853,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
(dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND)))
|
(dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND)))
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf);
|
HeapFree(GetProcessHeap(), 0, pvBuf);
|
||||||
|
|
||||||
pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData);
|
pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData);
|
||||||
if (!pvBuf)
|
if (!pvBuf)
|
||||||
|
@ -1858,7 +1862,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == ERROR_MORE_DATA)
|
if (ret == ERROR_MORE_DATA || !pvData)
|
||||||
ret = RegQueryValueExW(hKey, pszValue, NULL,
|
ret = RegQueryValueExW(hKey, pszValue, NULL,
|
||||||
&dwType, pvBuf, &cbData);
|
&dwType, pvBuf, &cbData);
|
||||||
else
|
else
|
||||||
|
@ -1876,19 +1880,20 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
|
|
||||||
if (ret == ERROR_SUCCESS)
|
if (ret == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
|
/* Recheck dwType in case it changed since the first call */
|
||||||
if (dwType == REG_EXPAND_SZ)
|
if (dwType == REG_EXPAND_SZ)
|
||||||
{
|
{
|
||||||
cbData = ExpandEnvironmentStringsW(pvBuf, pvData,
|
cbData = ExpandEnvironmentStringsW(pvBuf, pvData,
|
||||||
pcbData ? *pcbData : 0);
|
pcbData ? *pcbData : 0) * sizeof(WCHAR);
|
||||||
dwType = REG_SZ;
|
dwType = REG_SZ;
|
||||||
if(pcbData && cbData > *pcbData)
|
if(pvData && pcbData && cbData > *pcbData)
|
||||||
ret = ERROR_MORE_DATA;
|
ret = ERROR_MORE_DATA;
|
||||||
}
|
}
|
||||||
else if (pcbData)
|
else if (pvData)
|
||||||
CopyMemory(pvData, pvBuf, *pcbData);
|
CopyMemory(pvData, pvBuf, *pcbData);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf);
|
HeapFree(GetProcessHeap(), 0, pvBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pszSubKey && pszSubKey[0])
|
if (pszSubKey && pszSubKey[0])
|
||||||
|
@ -1896,7 +1901,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
|
|
||||||
RegpApplyRestrictions(dwFlags, dwType, cbData, &ret);
|
RegpApplyRestrictions(dwFlags, dwType, cbData, &ret);
|
||||||
|
|
||||||
if (pcbData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE))
|
if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE))
|
||||||
ZeroMemory(pvData, *pcbData);
|
ZeroMemory(pvData, *pcbData);
|
||||||
|
|
||||||
if (pdwType) *pdwType = dwType;
|
if (pdwType) *pdwType = dwType;
|
||||||
|
@ -1924,7 +1929,11 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
|
||||||
hKey, pszSubKey, pszValue, dwFlags, pdwType, pvData, pcbData,
|
hKey, pszSubKey, pszValue, dwFlags, pdwType, pvData, pcbData,
|
||||||
cbData);
|
cbData);
|
||||||
|
|
||||||
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND))
|
if (pvData && !pcbData)
|
||||||
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) &&
|
||||||
|
((dwFlags & RRF_RT_ANY) != RRF_RT_ANY))
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
if (pszSubKey && pszSubKey[0])
|
if (pszSubKey && pszSubKey[0])
|
||||||
|
@ -1942,7 +1951,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
|
||||||
(dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND)))
|
(dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND)))
|
||||||
{
|
{
|
||||||
do {
|
do {
|
||||||
if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf);
|
HeapFree(GetProcessHeap(), 0, pvBuf);
|
||||||
|
|
||||||
pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData);
|
pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData);
|
||||||
if (!pvBuf)
|
if (!pvBuf)
|
||||||
|
@ -1951,7 +1960,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == ERROR_MORE_DATA)
|
if (ret == ERROR_MORE_DATA || !pvData)
|
||||||
ret = RegQueryValueExA(hKey, pszValue, NULL,
|
ret = RegQueryValueExA(hKey, pszValue, NULL,
|
||||||
&dwType, pvBuf, &cbData);
|
&dwType, pvBuf, &cbData);
|
||||||
else
|
else
|
||||||
|
@ -1969,19 +1978,20 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
|
||||||
|
|
||||||
if (ret == ERROR_SUCCESS)
|
if (ret == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
|
/* Recheck dwType in case it changed since the first call */
|
||||||
if (dwType == REG_EXPAND_SZ)
|
if (dwType == REG_EXPAND_SZ)
|
||||||
{
|
{
|
||||||
cbData = ExpandEnvironmentStringsA(pvBuf, pvData,
|
cbData = ExpandEnvironmentStringsA(pvBuf, pvData,
|
||||||
pcbData ? *pcbData : 0);
|
pcbData ? *pcbData : 0);
|
||||||
dwType = REG_SZ;
|
dwType = REG_SZ;
|
||||||
if(pcbData && cbData > *pcbData)
|
if(pvData && pcbData && cbData > *pcbData)
|
||||||
ret = ERROR_MORE_DATA;
|
ret = ERROR_MORE_DATA;
|
||||||
}
|
}
|
||||||
else if (pcbData)
|
else if (pvData)
|
||||||
CopyMemory(pvData, pvBuf, *pcbData);
|
CopyMemory(pvData, pvBuf, *pcbData);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf);
|
HeapFree(GetProcessHeap(), 0, pvBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pszSubKey && pszSubKey[0])
|
if (pszSubKey && pszSubKey[0])
|
||||||
|
@ -1989,7 +1999,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
|
||||||
|
|
||||||
RegpApplyRestrictions(dwFlags, dwType, cbData, &ret);
|
RegpApplyRestrictions(dwFlags, dwType, cbData, &ret);
|
||||||
|
|
||||||
if (pcbData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE))
|
if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE))
|
||||||
ZeroMemory(pvData, *pcbData);
|
ZeroMemory(pvData, *pcbData);
|
||||||
|
|
||||||
if (pdwType) *pdwType = dwType;
|
if (pdwType) *pdwType = dwType;
|
||||||
|
|
Loading…
Reference in a new issue