[SHDOCVW] Sync with Wine Staging 4.18. CORE-16441
[reactos.git] / dll / win32 / shdocvw / shdocvw_main.c
index 12d96ed..d529619 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "wine/debug.h"
+
 #include "shdocvw.h"
 
-#include <shlwapi.h>
-#include <wininet.h>
+#include "winreg.h"
+#ifdef __REACTOS__
+#include "winnls.h"
+#endif
+#include "shlwapi.h"
+#include "wininet.h"
+#include "isguids.h"
+
+#include "initguid.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
 LONG SHDOCVW_refCount = 0;
 
@@ -64,7 +78,7 @@ static HRESULT get_ieframe_object(REFCLSID rclsid, REFIID riid, void **ppv)
  */
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
 {
-    TRACE("\n");
+    TRACE("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
 
     if(IsEqualGUID(&CLSID_WebBrowser, rclsid)
        || IsEqualGUID(&CLSID_WebBrowser_V1, rclsid)
@@ -132,7 +146,8 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
     TRACE("%p 0x%x %p\n", hinst, fdwReason, fImpLoad);
     switch (fdwReason)
     {
-        case DLL_PROCESS_ATTACH:
+    case DLL_PROCESS_ATTACH:
+        DisableThreadLibraryCalls(hinst);
         break;
     case DLL_PROCESS_DETACH:
         if (fImpLoad) break;
@@ -243,9 +258,9 @@ DWORD WINAPI RunInstallUninstallStubs(void)
  *
  * Called by Emerge Desktop (alternative Windows Shell).
  */
-DWORD WINAPI RunInstallUninstallStubs2(void)
+DWORD WINAPI RunInstallUninstallStubs2(int arg)
 {
-    FIXME("(), stub!\n");
+    FIXME("(%d), stub!\n", arg);
     return 0x0deadbee;
 }
 
@@ -303,12 +318,12 @@ void WINAPI StopWatchFlushFORWARD(void)
 }
 
 /******************************************************************
- *             StopWatchWFORWARD            (SHDOCVW.@)
+ *             StopWatchAFORWARD            (SHDOCVW.@)
  */
-DWORD WINAPI StopWatchWFORWARD(DWORD dwClass, LPCWSTR lpszStr, DWORD dwUnknown,
+DWORD WINAPI StopWatchAFORWARD(DWORD dwClass, LPCSTR lpszStr, DWORD dwUnknown,
                                DWORD dwMode, DWORD dwTimeStamp)
 {
-    static DWORD (WINAPI *p)(DWORD, LPCWSTR, DWORD, DWORD, DWORD);
+    static DWORD (WINAPI *p)(DWORD, LPCSTR, DWORD, DWORD, DWORD);
 
     if (p || (p = fetch_shlwapi_ordinal(243)))
         return p(dwClass, lpszStr, dwUnknown, dwMode, dwTimeStamp);
@@ -316,12 +331,12 @@ DWORD WINAPI StopWatchWFORWARD(DWORD dwClass, LPCWSTR lpszStr, DWORD dwUnknown,
 }
 
 /******************************************************************
- *             StopWatchAFORWARD            (SHDOCVW.@)
+ *             StopWatchWFORWARD            (SHDOCVW.@)
  */
-DWORD WINAPI StopWatchAFORWARD(DWORD dwClass, LPCSTR lpszStr, DWORD dwUnknown,
+DWORD WINAPI StopWatchWFORWARD(DWORD dwClass, LPCWSTR lpszStr, DWORD dwUnknown,
                                DWORD dwMode, DWORD dwTimeStamp)
 {
-    static DWORD (WINAPI *p)(DWORD, LPCSTR, DWORD, DWORD, DWORD);
+    static DWORD (WINAPI *p)(DWORD, LPCWSTR, DWORD, DWORD, DWORD);
 
     if (p || (p = fetch_shlwapi_ordinal(244)))
         return p(dwClass, lpszStr, dwUnknown, dwMode, dwTimeStamp);
@@ -364,14 +379,13 @@ DWORD WINAPI ParseURLFromOutsideSourceW(LPCWSTR url, LPWSTR out, LPDWORD plen, L
     HRESULT hr;
     DWORD needed;
     DWORD len;
-    DWORD res = 0;
-
+    DWORD res;
 
     TRACE("(%s, %p, %p, %p) len: %d, unknown: 0x%x\n", debugstr_w(url), out, plen, unknown,
             plen ? *plen : 0, unknown ? *unknown : 0);
 
     if (!PathIsURLW(ptr)) {
-        len = sizeof(buffer_in) / sizeof(buffer_in[0]);
+        len = ARRAY_SIZE(buffer_in);
         buffer_in[0] = 0;
         hr = UrlApplySchemeW(ptr, buffer_in, &len, URL_APPLY_GUESSSCHEME | URL_APPLY_DEFAULT);
         TRACE("got 0x%x with %s\n", hr, debugstr_w(buffer_in));
@@ -385,16 +399,18 @@ DWORD WINAPI ParseURLFromOutsideSourceW(LPCWSTR url, LPWSTR out, LPDWORD plen, L
         }
     }
 
-    len = sizeof(buffer_out) / sizeof(buffer_out[0]);
+    len = ARRAY_SIZE(buffer_out);
     buffer_out[0] = '\0';
     hr = UrlCanonicalizeW(ptr, buffer_out, &len, URL_ESCAPE_SPACES_ONLY);
     needed = lstrlenW(buffer_out)+1;
     TRACE("got 0x%x with %s (need %d)\n", hr, debugstr_w(buffer_out), needed);
 
+    res = 0;
     if (*plen >= needed) {
         if (out != NULL) {
             lstrcpyW(out, buffer_out);
-            res++;
+            /* On success, 1 is returned for unicode version */
+            res = 1;
         }
         needed--;
     }
@@ -427,7 +443,7 @@ DWORD WINAPI ParseURLFromOutsideSourceA(LPCSTR url, LPSTR out, LPDWORD plen, LPD
         MultiByteToWideChar(CP_ACP, 0, url, -1, urlW, len);
     }
 
-    len = sizeof(buffer) / sizeof(buffer[0]);
+    len = ARRAY_SIZE(buffer);
     ParseURLFromOutsideSourceW(urlW, buffer, &len, unknown);
     HeapFree(GetProcessHeap(), 0, urlW);
 
@@ -437,6 +453,7 @@ DWORD WINAPI ParseURLFromOutsideSourceA(LPCSTR url, LPSTR out, LPDWORD plen, LPD
     if (*plen >= needed) {
         if (out != NULL) {
             WideCharToMultiByte(CP_ACP, 0, buffer, -1, out, *plen, NULL, NULL);
+            /* On success, string size including terminating 0 is returned for ansi version */
             res = needed;
         }
         needed--;
@@ -536,3 +553,41 @@ void WINAPI InstallReg_RunDLL(HWND hwnd, HINSTANCE handle, LPCSTR cmdline, INT s
 {
     FIXME("(%p %p %s %x)\n", hwnd, handle, debugstr_a(cmdline), show);
 }
+
+/******************************************************************
+ * DoFileDownload (SHDOCVW.@)
+ */
+BOOL WINAPI DoFileDownload(LPWSTR filename)
+{
+    FIXME("(%s) stub\n", debugstr_w(filename));
+    return FALSE;
+}
+
+/******************************************************************
+ * DoOrganizeFavDlgW (SHDOCVW.@)
+ */
+BOOL WINAPI DoOrganizeFavDlgW(HWND hwnd, LPCWSTR initDir)
+{
+    FIXME("(%p %s) stub\n", hwnd, debugstr_w(initDir));
+    return FALSE;
+}
+
+/******************************************************************
+ * DoOrganizeFavDlg (SHDOCVW.@)
+ */
+BOOL WINAPI DoOrganizeFavDlg(HWND hwnd, LPCSTR initDir)
+{
+    LPWSTR initDirW = NULL;
+    BOOL res;
+
+    TRACE("(%p %s)\n", hwnd, debugstr_a(initDir));
+
+    if (initDir) {
+        DWORD len = MultiByteToWideChar(CP_ACP, 0, initDir, -1, NULL, 0);
+        initDirW = heap_alloc(len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, initDir, -1, initDirW, len);
+    }
+    res = DoOrganizeFavDlgW(hwnd, initDirW);
+    heap_free(initDirW);
+    return res;
+}