<html>
<head>
<style>
<!--
body { background-color:#ffffff }
.file { border:1px solid #eeeeee; margin-top:1em; margin-bottom:1em }
.pathname { font-family:monospace; float:right }
.fileheader { margin-bottom:.5em }
.diff { margin:0 }
.tasklist { padding:4px; border:1px dashed #000000; margin-top:1em }
.tasklist ul { margin-top:0; margin-bottom:0 }
tr.alt { background-color:#eeeeee }
#added { background-color:#ddffdd }
#addedchars { background-color:#99ff99; font-weight:bolder }
tr.alt #added { background-color:#ccf7cc }
#removed { background-color:#ffdddd }
#removedchars { background-color:#ff9999; font-weight:bolder }
tr.alt #removed { background-color:#f7cccc }
#info { color:#888888 }
#context { background-color:#eeeeee }
td {padding-left:.3em; padding-right:.3em }
tr.head { border-bottom-width:1px; border-bottom-style:solid }
tr.head td { padding:0; padding-top:.2em }
.task { background-color:#ffff00 }
.comment { padding:4px; border:1px dashed #000000; background-color:#ffffdd }
.error { color:red }
hr { border-width:0px; height:2px; background:black }
-->
</style>
</head>
<body>
<pre class="comment">Import and merge Wine-20041201</pre><pre class="diff" id="added">Added: trunk/reactos/lib/shlwapi/
Added: trunk/reactos/lib/shlwapi/Makefile.ros-template
Added: trunk/reactos/lib/shlwapi/makefile
</pre><pre class="diff" id="context">Modified: trunk/reactos/lib/shlwapi/ordinal.c
Modified: trunk/reactos/lib/shlwapi/path.c
Modified: trunk/reactos/lib/shlwapi/shlwapi.spec
Modified: trunk/reactos/lib/shlwapi/string.c
Modified: trunk/reactos/lib/shlwapi/url.c
</pre><hr /><div class="file">
<div class="fileheader"><big><b>Copied: trunk/reactos/lib/shlwapi</b> (from rev 12609, vendor/wine/dlls/shlwapi/current)</big></div>
</div>
</div>
<hr /><div class="file">
<div class="fileheader"><big><b>Added: trunk/reactos/lib/shlwapi/Makefile.ros-template</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/Makefile.ros-template        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/Makefile.ros-template        2004-12-31 16:12:23 UTC (rev 12613)
@@ -0,0 +1,22 @@
</small></pre><pre class="diff" id="added">+# $Id: Makefile.ros-template 11910 2004-12-03 23:37:44Z blight $
+
+TARGET_NAME = shlwapi
+
+TARGET_OBJECTS = @C_SRCS@
+
+TARGET_CFLAGS = -DWINSHLWAPI= -D__REACTOS__ @EXTRADEFS@
+
+# FIXME: we don't do delayed imports yet so oleaut32.a is listed explicitly
+# NOTE: msvcrt.a must be listed before ntdll.a, because sprintf that is
+# exported from ntdll doesn't support printing of float types (%f)
+TARGET_SDKLIBS = msvcrt.a @IMPORTS@ oleaut32.a wine.a wine_uuid.a wine_unicode.a msvcrt.a ntdll.a
+
+TARGET_NORC = yes
+
+TARGET_BASE = $(TARGET_BASE_LIB_SHLWAPI)
+
+default: all
+
+DEP_OBJECTS = $(TARGET_OBJECTS)
+
+include $(TOOLS_PATH)/depend.mk
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Added: trunk/reactos/lib/shlwapi/makefile</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/makefile        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/makefile        2004-12-31 16:12:23 UTC (rev 12613)
@@ -0,0 +1,9 @@
</small></pre><pre class="diff" id="added">+# $Id: makefile 7409 2004-01-02 19:49:47Z gvg $
+
+PATH_TO_TOP = ../..
+
+TARGET_TYPE = winedll
+
+include $(PATH_TO_TOP)/rules.mak
+
+include $(TOOLS_PATH)/helper.mk
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/lib/shlwapi/ordinal.c</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/ordinal.c        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/ordinal.c        2004-12-31 16:12:23 UTC (rev 12613)
@@ -1549,16 +1549,17 @@
</small></pre><pre class="diff" id="context"> LPVOID *p2) /* [out] ptr for call results */
{
DWORD ret, aa;
</pre><pre class="diff" id="added">+ IUnknown *iobjectwithsite;
</pre><pre class="diff" id="context">
if (!p1) return E_FAIL;
/* see if SetSite interface exists for IObjectWithSite object */
</pre><pre class="diff" id="removed">- ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id1, (LPVOID *)&p1);
- <span id="removedchars">TRACE("first IU_QI ret=%08lx, p1=%p\n", ret, p1</span>);
</pre><pre class="diff" id="added">+ <span id="addedchars">ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id1, (LPVOID *)&iobjectwithsite</span>);
+ TRACE("first IU_QI ret=%08lx, iobjectwithsite=%p\n", ret, iobjectwithsite);
</pre><pre class="diff" id="context"> if (ret) {
        /* see if GetClassId interface exists for IPersistMoniker object */
</pre><pre class="diff" id="removed">-        ret = IUnknown_QueryInterface(<span id="removedchars">(IUnknown *)</span>p1, (REFIID)id2, (LPVOID *)&aa);
</pre><pre class="diff" id="added">+        ret = IUnknown_QueryInterface(p1, (REFIID)id2, (LPVOID *)&aa);
</pre><pre class="diff" id="context">         TRACE("second IU_QI ret=%08lx, aa=%08lx\n", ret, aa);
        if (ret) return ret;
@@ -1570,10 +1571,10 @@
</pre><pre class="diff" id="context"> }
else {
        /* fake a SetSite call */
</pre><pre class="diff" id="removed">-        ret = IOleWindow_GetWindow((IOleWindow *)<span id="removedchars">p1</span>, (HWND*)p2);
</pre><pre class="diff" id="added">+        ret = IOleWindow_GetWindow((IOleWindow *)<span id="addedchars">iobjectwithsite</span>, (HWND*)p2);
</pre><pre class="diff" id="context">         TRACE("first IU_QI doing 0x0c ret=%08lx, *p2=%08lx\n", ret,
         *(LPDWORD)p2);
</pre><pre class="diff" id="removed">-        IUnknown_Release((IUnknown *)<span id="removedchars">p1</span>);
</pre><pre class="diff" id="added">+        IUnknown_Release((IUnknown *)<span id="addedchars">iobjectwithsite</span>);
</pre><pre class="diff" id="context"> }
return ret;
}
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/lib/shlwapi/path.c</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/path.c        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/path.c        2004-12-31 16:12:23 UTC (rev 12613)
@@ -3989,3 +3989,101 @@
</small></pre><pre class="diff" id="context"> return S_OK;
return E_FAIL;
}
</pre><pre class="diff" id="added">+
+#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);
+}
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/lib/shlwapi/shlwapi.spec</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/shlwapi.spec        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/shlwapi.spec        2004-12-31 16:12:23 UTC (rev 12613)
@@ -368,9 +368,9 @@
</small></pre><pre class="diff" id="context"> 368 stdcall @(wstr wstr ptr long wstr) kernel32.GetPrivateProfileStructW
369 stdcall @(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW
370 stdcall -noname ExtractIconWrapW(long wstr long)
</pre><pre class="diff" id="removed">-371 stdcall -noname DdeInitializeWrapW(ptr ptr long long) user32.DdeInitializeW
-372 stdcall -noname DdeCreateStringHandleWrapW(long ptr long) user32.DdeCreateStringHandleW
-37<span id="removedchars">3 stdcall -noname DdeQueryStringWrapW(long ptr wstr long long) user32.DdeQueryString</span>W
</pre><pre class="diff" id="added">+37<span id="addedchars">1 stdcall DdeInitializeWrapW(ptr ptr long long) user32.DdeInitialize</span>W
+372 stdcall DdeCreateStringHandleWrapW(long ptr long) user32.DdeCreateStringHandleW
+373 stdcall DdeQueryStringWrapW(long ptr wstr long long) user32.DdeQueryStringW
</pre><pre class="diff" id="context"> 374 stub -noname SHCheckDiskForMediaA
375 stub -noname SHCheckDiskForMediaW
376 stdcall -noname MLGetUILanguage() # kernel32.GetUserDefaultUILanguage
@@ -389,7 +389,7 @@
</pre><pre class="diff" id="context"> 389 stdcall -noname GetSaveFileNameWrapW(ptr)
390 stdcall -noname WNetRestoreConnectionWrapW(long wstr)
391 stdcall -noname WNetGetLastErrorWrapW(ptr ptr long ptr long)
</pre><pre class="diff" id="removed">-392 stdcall <span id="removedchars">-noname </span>EndDialogWrap(ptr ptr) user32.EndDialog
</pre><pre class="diff" id="added">+392 stdcall EndDialogWrap(ptr ptr) user32.EndDialog
</pre><pre class="diff" id="context"> 393 stdcall @(long ptr long ptr long) user32.CreateDialogIndirectParamW
394 stdcall @(long ptr long ptr long) user32.CreateDialogIndirectParamA
395 stub -noname MLWinHelpA
@@ -452,12 +452,12 @@
</pre><pre class="diff" id="context"> 452 stub -noname CharUpperNoDBCSW
453 stub -noname CharLowerNoDBCSA
454 stub -noname CharLowerNoDBCSW
</pre><pre class="diff" id="removed">-455 stub -noname PathIsValidCharA
-45<span id="removedchars">6 stub -noname PathIsValidCharW</span>
</pre><pre class="diff" id="added">+45<span id="addedchars">5 stdcall -noname PathIsValidCharA(long long)</span>
+456 stdcall -noname PathIsValidCharW(long long)
</pre><pre class="diff" id="context"> 457 stub -noname GetLongPathNameWrapW
458 stub -noname GetLongPathNameWrapA
</pre><pre class="diff" id="removed">-459 stdcall -noname SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA
-4<span id="removedchars">60 stdcall -noname SHExpandEnvironmentStringsW(wstr ptr long) kernel32.ExpandEnvironmentStringsW</span>
</pre><pre class="diff" id="added">+4<span id="addedchars">59 stdcall SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA</span>
+460 stdcall SHExpandEnvironmentStringsW(wstr ptr long) kernel32.ExpandEnvironmentStringsW
</pre><pre class="diff" id="context"> 461 stdcall -noname SHGetAppCompatFlags(long)
462 stub -noname UrlFixupW
463 stub -noname SHExpandEnvironmentStringsForUserA
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/lib/shlwapi/string.c</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/string.c        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/string.c        2004-12-31 16:12:23 UTC (rev 12613)
@@ -528,7 +528,7 @@
</small></pre><pre class="diff" id="context"> {
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
</pre><pre class="diff" id="removed">- return SHLWAPI_StrStrHelperW(lpszStr, lpszSearch, <span id="removedchars">strncmpW</span>);
</pre><pre class="diff" id="added">+ return SHLWAPI_StrStrHelperW(lpszStr, lpszSearch, <span id="addedchars">(int (*)(LPCWSTR,LPCWSTR,int))wcsncmp</span>);
</pre><pre class="diff" id="context"> }
/*************************************************************************
@@ -637,7 +637,7 @@
</pre><pre class="diff" id="context"> {
TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
</pre><pre class="diff" id="removed">- return SHLWAPI_StrStrHelperW(lpszStr, lpszSearch, <span id="removedchars">strncmpiW</span>);
</pre><pre class="diff" id="added">+ return SHLWAPI_StrStrHelperW(lpszStr, lpszSearch, <span id="addedchars">(int (*)(LPCWSTR,LPCWSTR,int))_wcsnicmp</span>);
</pre><pre class="diff" id="context"> }
/*************************************************************************
</pre></div>
<hr /><div class="file">
<div class="fileheader"><big><b>Modified: trunk/reactos/lib/shlwapi/url.c</b></big></div>
<pre class="diff"><small id="info">--- vendor/wine/dlls/shlwapi/current/url.c        2004-12-31 16:10:48 UTC (rev 12609)
+++ trunk/reactos/lib/shlwapi/url.c        2004-12-31 16:12:23 UTC (rev 12613)
@@ -1347,8 +1347,8 @@
</small></pre><pre class="diff" id="context"> * Success: TRUE. lpDest is filled with the computed hash value.
* Failure: FALSE, if any argument is invalid.
*/
</pre><pre class="diff" id="removed">-HRESULT WINAPI HashData(const unsigned char *lpSrc, DWORD nSrcLen,
- unsigned char *lpDest, DWORD nDestLen)
</pre><pre class="diff" id="added">+HRESULT WINAPI HashData(LPBYTE lpSrc, DWORD nSrcLen,
+ LPBYTE lpDest, DWORD nDestLen)
</pre><pre class="diff" id="context"> {
INT srcCount = nSrcLen - 1, destCount = nDestLen - 1;
</pre>
</div>
</body>
</html>