mirror of
https://github.com/reactos/reactos.git
synced 2025-01-03 21:09:19 +00:00
[SHLWAPI] Sync with Wine Staging 1.7.37. CORE-9246
svn path=/trunk/; revision=67398
This commit is contained in:
parent
65a3bbb546
commit
feb215f7d1
6 changed files with 70 additions and 48 deletions
|
@ -661,7 +661,7 @@ BOOL WINAPI SetupDiBuildClassInfoList(
|
||||||
* SetupDiBuildClassInfoListExA (SETUPAPI.@)
|
* SetupDiBuildClassInfoListExA (SETUPAPI.@)
|
||||||
*
|
*
|
||||||
* Returns a list of setup class GUIDs that identify the classes
|
* Returns a list of setup class GUIDs that identify the classes
|
||||||
* that are installed on a local or remote macine.
|
* that are installed on a local or remote machine.
|
||||||
*
|
*
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* Flags [I] control exclusion of classes from the list.
|
* Flags [I] control exclusion of classes from the list.
|
||||||
|
@ -708,7 +708,7 @@ BOOL WINAPI SetupDiBuildClassInfoListExA(
|
||||||
* SetupDiBuildClassInfoListExW (SETUPAPI.@)
|
* SetupDiBuildClassInfoListExW (SETUPAPI.@)
|
||||||
*
|
*
|
||||||
* Returns a list of setup class GUIDs that identify the classes
|
* Returns a list of setup class GUIDs that identify the classes
|
||||||
* that are installed on a local or remote macine.
|
* that are installed on a local or remote machine.
|
||||||
*
|
*
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* Flags [I] control exclusion of classes from the list.
|
* Flags [I] control exclusion of classes from the list.
|
||||||
|
@ -1258,7 +1258,7 @@ SetupDiCreateDeviceInfoListExA(const GUID *ClassGuid,
|
||||||
* Create an empty DeviceInfoSet list.
|
* Create an empty DeviceInfoSet list.
|
||||||
*
|
*
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* ClassGuid [I] if not NULL only devices with GUID ClcassGuid are associated
|
* ClassGuid [I] if not NULL only devices with GUID ClassGuid are associated
|
||||||
* with this list.
|
* with this list.
|
||||||
* hwndParent [I] hwnd needed for interface related actions.
|
* hwndParent [I] hwnd needed for interface related actions.
|
||||||
* MachineName [I] name of machine to create emtpy DeviceInfoSet list, if NULL
|
* MachineName [I] name of machine to create emtpy DeviceInfoSet list, if NULL
|
||||||
|
|
|
@ -431,7 +431,7 @@ exit:
|
||||||
* Success: S_OK. langbuf is set to the language string found.
|
* Success: S_OK. langbuf is set to the language string found.
|
||||||
* Failure: E_FAIL, If any arguments are invalid, error occurred, or Explorer
|
* Failure: E_FAIL, If any arguments are invalid, error occurred, or Explorer
|
||||||
* does not contain the setting.
|
* does not contain the setting.
|
||||||
* HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), If the buffer is not big enough
|
* E_NOT_SUFFICIENT_BUFFER, If the buffer is not big enough
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI GetAcceptLanguagesW( LPWSTR langbuf, LPDWORD buflen)
|
HRESULT WINAPI GetAcceptLanguagesW( LPWSTR langbuf, LPDWORD buflen)
|
||||||
{
|
{
|
||||||
|
@ -484,7 +484,7 @@ HRESULT WINAPI GetAcceptLanguagesW( LPWSTR langbuf, LPDWORD buflen)
|
||||||
}
|
}
|
||||||
|
|
||||||
*buflen = 0;
|
*buflen = 0;
|
||||||
return __HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
|
return E_NOT_SUFFICIENT_BUFFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -5032,11 +5032,8 @@ INT WINAPI SHFormatDateTimeW(const FILETIME UNALIGNED *fileTime, DWORD *flags,
|
||||||
{
|
{
|
||||||
if ((fmt_flags & FDTF_LONGDATE) && (ret < size + 2))
|
if ((fmt_flags & FDTF_LONGDATE) && (ret < size + 2))
|
||||||
{
|
{
|
||||||
if (ret < size + 2)
|
lstrcatW(&buf[ret-1], sep1);
|
||||||
{
|
ret += 2;
|
||||||
lstrcatW(&buf[ret-1], sep1);
|
|
||||||
ret += 2;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -3280,6 +3280,9 @@ HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath,
|
||||||
if (!pszUrl || !pszPath || !pcchPath || !*pcchPath)
|
if (!pszUrl || !pszPath || !pcchPath || !*pcchPath)
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
if (lstrlenW(pszUrl) < 5)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, pszUrl, 5,
|
if (CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, pszUrl, 5,
|
||||||
file_colon, 5) != CSTR_EQUAL)
|
file_colon, 5) != CSTR_EQUAL)
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
@ -3321,9 +3324,8 @@ HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath,
|
||||||
src -= 1;
|
src -= 1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, src, 9,
|
if (lstrlenW(src) >= 10 && CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE,
|
||||||
localhost, 9) == CSTR_EQUAL &&
|
src, 9, localhost, 9) == CSTR_EQUAL && (src[9] == '/' || src[9] == '\\'))
|
||||||
(src[9] == '/' || src[9] == '\\'))
|
|
||||||
{
|
{
|
||||||
/* 'file://localhost/' + escaped DOS path */
|
/* 'file://localhost/' + escaped DOS path */
|
||||||
src += 10;
|
src += 10;
|
||||||
|
@ -3835,13 +3837,13 @@ BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath)
|
||||||
WCHAR szSearch[MAX_PATH];
|
WCHAR szSearch[MAX_PATH];
|
||||||
DWORD dwLen;
|
DWORD dwLen;
|
||||||
HANDLE hfind;
|
HANDLE hfind;
|
||||||
BOOL retVal = FALSE;
|
BOOL retVal = TRUE;
|
||||||
WIN32_FIND_DATAW find_data;
|
WIN32_FIND_DATAW find_data;
|
||||||
|
|
||||||
TRACE("(%s)\n",debugstr_w(lpszPath));
|
TRACE("(%s)\n",debugstr_w(lpszPath));
|
||||||
|
|
||||||
if (!lpszPath || !PathIsDirectoryW(lpszPath))
|
if (!lpszPath || !PathIsDirectoryW(lpszPath))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
lstrcpynW(szSearch, lpszPath, MAX_PATH);
|
lstrcpynW(szSearch, lpszPath, MAX_PATH);
|
||||||
PathAddBackslashW(szSearch);
|
PathAddBackslashW(szSearch);
|
||||||
|
@ -3851,14 +3853,23 @@ BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath)
|
||||||
|
|
||||||
strcpyW(szSearch + dwLen, szAllFiles);
|
strcpyW(szSearch + dwLen, szAllFiles);
|
||||||
hfind = FindFirstFileW(szSearch, &find_data);
|
hfind = FindFirstFileW(szSearch, &find_data);
|
||||||
if (hfind != INVALID_HANDLE_VALUE)
|
if (hfind == INVALID_HANDLE_VALUE)
|
||||||
{
|
return FALSE;
|
||||||
if (find_data.cFileName[0] == '.' && find_data.cFileName[1] == '.')
|
|
||||||
/* The only directory entry should be the parent */
|
|
||||||
retVal = !FindNextFileW(hfind, &find_data);
|
|
||||||
FindClose(hfind);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (find_data.cFileName[0] == '.')
|
||||||
|
{
|
||||||
|
if (find_data.cFileName[1] == '\0') continue;
|
||||||
|
if (find_data.cFileName[1] == '.' && find_data.cFileName[2] == '\0') continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
retVal = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (FindNextFileW(hfind, &find_data));
|
||||||
|
|
||||||
|
FindClose(hfind);
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -343,7 +343,7 @@ int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* lpszStr [I] First string to compare
|
* lpszStr [I] First string to compare
|
||||||
* lpszComp [I] Second string to compare
|
* lpszComp [I] Second string to compare
|
||||||
* iLen [I] Maximum number of chars to compare.
|
* iLen [I] Number of chars to compare
|
||||||
*
|
*
|
||||||
* RETURNS
|
* RETURNS
|
||||||
* An integer less than, equal to or greater than 0, indicating that
|
* An integer less than, equal to or greater than 0, indicating that
|
||||||
|
@ -374,7 +374,7 @@ INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* lpszStr [I] First string to compare
|
* lpszStr [I] First string to compare
|
||||||
* lpszComp [I] Second string to compare
|
* lpszComp [I] Second string to compare
|
||||||
* iLen [I] Maximum number of chars to compare.
|
* iLen [I] Number of chars to compare
|
||||||
*
|
*
|
||||||
* RETURNS
|
* RETURNS
|
||||||
* An integer less than, equal to or greater than 0, indicating that
|
* An integer less than, equal to or greater than 0, indicating that
|
||||||
|
@ -541,13 +541,15 @@ static LPSTR SHLWAPI_StrStrHelperA(LPCSTR lpszStr, LPCSTR lpszSearch,
|
||||||
INT (WINAPI *pStrCmpFn)(LPCSTR,LPCSTR,INT))
|
INT (WINAPI *pStrCmpFn)(LPCSTR,LPCSTR,INT))
|
||||||
{
|
{
|
||||||
size_t iLen;
|
size_t iLen;
|
||||||
|
LPCSTR end;
|
||||||
|
|
||||||
if (!lpszStr || !lpszSearch || !*lpszSearch)
|
if (!lpszStr || !lpszSearch || !*lpszSearch)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
iLen = strlen(lpszSearch);
|
iLen = strlen(lpszSearch);
|
||||||
|
end = lpszStr + strlen(lpszStr);
|
||||||
|
|
||||||
while (*lpszStr)
|
while (lpszStr + iLen <= end)
|
||||||
{
|
{
|
||||||
if (!pStrCmpFn(lpszStr, lpszSearch, iLen))
|
if (!pStrCmpFn(lpszStr, lpszSearch, iLen))
|
||||||
return (LPSTR)lpszStr;
|
return (LPSTR)lpszStr;
|
||||||
|
@ -603,6 +605,7 @@ LPWSTR WINAPI StrStrW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
|
||||||
*/
|
*/
|
||||||
LPSTR WINAPI StrRStrIA(LPCSTR lpszStr, LPCSTR lpszEnd, LPCSTR lpszSearch)
|
LPSTR WINAPI StrRStrIA(LPCSTR lpszStr, LPCSTR lpszEnd, LPCSTR lpszSearch)
|
||||||
{
|
{
|
||||||
|
LPSTR lpszRet = NULL;
|
||||||
WORD ch1, ch2;
|
WORD ch1, ch2;
|
||||||
INT iLen;
|
INT iLen;
|
||||||
|
|
||||||
|
@ -611,28 +614,28 @@ LPSTR WINAPI StrRStrIA(LPCSTR lpszStr, LPCSTR lpszEnd, LPCSTR lpszSearch)
|
||||||
if (!lpszStr || !lpszSearch || !*lpszSearch)
|
if (!lpszStr || !lpszSearch || !*lpszSearch)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!lpszEnd)
|
|
||||||
lpszEnd = lpszStr + lstrlenA(lpszStr);
|
|
||||||
if (lpszEnd == lpszStr)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (IsDBCSLeadByte(*lpszSearch))
|
if (IsDBCSLeadByte(*lpszSearch))
|
||||||
ch1 = *lpszSearch << 8 | (UCHAR)lpszSearch[1];
|
ch1 = *lpszSearch << 8 | (UCHAR)lpszSearch[1];
|
||||||
else
|
else
|
||||||
ch1 = *lpszSearch;
|
ch1 = *lpszSearch;
|
||||||
iLen = lstrlenA(lpszSearch);
|
iLen = lstrlenA(lpszSearch);
|
||||||
|
|
||||||
do
|
if (!lpszEnd)
|
||||||
|
lpszEnd = lpszStr + lstrlenA(lpszStr);
|
||||||
|
else /* reproduce the broken behaviour on Windows */
|
||||||
|
lpszEnd += min(iLen - 1, lstrlenA(lpszEnd));
|
||||||
|
|
||||||
|
while (lpszStr + iLen <= lpszEnd && *lpszStr)
|
||||||
{
|
{
|
||||||
lpszEnd = CharPrevA(lpszStr, lpszEnd);
|
ch2 = IsDBCSLeadByte(*lpszStr)? *lpszStr << 8 | (UCHAR)lpszStr[1] : *lpszStr;
|
||||||
ch2 = IsDBCSLeadByte(*lpszEnd)? *lpszEnd << 8 | (UCHAR)lpszEnd[1] : *lpszEnd;
|
|
||||||
if (!ChrCmpIA(ch1, ch2))
|
if (!ChrCmpIA(ch1, ch2))
|
||||||
{
|
{
|
||||||
if (!StrCmpNIA(lpszEnd, lpszSearch, iLen))
|
if (!StrCmpNIA(lpszStr, lpszSearch, iLen))
|
||||||
return (LPSTR)lpszEnd;
|
lpszRet = (LPSTR)lpszStr;
|
||||||
}
|
}
|
||||||
} while (lpszEnd > lpszStr);
|
lpszStr = CharNextA(lpszStr);
|
||||||
return NULL;
|
}
|
||||||
|
return lpszRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -642,6 +645,7 @@ LPSTR WINAPI StrRStrIA(LPCSTR lpszStr, LPCSTR lpszEnd, LPCSTR lpszSearch)
|
||||||
*/
|
*/
|
||||||
LPWSTR WINAPI StrRStrIW(LPCWSTR lpszStr, LPCWSTR lpszEnd, LPCWSTR lpszSearch)
|
LPWSTR WINAPI StrRStrIW(LPCWSTR lpszStr, LPCWSTR lpszEnd, LPCWSTR lpszSearch)
|
||||||
{
|
{
|
||||||
|
LPWSTR lpszRet = NULL;
|
||||||
INT iLen;
|
INT iLen;
|
||||||
|
|
||||||
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
|
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
|
||||||
|
@ -649,18 +653,23 @@ LPWSTR WINAPI StrRStrIW(LPCWSTR lpszStr, LPCWSTR lpszEnd, LPCWSTR lpszSearch)
|
||||||
if (!lpszStr || !lpszSearch || !*lpszSearch)
|
if (!lpszStr || !lpszSearch || !*lpszSearch)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!lpszEnd)
|
|
||||||
lpszEnd = lpszStr + strlenW(lpszStr);
|
|
||||||
|
|
||||||
iLen = strlenW(lpszSearch);
|
iLen = strlenW(lpszSearch);
|
||||||
|
|
||||||
while (lpszEnd > lpszStr)
|
if (!lpszEnd)
|
||||||
|
lpszEnd = lpszStr + strlenW(lpszStr);
|
||||||
|
else /* reproduce the broken behaviour on Windows */
|
||||||
|
lpszEnd += min(iLen - 1, lstrlenW(lpszEnd));
|
||||||
|
|
||||||
|
while (lpszStr + iLen <= lpszEnd && *lpszStr)
|
||||||
{
|
{
|
||||||
lpszEnd--;
|
if (!ChrCmpIW(*lpszSearch, *lpszStr))
|
||||||
if (!StrCmpNIW(lpszEnd, lpszSearch, iLen))
|
{
|
||||||
return (LPWSTR)lpszEnd;
|
if (!StrCmpNIW(lpszStr, lpszSearch, iLen))
|
||||||
|
lpszRet = (LPWSTR)lpszStr;
|
||||||
|
}
|
||||||
|
lpszStr++;
|
||||||
}
|
}
|
||||||
return NULL;
|
return lpszRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -690,6 +699,7 @@ LPSTR WINAPI StrStrIA(LPCSTR lpszStr, LPCSTR lpszSearch)
|
||||||
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
|
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
|
||||||
{
|
{
|
||||||
int iLen;
|
int iLen;
|
||||||
|
LPCWSTR end;
|
||||||
|
|
||||||
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
|
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
|
||||||
|
|
||||||
|
@ -697,8 +707,9 @@ LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
iLen = strlenW(lpszSearch);
|
iLen = strlenW(lpszSearch);
|
||||||
|
end = lpszStr + strlenW(lpszStr);
|
||||||
|
|
||||||
while (*lpszStr)
|
while (lpszStr + iLen <= end)
|
||||||
{
|
{
|
||||||
if (!StrCmpNIW(lpszStr, lpszSearch, iLen))
|
if (!StrCmpNIW(lpszStr, lpszSearch, iLen))
|
||||||
return (LPWSTR)lpszStr;
|
return (LPWSTR)lpszStr;
|
||||||
|
|
|
@ -899,7 +899,10 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
|
||||||
work = preliminary + base.cchProtocol+1+base.cchSuffix - 1;
|
work = preliminary + base.cchProtocol+1+base.cchSuffix - 1;
|
||||||
if (*work++ != '/')
|
if (*work++ != '/')
|
||||||
*(work++) = '/';
|
*(work++) = '/';
|
||||||
strcpyW(work, relative.pszSuffix);
|
if (relative.pszSuffix[0] == '.' && relative.pszSuffix[1] == 0)
|
||||||
|
*work = 0;
|
||||||
|
else
|
||||||
|
strcpyW(work, relative.pszSuffix);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -180,7 +180,7 @@ reactos/dll/win32/shdoclc # Synced to Wine-1.7.27
|
||||||
reactos/dll/win32/shdocvw # Synced to WineStaging-1.7.37
|
reactos/dll/win32/shdocvw # Synced to WineStaging-1.7.37
|
||||||
reactos/dll/win32/shell32 # Forked at Wine-20071011
|
reactos/dll/win32/shell32 # Forked at Wine-20071011
|
||||||
reactos/dll/win32/shfolder # Synced to Wine-1.7.27
|
reactos/dll/win32/shfolder # Synced to Wine-1.7.27
|
||||||
reactos/dll/win32/shlwapi # Synced to Wine-1.7.27
|
reactos/dll/win32/shlwapi # Synced to WineStaging-1.7.37
|
||||||
reactos/dll/win32/slbcsp # Synced to Wine-1.7.27
|
reactos/dll/win32/slbcsp # Synced to Wine-1.7.27
|
||||||
reactos/dll/win32/snmpapi # Synced to Wine-1.7.27
|
reactos/dll/win32/snmpapi # Synced to Wine-1.7.27
|
||||||
reactos/dll/win32/softpub # Synced to Wine-1.7.27
|
reactos/dll/win32/softpub # Synced to Wine-1.7.27
|
||||||
|
|
Loading…
Reference in a new issue