<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
+# &nbsp; &nbsp; &nbsp; 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"> &nbsp; &nbsp; &nbsp; &nbsp; LPVOID *p2) &nbsp; &nbsp; &nbsp; /* [out] &nbsp;ptr for call results */
 {
 &nbsp; &nbsp; DWORD ret, aa;
</pre><pre class="diff" id="added">+ &nbsp; &nbsp;IUnknown *iobjectwithsite;
</pre><pre class="diff" id="context"> 
 &nbsp; &nbsp; if (!p1) return E_FAIL;
 
 &nbsp; &nbsp; /* see if SetSite interface exists for IObjectWithSite object */
</pre><pre class="diff" id="removed">- &nbsp; &nbsp;ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id1, (LPVOID *)&amp;p1);
- &nbsp; &nbsp;<span id="removedchars">TRACE(&quot;first IU_QI ret=%08lx, p1=%p\n&quot;, ret, p1</span>);
</pre><pre class="diff" id="added">+ &nbsp; &nbsp;<span id="addedchars">ret = IUnknown_QueryInterface((IUnknown *)p1, (REFIID)id1, (LPVOID *)&amp;iobjectwithsite</span>);
+ &nbsp; &nbsp;TRACE(&quot;first IU_QI ret=%08lx, iobjectwithsite=%p\n&quot;, ret, iobjectwithsite);
</pre><pre class="diff" id="context"> &nbsp; &nbsp; 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 *)&amp;aa);
</pre><pre class="diff" id="added">+        ret = IUnknown_QueryInterface(p1, (REFIID)id2, (LPVOID *)&amp;aa);
</pre><pre class="diff" id="context">         TRACE(&quot;second IU_QI ret=%08lx, aa=%08lx\n&quot;, ret, aa);
         if (ret) return ret;
 
@@ -1570,10 +1571,10 @@
</pre><pre class="diff" id="context"> &nbsp; &nbsp; }
 &nbsp; &nbsp; 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(&quot;first IU_QI doing 0x0c ret=%08lx, *p2=%08lx\n&quot;, ret,
          &nbsp; &nbsp; &nbsp;*(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"> &nbsp; &nbsp; }
 &nbsp; &nbsp; 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"> &nbsp; &nbsp; return S_OK;
 &nbsp; return E_FAIL;
 }
</pre><pre class="diff" id="added">+
+#define PATH_CHAR_CLASS_LETTER &nbsp; &nbsp; &nbsp;0x0001
+#define PATH_CHAR_CLASS_ASTERIX &nbsp; &nbsp; 0x0002
+#define PATH_CHAR_CLASS_DOT &nbsp; &nbsp; &nbsp; &nbsp; 0x0004
+#define PATH_CHAR_CLASS_BACKSLASH &nbsp; 0x0008
+#define PATH_CHAR_CLASS_COLON &nbsp; &nbsp; &nbsp; 0x0010
+#define PATH_CHAR_CLASS_SEMICOLON &nbsp; 0x0020
+#define PATH_CHAR_CLASS_COMMA &nbsp; &nbsp; &nbsp; 0x0040
+#define PATH_CHAR_CLASS_SPACE &nbsp; &nbsp; &nbsp; 0x0080
+#define PATH_CHAR_CLASS_OTHER_VALID 0x0100
+#define PATH_CHAR_CLASS_DOUBLEQUOTE 0x0200
+
+/*************************************************************************
+ * PathIsValidCharAW &nbsp; &nbsp; [internal]
+ *
+ * Check if a char is of a certain class
+ */
+static BOOL WINAPI PathIsValidCharAW(unsigned Ch, DWORD Class)
+{
+ &nbsp;static struct
+ &nbsp;{
+ &nbsp; &nbsp;char Ch;
+ &nbsp; &nbsp;DWORD Class;
+ &nbsp;} CharClass[] =
+ &nbsp;{
+ &nbsp; &nbsp;{ ' ', PATH_CHAR_CLASS_SPACE },
+ &nbsp; &nbsp;{ '!', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '&quot;', PATH_CHAR_CLASS_DOUBLEQUOTE },
+ &nbsp; &nbsp;{ '#', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '$', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '%', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '&amp;', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '\'', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '(', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ ')', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '*', PATH_CHAR_CLASS_ASTERIX },
+ &nbsp; &nbsp;{ '+', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ ',', PATH_CHAR_CLASS_COMMA },
+ &nbsp; &nbsp;{ '-', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '.', PATH_CHAR_CLASS_DOT },
+ &nbsp; &nbsp;{ ':', PATH_CHAR_CLASS_COLON },
+ &nbsp; &nbsp;{ ';', PATH_CHAR_CLASS_SEMICOLON },
+ &nbsp; &nbsp;{ '=', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '?', PATH_CHAR_CLASS_LETTER },
+ &nbsp; &nbsp;{ '@', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '[', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '\\', PATH_CHAR_CLASS_BACKSLASH },
+ &nbsp; &nbsp;{ ']', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '^', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '_', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '`', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '{', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '}', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ '~', PATH_CHAR_CLASS_OTHER_VALID },
+ &nbsp; &nbsp;{ 0x7f, PATH_CHAR_CLASS_OTHER_VALID }
+ &nbsp;};
+ &nbsp;unsigned Index;
+
+ &nbsp;if (('A' &lt;= Ch &amp;&amp; Ch &lt;= 'Z') || ('a' &lt;= Ch &amp;&amp; Ch &lt;= 'z'))
+ &nbsp;{
+ &nbsp; &nbsp;return (Class &amp; PATH_CHAR_CLASS_LETTER);
+ &nbsp;}
+
+ &nbsp;if (('0' &lt;= Ch &amp;&amp; Ch &lt;= '9') || 0x80 &lt;= Ch)
+ &nbsp;{
+ &nbsp; &nbsp;return (Class &amp; PATH_CHAR_CLASS_OTHER_VALID);
+ &nbsp;}
+
+ &nbsp;for (Index = 0; Index &lt; sizeof(CharClass) / sizeof(CharClass[0]); Index++)
+ &nbsp;{
+ &nbsp; &nbsp;if (Ch == CharClass[Index].Ch)
+ &nbsp; &nbsp;{
+ &nbsp; &nbsp; &nbsp;return (Class &amp; CharClass[Index].Class);
+ &nbsp; &nbsp;}
+ &nbsp;}
+
+ &nbsp;return FALSE;
+}
+
+/*************************************************************************
+ * @ &nbsp; &nbsp; [SHLWAPI.455]
+ *
+ * Check if an Ascii char is of a certain class
+ */
+BOOL WINAPI PathIsValidCharA(char Ch, DWORD Class)
+{
+ &nbsp;return PathIsValidCharAW((unsigned) Ch, Class);
+}
+
+/*************************************************************************
+ * @ &nbsp; &nbsp; [SHLWAPI.456]
+ *
+ * Check if an Unicode char is of a certain class
+ */
+BOOL WINAPI PathIsValidCharW(WCHAR Ch, DWORD Class)
+{
+ &nbsp;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() &nbsp;# 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"> {
 &nbsp; TRACE(&quot;(%s,%s)\n&quot;, debugstr_w(lpszStr), debugstr_w(lpszSearch));
 
</pre><pre class="diff" id="removed">- &nbsp;return SHLWAPI_StrStrHelperW(lpszStr, lpszSearch, <span id="removedchars">strncmpW</span>);
</pre><pre class="diff" id="added">+ &nbsp;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"> {
 &nbsp; TRACE(&quot;(%s,%s)\n&quot;, debugstr_w(lpszStr), debugstr_w(lpszSearch));
 
</pre><pre class="diff" id="removed">- &nbsp;return SHLWAPI_StrStrHelperW(lpszStr, lpszSearch, <span id="removedchars">strncmpiW</span>);
</pre><pre class="diff" id="added">+ &nbsp;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"> &nbsp;* &nbsp;Success: TRUE. lpDest is filled with the computed hash value.
 &nbsp;* &nbsp;Failure: FALSE, if any argument is invalid.
 &nbsp;*/
</pre><pre class="diff" id="removed">-HRESULT WINAPI HashData(const unsigned char *lpSrc, DWORD nSrcLen,
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned char *lpDest, DWORD nDestLen)
</pre><pre class="diff" id="added">+HRESULT WINAPI HashData(LPBYTE lpSrc, DWORD nSrcLen,
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPBYTE lpDest, DWORD nDestLen)
</pre><pre class="diff" id="context"> {
 &nbsp; INT srcCount = nSrcLen - 1, destCount = nDestLen - 1;
 
</pre>
</div>

</body>
</html>