Module: wine Branch: master Commit: 1b672e55ce738c5e02bd8c77df5dbf4668b7e30f URL: http://source.winehq.org/git/wine.git/?a=commit;h=1b672e55ce738c5e02bd8c77df...
Author: Sebastian Lackner sebastian@fds-team.de Date: Wed Nov 19 08:31:40 2014 +0100
shlwapi: Fix incorrect usage of CompareString in StrRStrIW.
---
dlls/shlwapi/string.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/dlls/shlwapi/string.c b/dlls/shlwapi/string.c index 316dd3f..9ba6038 100644 --- a/dlls/shlwapi/string.c +++ b/dlls/shlwapi/string.c @@ -625,6 +625,7 @@ LPSTR WINAPI StrRStrIA(LPCSTR lpszStr, LPCSTR lpszEnd, LPCSTR lpszSearch) */ LPWSTR WINAPI StrRStrIW(LPCWSTR lpszStr, LPCWSTR lpszEnd, LPCWSTR lpszSearch) { + LPWSTR lpszRet = NULL; INT iLen;
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch)); @@ -632,18 +633,23 @@ LPWSTR WINAPI StrRStrIW(LPCWSTR lpszStr, LPCWSTR lpszEnd, LPCWSTR lpszSearch) if (!lpszStr || !lpszSearch || !*lpszSearch) return NULL;
+ iLen = strlenW(lpszSearch); + if (!lpszEnd) lpszEnd = lpszStr + strlenW(lpszStr); + else /* reproduce the broken behaviour on Windows */ + lpszEnd += min(iLen - 1, lstrlenW(lpszEnd));
- iLen = strlenW(lpszSearch); - - while (lpszEnd > lpszStr) + while (lpszStr + iLen <= lpszEnd && *lpszStr) { - lpszEnd--; - if (!StrCmpNIW(lpszEnd, lpszSearch, iLen)) - return (LPWSTR)lpszEnd; + if (!ChrCmpIW(*lpszSearch, *lpszStr)) + { + if (!StrCmpNIW(lpszStr, lpszSearch, iLen)) + lpszRet = (LPWSTR)lpszStr; + } + lpszStr++; } - return NULL; + return lpszRet; }
/*************************************************************************