mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
Sync to Wine-20041019:
Francois Gouget <fgouget@free.fr> - Don't define COBJMACROS in objbase.h. - Update the Wine sources accordingly. Robert Shearman <rob@codeweavers.com> - Don't define GWL_USERDATA, GWL_ID, GWL_HWNDPARENT, GWL_HINSTANCE and GWL_WNDPROC when compiling the Wine source. Mike McCormack <mike@codeweavers.com> - Fix some -Wsigned-compare warnings. Huw Davies <huw@codeweavers.com> - Rewrite PathCreateFromUrl. - Implement PathSearchAndQualify. - Fix UrlUnescapeW. - PathIsURL should return TRUE even if a scheme is unknown. - UrlEscape has different rules depending on the protocol. - Added a load of tests. - ParseURL is now documented, so move it into shlwapi.h. Bill Medland <billmedland@mercuryspeed.com> - Fix SHDeleteKey so that it will handle deleting a key with more than one subkey. Also includes test. Steven Edwards <steven_ed4153@yahoo.com> - Move URL_SCHEME typedef to match PSDK. svn path=/trunk/; revision=11348
This commit is contained in:
parent
4667670c9e
commit
c333fa4ed1
9 changed files with 643 additions and 623 deletions
|
@ -20,6 +20,8 @@
|
|||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "objbase.h"
|
||||
|
|
|
@ -20,8 +20,10 @@
|
|||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#define COBJMACROS
|
||||
#define NONAMELESSUNION
|
||||
#define NONAMELESSSTRUCT
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winerror.h"
|
||||
|
|
|
@ -576,8 +576,8 @@ HRESULT WINAPI GetAcceptLanguagesW( LPWSTR langbuf, LPDWORD buflen)
|
|||
}
|
||||
memcpy( langbuf, mystr, min(*buflen,strlenW(mystr)+1)*sizeof(WCHAR) );
|
||||
|
||||
if(*buflen > lstrlenW(mystr)) {
|
||||
*buflen = lstrlenW(mystr);
|
||||
if(*buflen > strlenW(mystr)) {
|
||||
*buflen = strlenW(mystr);
|
||||
retval = S_OK;
|
||||
} else {
|
||||
*buflen = 0;
|
||||
|
@ -2439,7 +2439,7 @@ HWND WINAPI SHCreateWorkerWindowA(LONG wndProc, HWND hWndParent, DWORD dwExStyle
|
|||
SetWindowLongA(hWnd, DWL_MSGRESULT, z);
|
||||
|
||||
if (wndProc)
|
||||
SetWindowLongA(hWnd, GWL_WNDPROC, wndProc);
|
||||
SetWindowLongPtrA(hWnd, GWLP_WNDPROC, wndProc);
|
||||
}
|
||||
return hWnd;
|
||||
}
|
||||
|
@ -2726,7 +2726,7 @@ HWND WINAPI SHCreateWorkerWindowW(LONG wndProc, HWND hWndParent, DWORD dwExStyle
|
|||
SetWindowLongA(hWnd, DWL_MSGRESULT, z);
|
||||
|
||||
if (wndProc)
|
||||
SetWindowLongA(hWnd, GWL_WNDPROC, wndProc);
|
||||
SetWindowLongPtrA(hWnd, GWLP_WNDPROC, wndProc);
|
||||
}
|
||||
return hWnd;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "wingdi.h"
|
||||
#include "winuser.h"
|
||||
#include "winreg.h"
|
||||
#include "winnls.h"
|
||||
#include "winternl.h"
|
||||
#define NO_SHLWAPI_STREAM
|
||||
#include "shlwapi.h"
|
||||
#include "wine/debug.h"
|
||||
|
@ -3116,8 +3116,11 @@ BOOL WINAPI PathRenameExtensionW(LPWSTR lpszPath, LPCWSTR lpszExt)
|
|||
*/
|
||||
BOOL WINAPI PathSearchAndQualifyA(LPCSTR lpszPath, LPSTR lpszBuf, UINT cchBuf)
|
||||
{
|
||||
FIXME("(%s,%p,0x%08x)-stub\n", debugstr_a(lpszPath), lpszBuf, cchBuf);
|
||||
return FALSE;
|
||||
TRACE("(%s,%p,0x%08x)\n", debugstr_a(lpszPath), lpszBuf, cchBuf);
|
||||
|
||||
if(SearchPathA(NULL, lpszPath, NULL, cchBuf, lpszBuf, NULL))
|
||||
return TRUE;
|
||||
return !!GetFullPathNameA(lpszPath, cchBuf, lpszBuf, NULL);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -3127,8 +3130,11 @@ BOOL WINAPI PathSearchAndQualifyA(LPCSTR lpszPath, LPSTR lpszBuf, UINT cchBuf)
|
|||
*/
|
||||
BOOL WINAPI PathSearchAndQualifyW(LPCWSTR lpszPath, LPWSTR lpszBuf, UINT cchBuf)
|
||||
{
|
||||
FIXME("(%s,%p,0x%08x)-stub\n", debugstr_w(lpszPath), lpszBuf, cchBuf);
|
||||
return FALSE;
|
||||
TRACE("(%s,%p,0x%08x)\n", debugstr_w(lpszPath), lpszBuf, cchBuf);
|
||||
|
||||
if(SearchPathW(NULL, lpszPath, NULL, cchBuf, lpszBuf, NULL))
|
||||
return TRUE;
|
||||
return !!GetFullPathNameW(lpszPath, cchBuf, lpszBuf, NULL);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -3200,6 +3206,42 @@ LPWSTR WINAPI PathSkipRootW(LPCWSTR lpszPath)
|
|||
/*************************************************************************
|
||||
* PathCreateFromUrlA [SHLWAPI.@]
|
||||
*
|
||||
* See PathCreateFromUrlW
|
||||
*/
|
||||
HRESULT WINAPI PathCreateFromUrlA(LPCSTR pszUrl, LPSTR pszPath,
|
||||
LPDWORD pcchPath, DWORD dwReserved)
|
||||
{
|
||||
WCHAR bufW[MAX_PATH];
|
||||
WCHAR *pathW = bufW;
|
||||
UNICODE_STRING urlW;
|
||||
HRESULT ret;
|
||||
DWORD lenW = sizeof(bufW)/sizeof(WCHAR), lenA;
|
||||
|
||||
if(!RtlCreateUnicodeStringFromAsciiz(&urlW, pszUrl))
|
||||
return E_INVALIDARG;
|
||||
if((ret = PathCreateFromUrlW(urlW.Buffer, pathW, &lenW, dwReserved)) == E_POINTER) {
|
||||
pathW = HeapAlloc(GetProcessHeap(), 0, lenW * sizeof(WCHAR));
|
||||
ret = PathCreateFromUrlW(urlW.Buffer, pathW, &lenW, dwReserved);
|
||||
}
|
||||
if(ret == S_OK) {
|
||||
RtlUnicodeToMultiByteSize(&lenA, pathW, lenW * sizeof(WCHAR));
|
||||
if(*pcchPath > lenA) {
|
||||
RtlUnicodeToMultiByteN(pszPath, *pcchPath - 1, &lenA, pathW, lenW * sizeof(WCHAR));
|
||||
pszPath[lenA] = 0;
|
||||
*pcchPath = lenA;
|
||||
} else {
|
||||
*pcchPath = lenA + 1;
|
||||
ret = E_POINTER;
|
||||
}
|
||||
}
|
||||
if(pathW != bufW) HeapFree(GetProcessHeap(), 0, pathW);
|
||||
RtlFreeUnicodeString(&urlW);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* PathCreateFromUrlW [SHLWAPI.@]
|
||||
*
|
||||
* Create a path from a URL
|
||||
*
|
||||
* PARAMS
|
||||
|
@ -3212,79 +3254,66 @@ LPWSTR WINAPI PathSkipRootW(LPCWSTR lpszPath)
|
|||
* Success: S_OK. lpszPath contains the URL in path format,
|
||||
* Failure: An HRESULT error code such as E_INVALIDARG.
|
||||
*/
|
||||
HRESULT WINAPI PathCreateFromUrlA(LPCSTR lpszUrl, LPSTR lpszPath,
|
||||
LPDWORD pcchPath, DWORD dwFlags)
|
||||
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath,
|
||||
LPDWORD pcchPath, DWORD dwReserved)
|
||||
{
|
||||
LPSTR pszPathPart;
|
||||
TRACE("(%s,%p,%p,0x%08lx)\n", debugstr_a(lpszUrl), lpszPath, pcchPath, dwFlags);
|
||||
static const WCHAR file_colon[] = { 'f','i','l','e',':',0 };
|
||||
HRESULT hr;
|
||||
DWORD nslashes = 0;
|
||||
WCHAR *ptr;
|
||||
|
||||
if (!lpszUrl || !lpszPath || !pcchPath || !*pcchPath)
|
||||
return E_INVALIDARG;
|
||||
TRACE("(%s,%p,%p,0x%08lx)\n", debugstr_w(pszUrl), pszPath, pcchPath, dwReserved);
|
||||
|
||||
pszPathPart = StrChrA(lpszUrl, ':');
|
||||
if ((((pszPathPart - lpszUrl) == 1) && isalpha(*lpszUrl)) ||
|
||||
!lstrcmpA(lpszUrl, "file:"))
|
||||
{
|
||||
return UrlUnescapeA(pszPathPart, lpszPath, pcchPath, dwFlags);
|
||||
}
|
||||
/* extracts thing prior to : in pszURL and checks against:
|
||||
* https
|
||||
* shell
|
||||
* local
|
||||
* about - if match returns E_INVALIDARG
|
||||
*/
|
||||
if (!pszUrl || !pszPath || !pcchPath || !*pcchPath)
|
||||
return E_INVALIDARG;
|
||||
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* PathCreateFromUrlW [SHLWAPI.@]
|
||||
*
|
||||
* See PathCreateFromUrlA.
|
||||
*/
|
||||
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR lpszUrl, LPWSTR lpszPath,
|
||||
LPDWORD pcchPath, DWORD dwFlags)
|
||||
{
|
||||
static const WCHAR stemp[] = { 'f','i','l','e',':','/','/','/',0 };
|
||||
LPWSTR pwszPathPart;
|
||||
HRESULT hr;
|
||||
if (strncmpW(pszUrl, file_colon, 5))
|
||||
return E_INVALIDARG;
|
||||
pszUrl += 5;
|
||||
|
||||
TRACE("(%s,%p,%p,0x%08lx)\n", debugstr_w(lpszUrl), lpszPath, pcchPath, dwFlags);
|
||||
while(*pszUrl == '/' || *pszUrl == '\\') {
|
||||
nslashes++;
|
||||
pszUrl++;
|
||||
}
|
||||
|
||||
if (!lpszUrl || !lpszPath || !pcchPath || !*pcchPath)
|
||||
return E_INVALIDARG;
|
||||
if(isalphaW(*pszUrl) && (pszUrl[1] == ':' || pszUrl[1] == '|') && (pszUrl[2] == '/' || pszUrl[2] == '\\'))
|
||||
nslashes = 0;
|
||||
|
||||
/* Path of the form file:///... */
|
||||
if (!strncmpW(lpszUrl, stemp, 8))
|
||||
{
|
||||
lpszUrl += 8;
|
||||
}
|
||||
/* Path of the form file://... */
|
||||
else if (!strncmpW(lpszUrl, stemp, 7))
|
||||
{
|
||||
lpszUrl += 7;
|
||||
}
|
||||
/* Path of the form file:... */
|
||||
else if (!strncmpW(lpszUrl, stemp, 5))
|
||||
{
|
||||
lpszUrl += 5;
|
||||
}
|
||||
switch(nslashes) {
|
||||
case 2:
|
||||
pszUrl -= 2;
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
pszUrl -= 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Ensure that path is of the form c:... or c|... */
|
||||
if (lpszUrl[1] != ':' && lpszUrl[1] != '|' && isalphaW(*lpszUrl))
|
||||
return E_INVALIDARG;
|
||||
hr = UrlUnescapeW((LPWSTR)pszUrl, pszPath, pcchPath, 0);
|
||||
if(hr != S_OK) return hr;
|
||||
|
||||
hr = UrlUnescapeW((LPWSTR) lpszUrl, lpszPath, pcchPath, dwFlags);
|
||||
if (lpszPath[1] == '|')
|
||||
lpszPath[1] = ':';
|
||||
for(ptr = pszPath; *ptr; ptr++)
|
||||
if(*ptr == '/') *ptr = '\\';
|
||||
|
||||
for (pwszPathPart = lpszPath; *pwszPathPart; pwszPathPart++)
|
||||
if (*pwszPathPart == '/')
|
||||
*pwszPathPart = '\\';
|
||||
while(*pszPath == '\\')
|
||||
pszPath++;
|
||||
|
||||
if(isalphaW(*pszPath) && pszPath[1] == '|' && pszPath[2] == '\\') /* c|\ -> c:\ */
|
||||
pszPath[1] = ':';
|
||||
|
||||
TRACE("Returning %s\n",debugstr_w(lpszPath));
|
||||
if(nslashes == 2 && (ptr = strchrW(pszPath, '\\'))) { /* \\host\c:\ -> \\hostc:\ */
|
||||
ptr++;
|
||||
if(isalphaW(*ptr) && (ptr[1] == ':' || ptr[1] == '|') && ptr[2] == '\\') {
|
||||
memmove(ptr - 1, ptr, (strlenW(ptr) + 1) * sizeof(WCHAR));
|
||||
(*pcchPath)--;
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
TRACE("Returning %s\n",debugstr_w(pszPath));
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
|
|
@ -1298,7 +1298,7 @@ DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue,
|
|||
*/
|
||||
DWORD WINAPI SHDeleteKeyA(HKEY hKey, LPCSTR lpszSubKey)
|
||||
{
|
||||
DWORD dwRet, dwKeyCount = 0, dwMaxSubkeyLen = 0, dwSize, i;
|
||||
DWORD dwRet, dwMaxSubkeyLen = 0, dwSize;
|
||||
CHAR szNameBuf[MAX_PATH], *lpszName = szNameBuf;
|
||||
HKEY hSubKey = 0;
|
||||
|
||||
|
@ -1307,8 +1307,8 @@ DWORD WINAPI SHDeleteKeyA(HKEY hKey, LPCSTR lpszSubKey)
|
|||
dwRet = RegOpenKeyExA(hKey, lpszSubKey, 0, KEY_READ, &hSubKey);
|
||||
if(!dwRet)
|
||||
{
|
||||
/* Find how many subkeys there are */
|
||||
dwRet = RegQueryInfoKeyA(hSubKey, NULL, NULL, NULL, &dwKeyCount,
|
||||
/* Find the maximum subkey length so that we can allocate a buffer */
|
||||
dwRet = RegQueryInfoKeyA(hSubKey, NULL, NULL, NULL, NULL,
|
||||
&dwMaxSubkeyLen, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
if(!dwRet)
|
||||
{
|
||||
|
@ -1321,14 +1321,15 @@ DWORD WINAPI SHDeleteKeyA(HKEY hKey, LPCSTR lpszSubKey)
|
|||
dwRet = ERROR_NOT_ENOUGH_MEMORY;
|
||||
else
|
||||
{
|
||||
/* Recursively delete all the subkeys */
|
||||
for(i = 0; i < dwKeyCount && !dwRet; i++)
|
||||
while (dwRet == ERROR_SUCCESS)
|
||||
{
|
||||
dwSize = dwMaxSubkeyLen;
|
||||
dwRet = RegEnumKeyExA(hSubKey, i, lpszName, &dwSize, NULL, NULL, NULL, NULL);
|
||||
if(!dwRet)
|
||||
dwRet = RegEnumKeyExA(hSubKey, 0, lpszName, &dwSize, NULL, NULL, NULL, NULL);
|
||||
if (dwRet == ERROR_SUCCESS || dwRet == ERROR_MORE_DATA)
|
||||
dwRet = SHDeleteKeyA(hSubKey, lpszName);
|
||||
}
|
||||
if (dwRet == ERROR_NO_MORE_ITEMS)
|
||||
dwRet = ERROR_SUCCESS;
|
||||
if (lpszName != szNameBuf)
|
||||
HeapFree(GetProcessHeap(), 0, lpszName); /* Free buffer if allocated */
|
||||
}
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "winerror.h"
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winnls.h"
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,25 +1,160 @@
|
|||
Index: ordinal.c
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/shlwapi/ordinal.c,v
|
||||
retrieving revision 1.98
|
||||
diff -u -r1.98 ordinal.c
|
||||
--- ordinal.c 25 Sep 2004 00:29:30 -0000 1.98
|
||||
+++ ordinal.c 20 Oct 2004 16:50:41 -0000
|
||||
@@ -1549,16 +1549,17 @@
|
||||
LPVOID *p2) /* [out] ptr for call results */
|
||||
{
|
||||
DWORD ret, aa;
|
||||
+ IUnknown *iobjectwithsite;
|
||||
|
||||
if (!p1) return E_FAIL;
|
||||
|
||||
/* see if SetSite interface exists for IObjectWithSite object */
|
||||
- ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id1, (LPVOID *)&p1);
|
||||
- TRACE("first IU_QI ret=%08lx, p1=%p\n", ret, p1);
|
||||
+ ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id1, (LPVOID *)&iobjectwithsite);
|
||||
+ TRACE("first IU_QI ret=%08lx, iobjectwithsite=%p\n", ret, iobjectwithsite);
|
||||
if (ret) {
|
||||
|
||||
/* see if GetClassId interface exists for IPersistMoniker object */
|
||||
- ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id2, (LPVOID *)&aa);
|
||||
+ ret = IUnknown_QueryInterface(p1, (REFIID)id2, (LPVOID *)&aa);
|
||||
TRACE("second IU_QI ret=%08lx, aa=%08lx\n", ret, aa);
|
||||
if (ret) return ret;
|
||||
|
||||
@@ -1570,10 +1571,10 @@
|
||||
}
|
||||
else {
|
||||
/* fake a SetSite call */
|
||||
- ret = IOleWindow_GetWindow((IOleWindow *)p1, (HWND*)p2);
|
||||
+ ret = IOleWindow_GetWindow((IOleWindow *)iobjectwithsite, (HWND*)p2);
|
||||
TRACE("first IU_QI doing 0x0c ret=%08lx, *p2=%08lx\n", ret,
|
||||
*(LPDWORD)p2);
|
||||
- IUnknown_Release((IUnknown *)p1);
|
||||
+ IUnknown_Release((IUnknown *)iobjectwithsite);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
Index: path.c
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/shlwapi/path.c,v
|
||||
retrieving revision 1.42
|
||||
diff -u -r1.42 path.c
|
||||
--- path.c 20 Apr 2004 00:34:52 -0000 1.42
|
||||
+++ path.c 20 Aug 2004 07:09:34 -0000
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "wingdi.h"
|
||||
#include "winuser.h"
|
||||
#include "winreg.h"
|
||||
+#include "winnls.h"
|
||||
#define NO_SHLWAPI_STREAM
|
||||
#include "shlwapi.h"
|
||||
#include "wine/debug.h"
|
||||
retrieving revision 1.48
|
||||
diff -u -r1.48 path.c
|
||||
--- path.c 5 Oct 2004 18:07:14 -0000 1.48
|
||||
+++ path.c 20 Oct 2004 16:50:42 -0000
|
||||
@@ -3989,3 +3989,101 @@
|
||||
return S_OK;
|
||||
return E_FAIL;
|
||||
}
|
||||
+
|
||||
+#define PATH_CHAR_CLASS_LETTER 0x0001
|
||||
+#define PATH_CHAR_CLASS_ASTERIX 0x0002
|
||||
+#define PATH_CHAR_CLASS_DOT 0x0004
|
||||
+#define PATH_CHAR_CLASS_BACKSLASH 0x0008
|
||||
+#define PATH_CHAR_CLASS_COLON 0x0010
|
||||
+#define PATH_CHAR_CLASS_SEMICOLON 0x0020
|
||||
+#define PATH_CHAR_CLASS_COMMA 0x0040
|
||||
+#define PATH_CHAR_CLASS_SPACE 0x0080
|
||||
+#define PATH_CHAR_CLASS_OTHER_VALID 0x0100
|
||||
+#define PATH_CHAR_CLASS_DOUBLEQUOTE 0x0200
|
||||
+
|
||||
+/*************************************************************************
|
||||
+ * PathIsValidCharAW [internal]
|
||||
+ *
|
||||
+ * Check if a char is of a certain class
|
||||
+ */
|
||||
+static BOOL WINAPI PathIsValidCharAW(unsigned Ch, DWORD Class)
|
||||
+{
|
||||
+ static struct
|
||||
+ {
|
||||
+ char Ch;
|
||||
+ DWORD Class;
|
||||
+ } CharClass[] =
|
||||
+ {
|
||||
+ { ' ', PATH_CHAR_CLASS_SPACE },
|
||||
+ { '!', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '"', PATH_CHAR_CLASS_DOUBLEQUOTE },
|
||||
+ { '#', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '$', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '%', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '&', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '\'', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '(', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { ')', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '*', PATH_CHAR_CLASS_ASTERIX },
|
||||
+ { '+', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { ',', PATH_CHAR_CLASS_COMMA },
|
||||
+ { '-', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '.', PATH_CHAR_CLASS_DOT },
|
||||
+ { ':', PATH_CHAR_CLASS_COLON },
|
||||
+ { ';', PATH_CHAR_CLASS_SEMICOLON },
|
||||
+ { '=', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '?', PATH_CHAR_CLASS_LETTER },
|
||||
+ { '@', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '[', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '\\', PATH_CHAR_CLASS_BACKSLASH },
|
||||
+ { ']', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '^', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '_', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '`', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '{', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '}', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { '~', PATH_CHAR_CLASS_OTHER_VALID },
|
||||
+ { 0x7f, PATH_CHAR_CLASS_OTHER_VALID }
|
||||
+ };
|
||||
+ unsigned Index;
|
||||
+
|
||||
+ if (('A' <= Ch && Ch <= 'Z') || ('a' <= Ch && Ch <= 'z'))
|
||||
+ {
|
||||
+ return (Class & PATH_CHAR_CLASS_LETTER);
|
||||
+ }
|
||||
+
|
||||
+ if (('0' <= Ch && Ch <= '9') || 0x80 <= Ch)
|
||||
+ {
|
||||
+ return (Class & PATH_CHAR_CLASS_OTHER_VALID);
|
||||
+ }
|
||||
+
|
||||
+ for (Index = 0; Index < sizeof(CharClass) / sizeof(CharClass[0]); Index++)
|
||||
+ {
|
||||
+ if (Ch == CharClass[Index].Ch)
|
||||
+ {
|
||||
+ return (Class & CharClass[Index].Class);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+/*************************************************************************
|
||||
+ * @ [SHLWAPI.455]
|
||||
+ *
|
||||
+ * Check if an Ascii char is of a certain class
|
||||
+ */
|
||||
+BOOL WINAPI PathIsValidCharA(char Ch, DWORD Class)
|
||||
+{
|
||||
+ return PathIsValidCharAW((unsigned) Ch, Class);
|
||||
+}
|
||||
+
|
||||
+/*************************************************************************
|
||||
+ * @ [SHLWAPI.456]
|
||||
+ *
|
||||
+ * Check if an Unicode char is of a certain class
|
||||
+ */
|
||||
+BOOL WINAPI PathIsValidCharW(WCHAR Ch, DWORD Class)
|
||||
+{
|
||||
+ return PathIsValidCharAW((unsigned) Ch, Class);
|
||||
+}
|
||||
Index: shlwapi.spec
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/shlwapi/shlwapi.spec,v
|
||||
retrieving revision 1.93
|
||||
diff -u -r1.93 shlwapi.spec
|
||||
--- shlwapi.spec 19 Jul 2004 19:32:51 -0000 1.93
|
||||
+++ shlwapi.spec 20 Aug 2004 07:09:34 -0000
|
||||
retrieving revision 1.96
|
||||
diff -u -r1.96 shlwapi.spec
|
||||
--- shlwapi.spec 25 Sep 2004 00:29:30 -0000 1.96
|
||||
+++ shlwapi.spec 20 Oct 2004 16:50:42 -0000
|
||||
@@ -368,9 +368,9 @@
|
||||
368 stdcall @(wstr wstr ptr long wstr) kernel32.GetPrivateProfileStructW
|
||||
369 stdcall @(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
|
||||
|
@ -42,24 +177,30 @@ diff -u -r1.93 shlwapi.spec
|
|||
393 stdcall @(long ptr long ptr long) user32.CreateDialogIndirectParamW
|
||||
394 stdcall @(long ptr long ptr long) user32.CreateDialogIndirectParamA
|
||||
395 stub -noname MLWinHelpA
|
||||
@@ -456,8 +456,8 @@
|
||||
456 stub -noname PathIsValidCharW
|
||||
@@ -452,12 +452,12 @@
|
||||
452 stub -noname CharUpperNoDBCSW
|
||||
453 stub -noname CharLowerNoDBCSA
|
||||
454 stub -noname CharLowerNoDBCSW
|
||||
-455 stub -noname PathIsValidCharA
|
||||
-456 stub -noname PathIsValidCharW
|
||||
+455 stdcall -noname PathIsValidCharA(long long)
|
||||
+456 stdcall -noname PathIsValidCharW(long long)
|
||||
457 stub -noname GetLongPathNameWrapW
|
||||
458 stub -noname GetLongPathNameWrapA
|
||||
-459 stdcall -noname SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA
|
||||
-460 stdcall -noname SHExpandEnvironmentStringsW(wstr ptr long) kernel32.ExpandEnvironmentStringsW
|
||||
+459 stdcall SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA
|
||||
+460 stdcall SHExpandEnvironmentStringsW(wstr ptr long) kernel32.ExpandEnvironmentStringsW
|
||||
461 stdcall -noname SHGetAppCompatFlags()
|
||||
461 stdcall -noname SHGetAppCompatFlags(long)
|
||||
462 stub -noname UrlFixupW
|
||||
463 stub -noname SHExpandEnvironmentStringsForUserA
|
||||
Index: string.c
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/shlwapi/string.c,v
|
||||
retrieving revision 1.47
|
||||
diff -u -r1.47 string.c
|
||||
--- string.c 21 Jul 2004 03:12:16 -0000 1.47
|
||||
+++ string.c 20 Aug 2004 07:09:35 -0000
|
||||
retrieving revision 1.49
|
||||
diff -u -r1.49 string.c
|
||||
--- string.c 13 Sep 2004 18:11:56 -0000 1.49
|
||||
+++ string.c 20 Oct 2004 16:50:43 -0000
|
||||
@@ -528,7 +528,7 @@
|
||||
{
|
||||
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
|
||||
|
@ -81,11 +222,11 @@ diff -u -r1.47 string.c
|
|||
Index: url.c
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/shlwapi/url.c,v
|
||||
retrieving revision 1.35
|
||||
diff -u -r1.35 url.c
|
||||
--- url.c 4 Jul 2004 00:06:29 -0000 1.35
|
||||
+++ url.c 20 Aug 2004 07:09:36 -0000
|
||||
@@ -1386,8 +1386,8 @@
|
||||
retrieving revision 1.43
|
||||
diff -u -r1.43 url.c
|
||||
--- url.c 5 Oct 2004 18:31:41 -0000 1.43
|
||||
+++ url.c 20 Oct 2004 16:50:44 -0000
|
||||
@@ -1347,8 +1347,8 @@
|
||||
* Success: TRUE. lpDest is filled with the computed hash value.
|
||||
* Failure: FALSE, if any argument is invalid.
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue