[SHLWAPI] Sync with Wine Staging 1.9.4. CORE-10912

svn path=/trunk/; revision=70931
This commit is contained in:
Amine Khaldi 2016-03-05 10:20:00 +00:00
parent 6a78ba7288
commit 18e1e62ec0
5 changed files with 63 additions and 16 deletions

View file

@ -78,6 +78,12 @@ HANDLE WINAPI SHMapHandle(HANDLE hShared, DWORD dwSrcProcId, DWORD dwDstProcId,
TRACE("(%p,%d,%d,%08x,%08x)\n", hShared, dwDstProcId, dwSrcProcId,
dwAccess, dwOptions);
if (!hShared)
{
TRACE("Returning handle NULL\n");
return NULL;
}
/* Get dest process handle */
if (dwDstProcId == dwMyProcId)
hDst = GetCurrentProcess();
@ -239,6 +245,9 @@ BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
TRACE("(%p %d)\n", hShared, dwProcId);
if (!hShared)
return TRUE;
/* Get a copy of the handle for our process, closing the source handle */
hClose = SHMapHandle(hShared, dwProcId, GetCurrentProcessId(),
FILE_MAP_ALL_ACCESS,DUPLICATE_CLOSE_SOURCE);
@ -4022,7 +4031,7 @@ BOOL WINAPI IsOS(DWORD feature)
case OS_SMALLBUSINESSSERVER:
ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
case OS_TABLETPC:
FIXME("(OS_TABLEPC) What should we return here?\n");
FIXME("(OS_TABLETPC) What should we return here?\n");
return FALSE;
case OS_SERVERADMINUI:
FIXME("(OS_SERVERADMINUI) What should we return here?\n");
@ -4819,7 +4828,7 @@ typedef struct SHELL_USER_PERMISSION { /* ...and this should be in shlwapi.h */
* NOTES
* Call should free returned descriptor with LocalFree
*/
PSECURITY_DESCRIPTOR WINAPI GetShellSecurityDescriptor(PSHELL_USER_PERMISSION *apUserPerm, int cUserPerm)
PSECURITY_DESCRIPTOR WINAPI GetShellSecurityDescriptor(const PSHELL_USER_PERMISSION *apUserPerm, int cUserPerm)
{
PSID *sidlist;
PSID cur_user = NULL;

View file

@ -85,6 +85,9 @@ HRESULT WINAPI DllGetVersion (DLLVERSIONINFO *pdvi)
TRACE("(%p)\n",pdvi);
if (!pdvi)
return E_INVALIDARG;
switch (pdvi2->info1.cbSize)
{
case sizeof(DLLVERSIONINFO2):
@ -98,7 +101,7 @@ HRESULT WINAPI DllGetVersion (DLLVERSIONINFO *pdvi)
pdvi2->info1.dwPlatformID = DLLVER_PLATFORM_WINDOWS;
return S_OK;
}
if (pdvi)
WARN("pdvi->cbSize = %d, unhandled\n", pdvi2->info1.cbSize);
WARN("pdvi->cbSize = %d, unhandled\n", pdvi2->info1.cbSize);
return E_INVALIDARG;
}

View file

@ -175,16 +175,16 @@ void WINAPI StopWatch_MarkJavaStop(LPCWSTR lpszEvent, HWND hWnd, DWORD dwReserve
*/
DWORD WINAPI GetPerfTime(void)
{
static LONG64 iCounterFreq = 0;
static LARGE_INTEGER iCounterFreq = { {0} };
LARGE_INTEGER iCounter;
TRACE("()\n");
if (!iCounterFreq)
QueryPerformanceFrequency((LARGE_INTEGER*)&iCounterFreq);
if (!iCounterFreq.QuadPart)
QueryPerformanceFrequency(&iCounterFreq);
QueryPerformanceCounter(&iCounter);
iCounter.QuadPart = iCounter.QuadPart * 1000 / iCounterFreq;
iCounter.QuadPart = iCounter.QuadPart * 1000 / iCounterFreq.QuadPart;
return iCounter.u.LowPart;
}

View file

@ -946,6 +946,8 @@ HRESULT WINAPI UrlEscapeA(
if(!RtlCreateUnicodeStringFromAsciiz(&urlW, pszUrl))
return E_INVALIDARG;
if(dwFlags & URL_ESCAPE_AS_UTF8)
return E_NOTIMPL;
if((ret = UrlEscapeW(urlW.Buffer, escapedW, &lenW, dwFlags)) == E_POINTER) {
escapedW = HeapAlloc(GetProcessHeap(), 0, lenW * sizeof(WCHAR));
ret = UrlEscapeW(urlW.Buffer, escapedW, &lenW, dwFlags);
@ -982,6 +984,9 @@ static inline BOOL URL_NeedEscapeW(WCHAR ch, DWORD flags, DWORD int_flags)
if ((flags & URL_ESCAPE_PERCENT) && (ch == '%'))
return TRUE;
if ((flags & URL_ESCAPE_AS_UTF8) && (ch >= 0x80))
return TRUE;
if (ch <= 31 || (ch >= 127 && ch <= 255) )
return TRUE;
@ -1057,8 +1062,8 @@ HRESULT WINAPI UrlEscapeW(
LPCWSTR src;
DWORD needed = 0, ret;
BOOL stop_escaping = FALSE;
WCHAR next[5], *dst, *dst_ptr;
INT len;
WCHAR next[12], *dst, *dst_ptr;
INT i, len;
PARSEDURLW parsed_url;
DWORD int_flags;
DWORD slashes = 0;
@ -1073,7 +1078,8 @@ HRESULT WINAPI UrlEscapeW(
if(dwFlags & ~(URL_ESCAPE_SPACES_ONLY |
URL_ESCAPE_SEGMENT_ONLY |
URL_DONT_ESCAPE_EXTRA_INFO |
URL_ESCAPE_PERCENT))
URL_ESCAPE_PERCENT |
URL_ESCAPE_AS_UTF8))
FIXME("Unimplemented flags: %08x\n", dwFlags);
dst_ptr = dst = HeapAlloc(GetProcessHeap(), 0, *pcchEscaped*sizeof(WCHAR));
@ -1176,10 +1182,39 @@ HRESULT WINAPI UrlEscapeW(
if(cur == '\\' && (int_flags & WINE_URL_BASH_AS_SLASH) && !stop_escaping) cur = '/';
if(URL_NeedEscapeW(cur, dwFlags, int_flags) && stop_escaping == FALSE) {
next[0] = '%';
next[1] = hexDigits[(cur >> 4) & 0xf];
next[2] = hexDigits[cur & 0xf];
len = 3;
if(dwFlags & URL_ESCAPE_AS_UTF8) {
char utf[16];
if ((cur >= 0xd800 && cur <= 0xdfff) &&
(src[1] >= 0xdc00 && src[1] <= 0xdfff))
{
len = WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, src, 2,
utf, sizeof(utf), NULL, NULL );
src++;
}
else
len = WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, &cur, 1,
utf, sizeof(utf), NULL, NULL );
if (!len) {
utf[0] = 0xef;
utf[1] = 0xbf;
utf[2] = 0xbd;
len = 3;
}
for(i = 0; i < len; i++) {
next[i*3+0] = '%';
next[i*3+1] = hexDigits[(utf[i] >> 4) & 0xf];
next[i*3+2] = hexDigits[utf[i] & 0xf];
}
len *= 3;
} else {
next[0] = '%';
next[1] = hexDigits[(cur >> 4) & 0xf];
next[2] = hexDigits[cur & 0xf];
len = 3;
}
} else {
next[0] = cur;
len = 1;

View file

@ -177,7 +177,7 @@ reactos/dll/win32/shdoclc # Synced to WineStaging-1.7.55
reactos/dll/win32/shdocvw # Synced to WineStaging-1.7.55
reactos/dll/win32/shell32 # Forked at Wine-20071011
reactos/dll/win32/shfolder # Synced to WineStaging-1.7.55
reactos/dll/win32/shlwapi # Synced to WineStaging-1.7.55
reactos/dll/win32/shlwapi # Synced to WineStaging-1.9.4
reactos/dll/win32/slbcsp # Synced to WineStaging-1.7.55
reactos/dll/win32/snmpapi # Synced to WineStaging-1.7.55
reactos/dll/win32/softpub # Synced to WineStaging-1.7.55