[OLE32] Sync with Wine Staging 4.18. CORE-16441
authorAmine Khaldi <amine.khaldi@reactos.org>
Sun, 10 Nov 2019 13:10:55 +0000 (14:10 +0100)
committerAmine Khaldi <amine.khaldi@reactos.org>
Sun, 10 Nov 2019 13:10:55 +0000 (14:10 +0100)
31 files changed:
dll/win32/ole32/bindctx.c
dll/win32/ole32/classmoniker.c
dll/win32/ole32/clipboard.c
dll/win32/ole32/comcat.c
dll/win32/ole32/compobj.c
dll/win32/ole32/compobj_private.h
dll/win32/ole32/compositemoniker.c
dll/win32/ole32/datacache.c
dll/win32/ole32/defaulthandler.c
dll/win32/ole32/errorinfo.c
dll/win32/ole32/filelockbytes.c
dll/win32/ole32/filemoniker.c
dll/win32/ole32/ftmarshal.c
dll/win32/ole32/hglobalstream.c
dll/win32/ole32/ifs.c
dll/win32/ole32/itemmoniker.c
dll/win32/ole32/marshal.c
dll/win32/ole32/memlockbytes.c
dll/win32/ole32/moniker.c
dll/win32/ole32/ole2.c
dll/win32/ole32/ole2stubs.c
dll/win32/ole32/ole32.spec
dll/win32/ole32/ole32_main.c
dll/win32/ole32/oleobj.c
dll/win32/ole32/oleproxy.c
dll/win32/ole32/precomp.h
dll/win32/ole32/rpc.c
dll/win32/ole32/stg_prop.c
dll/win32/ole32/storage32.c
dll/win32/ole32/usrmarshal.c
media/doc/README.WINE

index 8be88a6..1951100 100644 (file)
@@ -446,7 +446,7 @@ static HRESULT BindCtxImpl_GetObjectIndex(BindCtxImpl* This,
                 if ( ( (This->bindCtxTable[i].pkeyObj==NULL) && (pszkey==NULL) ) ||
                      ( (This->bindCtxTable[i].pkeyObj!=NULL) &&
                        (pszkey!=NULL) &&
-                       (lstrcmpW(This->bindCtxTable[i].pkeyObj,pszkey)==0)
+                       (wcscmp(This->bindCtxTable[i].pkeyObj,pszkey)==0)
                      )
                    )
 
index 30a24d2..3837a1f 100644 (file)
@@ -31,7 +31,6 @@
 #include "winuser.h"
 #include "wine/debug.h"
 #include "ole2.h"
-#include "wine/unicode.h"
 #include "moniker.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -402,7 +401,7 @@ static HRESULT WINAPI ClassMoniker_IsEqual(IMoniker* iface,IMoniker* pmkOtherMon
     if(SUCCEEDED ((res = CreateBindCtx(0,&bind)))) {
         if(SUCCEEDED (IMoniker_GetDisplayName(iface,bind,NULL,&dispName1))) {
            if(SUCCEEDED (IMoniker_GetDisplayName(pmkOtherMoniker,bind,NULL,&dispName2))) {
-                if(lstrcmpW(dispName1,dispName2)==0) res = S_OK;
+                if(wcscmp(dispName1,dispName2)==0) res = S_OK;
                 CoTaskMemFree(dispName2);
             }
             CoTaskMemFree(dispName1);
@@ -727,7 +726,7 @@ HRESULT ClassMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LP
                                            IMoniker **ppmk)
 {
     HRESULT hr;
-    LPCWSTR s = strchrW(szDisplayName, ':');
+    LPCWSTR s = wcschr(szDisplayName, ':');
     LPCWSTR end;
     CLSID clsid;
     BYTE table[256];
index f3e9a6b..a43f104 100644 (file)
@@ -1363,7 +1363,7 @@ static inline BOOL string_off_equal(const DVTARGETDEVICE *t1, WORD off1, const D
     str1 = (const WCHAR*)((const char*)t1 + off1);
     str2 = (const WCHAR*)((const char*)t2 + off2);
 
-    return !lstrcmpW(str1, str2);
+    return !wcscmp(str1, str2);
 }
 
 static inline BOOL td_equal(const DVTARGETDEVICE *t1, const DVTARGETDEVICE *t2)
@@ -1602,7 +1602,7 @@ end:
  */
 static HRESULT WINAPI snapshot_QueryGetData(IDataObject *iface, FORMATETC *fmt)
 {
-    FIXME("(%p, %p {%s})\n", iface, fmt, dump_fmtetc(fmt));
+    TRACE("(%p, %p {%s})\n", iface, fmt, dump_fmtetc(fmt));
 
     if (!fmt) return E_INVALIDARG;
 
index d43c3af..467724c 100644 (file)
@@ -33,7 +33,6 @@
 #include "comcat.h"
 #include "compobj_private.h"
 
-#include "wine/unicode.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -267,7 +266,7 @@ static HRESULT COMCAT_IsClassOfCategories(
            if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) break;
            if (size != CHARS_IN_GUID-1) continue; /* bogus catid in registry */
            for (string = req_strings; *string; string += CHARS_IN_GUID)
-               if (!strcmpiW(string, keyname)) break;
+               if (!wcsicmp(string, keyname)) break;
            if (!*string) {
                RegCloseKey(subkey);
                return S_FALSE;
@@ -1279,9 +1278,9 @@ static HRESULT CATIDEnumGUID_Construct(REFCLSID rclsid, LPCWSTR postfix, IEnumGU
 
     This->IEnumGUID_iface.lpVtbl = &CATIDEnumGUIDVtbl;
     This->ref = 1;
-    strcpyW(keyname, prefixW);
-    strcatW(keyname, clsidW);
-    strcatW(keyname, postfix);
+    lstrcpyW(keyname, prefixW);
+    lstrcatW(keyname, clsidW);
+    lstrcatW(keyname, postfix);
 
     open_classes_key(HKEY_CLASSES_ROOT, keyname, KEY_READ, &This->key);
 
index eae3933..e0c1b0b 100644 (file)
@@ -36,8 +36,6 @@
  *
  */
 
-#include "config.h"
-
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
@@ -67,7 +65,6 @@
 #include "compobj_private.h"
 #include "moniker.h"
 
-#include "wine/unicode.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -496,7 +493,7 @@ static OpenDll *COMPOBJ_DllList_Get(LPCWSTR library_name)
     EnterCriticalSection(&csOpenDllList);
     LIST_FOR_EACH_ENTRY(ptr, &openDllList, OpenDll, entry)
     {
-        if (!strcmpiW(library_name, ptr->library_name) &&
+        if (!wcsicmp(library_name, ptr->library_name) &&
             (InterlockedIncrement(&ptr->refs) != 1) /* entry is being destroy if == 1 */)
         {
             ret = ptr;
@@ -554,7 +551,7 @@ static HRESULT COMPOBJ_DllList_Add(LPCWSTR library_name, OpenDll **ret)
     }
     else
     {
-        len = strlenW(library_name);
+        len = lstrlenW(library_name);
         entry = HeapAlloc(GetProcessHeap(),0, sizeof(OpenDll));
         if (entry)
             entry->library_name = HeapAlloc(GetProcessHeap(), 0, (len + 1)*sizeof(WCHAR));
@@ -1349,7 +1346,7 @@ static HRESULT apartment_getclassobject(struct apartment *apt, LPCWSTR dllpath,
     BOOL found = FALSE;
     struct apartment_loaded_dll *apartment_loaded_dll;
 
-    if (!strcmpiW(dllpath, wszOle32))
+    if (!wcsicmp(dllpath, wszOle32))
     {
         /* we don't need to control the lifetime of this dll, so use the local
          * implementation of DllGetClassObject directly */
@@ -1365,7 +1362,7 @@ static HRESULT apartment_getclassobject(struct apartment *apt, LPCWSTR dllpath,
     EnterCriticalSection(&apt->cs);
 
     LIST_FOR_EACH_ENTRY(apartment_loaded_dll, &apt->loaded_dlls, struct apartment_loaded_dll, entry)
-        if (!strcmpiW(dllpath, apartment_loaded_dll->dll->library_name))
+        if (!wcsicmp(dllpath, apartment_loaded_dll->dll->library_name))
         {
             TRACE("found %s already loaded\n", debugstr_w(dllpath));
             found = TRUE;
@@ -1428,9 +1425,9 @@ static BOOL get_object_dll_path(const struct class_reg_data *regdata, WCHAR *dst
               if (dstlen <= ExpandEnvironmentStringsW(src, dst, dstlen)) ret = ERROR_MORE_DATA;
             } else {
               const WCHAR *quote_start;
-              quote_start = strchrW(src, '\"');
+              quote_start = wcschr(src, '\"');
               if (quote_start) {
-                const WCHAR *quote_end = strchrW(quote_start + 1, '\"');
+                const WCHAR *quote_end = wcschr(quote_start + 1, '\"');
                 if (quote_end) {
                   memmove(src, quote_start + 1,
                           (quote_end - quote_start - 1) * sizeof(WCHAR));
@@ -1744,11 +1741,21 @@ static void COM_TlsDestroy(void)
     struct oletls *info = NtCurrentTeb()->ReservedForOle;
     if (info)
     {
+        struct init_spy *cursor, *cursor2;
+
         if (info->apt) apartment_release(info->apt);
         if (info->errorinfo) IErrorInfo_Release(info->errorinfo);
         if (info->state) IUnknown_Release(info->state);
-        if (info->spy) IInitializeSpy_Release(info->spy);
+
+        LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &info->spies, struct init_spy, entry)
+        {
+            list_remove(&cursor->entry);
+            if (cursor->spy) IInitializeSpy_Release(cursor->spy);
+            heap_free(cursor);
+        }
+
         if (info->context_token) IObjContext_Release(info->context_token);
+
         HeapFree(GetProcessHeap(), 0, info);
         NtCurrentTeb()->ReservedForOle = NULL;
     }
@@ -1770,6 +1777,42 @@ DWORD WINAPI CoBuildVersion(void)
     return (rmm<<16)+rup;
 }
 
+static struct init_spy *get_spy_entry(struct oletls *info, unsigned int id)
+{
+    struct init_spy *spy;
+
+    LIST_FOR_EACH_ENTRY(spy, &info->spies, struct init_spy, entry)
+    {
+        if (id == spy->id && spy->spy)
+            return spy;
+    }
+
+    return NULL;
+}
+
+/*
+ * When locked, don't modify list (unless we add a new head), so that it's
+ * safe to iterate it. Freeing of list entries is delayed and done on unlock.
+ */
+static inline void lock_init_spies(struct oletls *info)
+{
+    info->spies_lock++;
+}
+
+static void unlock_init_spies(struct oletls *info)
+{
+    struct init_spy *spy, *next;
+
+    if (--info->spies_lock) return;
+
+    LIST_FOR_EACH_ENTRY_SAFE(spy, next, &info->spies, struct init_spy, entry)
+    {
+        if (spy->spy) continue;
+        list_remove(&spy->entry);
+        heap_free(spy);
+    }
+}
+
 /******************************************************************************
  *              CoRegisterInitializeSpy [OLE32.@]
  *
@@ -1789,6 +1832,8 @@ DWORD WINAPI CoBuildVersion(void)
 HRESULT WINAPI CoRegisterInitializeSpy(IInitializeSpy *spy, ULARGE_INTEGER *cookie)
 {
     struct oletls *info = COM_CurrentInfo();
+    struct init_spy *entry;
+    unsigned int id;
     HRESULT hr;
 
     TRACE("(%p, %p)\n", spy, cookie);
@@ -1800,19 +1845,32 @@ HRESULT WINAPI CoRegisterInitializeSpy(IInitializeSpy *spy, ULARGE_INTEGER *cook
         return E_INVALIDARG;
     }
 
-    if (info->spy)
+    hr = IInitializeSpy_QueryInterface(spy, &IID_IInitializeSpy, (void **)&spy);
+    if (FAILED(hr))
+        return hr;
+
+    entry = heap_alloc(sizeof(*entry));
+    if (!entry)
     {
-        FIXME("Already registered?\n");
-        return E_UNEXPECTED;
+        IInitializeSpy_Release(spy);
+        return E_OUTOFMEMORY;
     }
 
-    hr = IInitializeSpy_QueryInterface(spy, &IID_IInitializeSpy, (void **) &info->spy);
-    if (SUCCEEDED(hr))
+    entry->spy = spy;
+
+    id = 0;
+    while (get_spy_entry(info, id) != NULL)
     {
-        cookie->QuadPart = (DWORD_PTR)spy;
-        return S_OK;
+        id++;
     }
-    return hr;
+
+    entry->id = id;
+    list_add_head(&info->spies, &entry->entry);
+
+    cookie->s.HighPart = GetCurrentThreadId();
+    cookie->s.LowPart = entry->id;
+
+    return S_OK;
 }
 
 /******************************************************************************
@@ -1833,13 +1891,22 @@ HRESULT WINAPI CoRegisterInitializeSpy(IInitializeSpy *spy, ULARGE_INTEGER *cook
 HRESULT WINAPI CoRevokeInitializeSpy(ULARGE_INTEGER cookie)
 {
     struct oletls *info = COM_CurrentInfo();
+    struct init_spy *spy;
+
     TRACE("(%s)\n", wine_dbgstr_longlong(cookie.QuadPart));
 
-    if (!info || !info->spy || cookie.QuadPart != (DWORD_PTR)info->spy)
+    if (!info || cookie.s.HighPart != GetCurrentThreadId())
         return E_INVALIDARG;
 
-    IInitializeSpy_Release(info->spy);
-    info->spy = NULL;
+    if (!(spy = get_spy_entry(info, cookie.s.LowPart))) return E_INVALIDARG;
+
+    IInitializeSpy_Release(spy->spy);
+    spy->spy = NULL;
+    if (!info->spies_lock)
+    {
+        list_remove(&spy->entry);
+        heap_free(spy);
+    }
     return S_OK;
 }
 
@@ -1935,6 +2002,7 @@ HRESULT WINAPI CoInitialize(LPVOID lpReserved)
 HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
 {
   struct oletls *info = COM_CurrentInfo();
+  struct init_spy *cursor;
   HRESULT hr;
 
   TRACE("(%p, %x)\n", lpReserved, (int)dwCoInit);
@@ -1961,13 +2029,21 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoIni
     RunningObjectTableImpl_Initialize();
   }
 
-  if (info->spy)
-      IInitializeSpy_PreInitialize(info->spy, dwCoInit, info->inits);
+  lock_init_spies(info);
+  LIST_FOR_EACH_ENTRY(cursor, &info->spies, struct init_spy, entry)
+  {
+      if (cursor->spy) IInitializeSpy_PreInitialize(cursor->spy, dwCoInit, info->inits);
+  }
+  unlock_init_spies(info);
 
   hr = enter_apartment( info, dwCoInit );
 
-  if (info->spy)
-      IInitializeSpy_PostInitialize(info->spy, hr, dwCoInit, info->inits);
+  lock_init_spies(info);
+  LIST_FOR_EACH_ENTRY(cursor, &info->spies, struct init_spy, entry)
+  {
+      if (cursor->spy) hr = IInitializeSpy_PostInitialize(cursor->spy, hr, dwCoInit, info->inits);
+  }
+  unlock_init_spies(info);
 
   return hr;
 }
@@ -1991,6 +2067,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoIni
 void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
 {
   struct oletls * info = COM_CurrentInfo();
+  struct init_spy *cursor, *next;
   LONG lCOMRefCnt;
 
   TRACE("()\n");
@@ -1998,17 +2075,26 @@ void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
   /* will only happen on OOM */
   if (!info) return;
 
-  if (info->spy)
-      IInitializeSpy_PreUninitialize(info->spy, info->inits);
+  lock_init_spies(info);
+  LIST_FOR_EACH_ENTRY_SAFE(cursor, next, &info->spies, struct init_spy, entry)
+  {
+      if (cursor->spy) IInitializeSpy_PreUninitialize(cursor->spy, info->inits);
+  }
+  unlock_init_spies(info);
 
   /* sanity check */
   if (!info->inits)
   {
-    ERR("Mismatched CoUninitialize\n");
+      ERR("Mismatched CoUninitialize\n");
+
+      lock_init_spies(info);
+      LIST_FOR_EACH_ENTRY_SAFE(cursor, next, &info->spies, struct init_spy, entry)
+      {
+          if (cursor->spy) IInitializeSpy_PostUninitialize(cursor->spy, info->inits);
+      }
+      unlock_init_spies(info);
 
-    if (info->spy)
-        IInitializeSpy_PostUninitialize(info->spy, info->inits);
-    return;
+      return;
   }
 
   leave_apartment( info );
@@ -2030,8 +2116,13 @@ void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
     ERR( "CoUninitialize() - not CoInitialized.\n" );
     InterlockedExchangeAdd(&s_COMLockCount,1); /* restore the lock count. */
   }
-  if (info->spy)
-      IInitializeSpy_PostUninitialize(info->spy, info->inits);
+
+  lock_init_spies(info);
+  LIST_FOR_EACH_ENTRY(cursor, &info->spies, struct init_spy, entry)
+  {
+      if (cursor->spy) IInitializeSpy_PostUninitialize(cursor->spy, info->inits);
+  }
+  unlock_init_spies(info);
 }
 
 /******************************************************************************
@@ -2205,10 +2296,10 @@ static HRESULT clsid_from_string_reg(LPCOLESTR progid, CLSID *clsid)
     WCHAR *buf;
 
     memset(clsid, 0, sizeof(*clsid));
-    buf = HeapAlloc( GetProcessHeap(),0,(strlenW(progid)+8) * sizeof(WCHAR) );
+    buf = HeapAlloc( GetProcessHeap(),0,(lstrlenW(progid)+8) * sizeof(WCHAR) );
     if (!buf) return E_OUTOFMEMORY;
-    strcpyW( buf, progid );
-    strcatW( buf, clsidW );
+    lstrcpyW( buf, progid );
+    lstrcatW( buf, clsidW );
     if (open_classes_key(HKEY_CLASSES_ROOT, buf, MAXIMUM_ALLOWED, &xhkey))
     {
         HeapFree(GetProcessHeap(),0,buf);
@@ -2291,7 +2382,7 @@ HRESULT WINAPI IIDFromString(LPCOLESTR s, IID *iid)
   }
 
   /* length mismatch is a special case */
-  if (strlenW(s) + 1 != CHARS_IN_GUID)
+  if (lstrlenW(s) + 1 != CHARS_IN_GUID)
       return E_INVALIDARG;
 
   if (s[0] != '{')
@@ -2347,7 +2438,7 @@ INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
                                      '%','0','2','X','%','0','2','X','%','0','2','X','%','0','2','X',
                                      '%','0','2','X','%','0','2','X','}',0 };
     if (!id || cmax < CHARS_IN_GUID) return 0;
-    sprintfW( str, formatW, id->Data1, id->Data2, id->Data3,
+    swprintf( str, formatW, id->Data1, id->Data2, id->Data3,
               id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
               id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
     return CHARS_IN_GUID;
@@ -2361,8 +2452,8 @@ HRESULT COM_OpenKeyForCLSID(REFCLSID clsid, LPCWSTR keyname, REGSAM access, HKEY
     LONG res;
     HKEY key;
 
-    strcpyW(path, wszCLSIDSlash);
-    StringFromGUID2(clsid, path + strlenW(wszCLSIDSlash), CHARS_IN_GUID);
+    lstrcpyW(path, wszCLSIDSlash);
+    StringFromGUID2(clsid, path + lstrlenW(wszCLSIDSlash), CHARS_IN_GUID);
     res = open_classes_key(HKEY_CLASSES_ROOT, path, keyname ? KEY_READ : access, &key);
     if (res == ERROR_FILE_NOT_FOUND)
         return REGDB_E_CLASSNOTREG;
@@ -2411,8 +2502,8 @@ HRESULT COM_OpenKeyForAppIdFromCLSID(REFCLSID clsid, REGSAM access, HKEY *subkey
     else if (res != ERROR_SUCCESS || type!=REG_SZ)
         return REGDB_E_READREGDB;
 
-    strcpyW(keyname, szAppIdKey);
-    strcatW(keyname, buf);
+    lstrcpyW(keyname, szAppIdKey);
+    lstrcatW(keyname, buf);
     res = open_classes_key(HKEY_CLASSES_ROOT, keyname, access, subkey);
     if (res == ERROR_FILE_NOT_FOUND)
         return REGDB_E_KEYMISSING;
@@ -2642,9 +2733,9 @@ HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
     }
 
     /* Interface\\{string form of riid}\\ProxyStubClsid32 */
-    strcpyW(path, wszInterface);
+    lstrcpyW(path, wszInterface);
     StringFromGUID2(riid, path + ARRAY_SIZE(wszInterface) - 1, CHARS_IN_GUID);
-    strcpyW(path + ARRAY_SIZE(wszInterface) - 1 + CHARS_IN_GUID - 1, wszPSC);
+    lstrcpyW(path + ARRAY_SIZE(wszInterface) - 1 + CHARS_IN_GUID - 1, wszPSC);
 
     hr = get_ps_clsid_from_registry(path, 0, pclsid);
     if (FAILED(hr) && (opposite == KEY_WOW64_32KEY ||
@@ -2911,7 +3002,7 @@ static enum comclass_threadingmodel get_threading_model(const struct class_reg_d
         static const WCHAR wszApartment[] = {'A','p','a','r','t','m','e','n','t',0};
         static const WCHAR wszFree[] = {'F','r','e','e',0};
         static const WCHAR wszBoth[] = {'B','o','t','h',0};
-        WCHAR threading_model[10 /* strlenW(L"apartment")+1 */];
+        WCHAR threading_model[10 /* lstrlenW(L"apartment")+1 */];
         DWORD dwLength = sizeof(threading_model);
         DWORD keytype;
         DWORD ret;
@@ -2920,9 +3011,9 @@ static enum comclass_threadingmodel get_threading_model(const struct class_reg_d
         if ((ret != ERROR_SUCCESS) || (keytype != REG_SZ))
             threading_model[0] = '\0';
 
-        if (!strcmpiW(threading_model, wszApartment)) return ThreadingModel_Apartment;
-        if (!strcmpiW(threading_model, wszFree)) return ThreadingModel_Free;
-        if (!strcmpiW(threading_model, wszBoth)) return ThreadingModel_Both;
+        if (!wcsicmp(threading_model, wszApartment)) return ThreadingModel_Apartment;
+        if (!wcsicmp(threading_model, wszFree)) return ThreadingModel_Free;
+        if (!wcsicmp(threading_model, wszBoth)) return ThreadingModel_Both;
 
         /* there's not specific handling for this case */
         if (threading_model[0]) return ThreadingModel_Neutral;
@@ -5091,7 +5182,7 @@ HRESULT Handler_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
         if (get_object_dll_path(&regdata, dllpath, ARRAY_SIZE(dllpath)))
         {
             static const WCHAR wszOle32[] = {'o','l','e','3','2','.','d','l','l',0};
-            if (!strcmpiW(dllpath, wszOle32))
+            if (!wcsicmp(dllpath, wszOle32))
             {
                 RegCloseKey(hkey);
                 return HandlerCF_Create(rclsid, riid, ppv);
@@ -5142,6 +5233,26 @@ HRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier)
     return info->apt ? S_OK : CO_E_NOTINITIALIZED;
 }
 
+/***********************************************************************
+ *           CoDisableCallCancellation [OLE32.@]
+ */
+HRESULT WINAPI CoDisableCallCancellation(void *reserved)
+{
+    FIXME("(%p): stub\n", reserved);
+
+    return E_NOTIMPL;
+}
+
+/***********************************************************************
+ *           CoEnableCallCancellation [OLE32.@]
+ */
+HRESULT WINAPI CoEnableCallCancellation(void *reserved)
+{
+    FIXME("(%p): stub\n", reserved);
+
+    return E_NOTIMPL;
+}
+
 /***********************************************************************
  *           CoRegisterSurrogate [OLE32.@]
  */
index 1e564a3..bda1c6b 100644 (file)
@@ -153,6 +153,13 @@ struct apartment
   BOOL main;               /* is this a main-threaded-apartment? (RO) */
 };
 
+struct init_spy
+{
+    struct list entry;
+    IInitializeSpy *spy;
+    unsigned int id;
+};
+
 /* this is what is stored in TEB->ReservedForOle */
 struct oletls
 {
@@ -160,7 +167,7 @@ struct oletls
     IErrorInfo       *errorinfo;   /* see errorinfo.c */
     IUnknown         *state;       /* see CoSetState */
     DWORD             apt_mask;    /* apartment mask (+0Ch on x86) */
-    IInitializeSpy   *spy;         /* The "SPY" from CoInitializeSpy */
+    void            *unknown0;
     DWORD            inits;        /* number of times CoInitializeEx called */
     DWORD            ole_inits;    /* number of times OleInitialize called */
     GUID             causality_id; /* unique identifier for each COM call */
@@ -171,6 +178,8 @@ struct oletls
     IUnknown        *call_state;    /* current call context (+3Ch on x86) */
     DWORD            unknown2[46];
     IUnknown        *cancel_object; /* cancel object set by CoSetCancelObject (+F8h on x86) */
+    struct list      spies;         /* Spies installed with CoRegisterInitializeSpy */
+    DWORD            spies_lock;
 };
 
 
@@ -262,7 +271,12 @@ APARTMENT *apartment_get_current_or_mta(void) DECLSPEC_HIDDEN;
 static inline struct oletls *COM_CurrentInfo(void)
 {
     if (!NtCurrentTeb()->ReservedForOle)
-        NtCurrentTeb()->ReservedForOle = heap_alloc_zero(sizeof(struct oletls));
+    {
+        struct oletls *oletls = heap_alloc_zero(sizeof(*oletls));
+        if (oletls)
+            list_init(&oletls->spies);
+        NtCurrentTeb()->ReservedForOle = oletls;
+    }
 
     return NtCurrentTeb()->ReservedForOle;
 }
index 75d97fa..5f5c8c7 100644 (file)
@@ -29,7 +29,6 @@
 #include "winuser.h"
 #include "winerror.h"
 #include "wine/debug.h"
-#include "wine/unicode.h"
 #include "ole2.h"
 #include "moniker.h"
 
@@ -433,6 +432,7 @@ static HRESULT WINAPI
 CompositeMonikerImpl_Reduce(IMoniker* iface, IBindCtx* pbc, DWORD dwReduceHowFar,
                IMoniker** ppmkToLeft, IMoniker** ppmkReduced)
 {
+    HRESULT   res;
     IMoniker *tempMk,*antiMk,*rightMostMk,*leftReducedComposedMk,*rightMostReducedMk;
     IEnumMoniker *enumMoniker;
 
@@ -453,7 +453,11 @@ CompositeMonikerImpl_Reduce(IMoniker* iface, IBindCtx* pbc, DWORD dwReduceHowFar
         IMoniker_ComposeWith(iface,antiMk,0,&tempMk);
         IMoniker_Release(antiMk);
 
-        return IMoniker_Reduce(rightMostMk,pbc,dwReduceHowFar,&tempMk, ppmkReduced);
+        res = IMoniker_Reduce(rightMostMk,pbc,dwReduceHowFar,&tempMk, ppmkReduced);
+        IMoniker_Release(tempMk);
+        IMoniker_Release(rightMostMk);
+
+        return res;
     }
     else if (*ppmkToLeft==NULL)
 
@@ -473,13 +477,16 @@ CompositeMonikerImpl_Reduce(IMoniker* iface, IBindCtx* pbc, DWORD dwReduceHowFar
         /* If any of the components  reduces itself, the method returns S_OK and passes back a composite */
         /* of the reduced components */
         if (IMoniker_Reduce(rightMostMk,pbc,dwReduceHowFar,NULL,&rightMostReducedMk) &&
-            IMoniker_Reduce(rightMostMk,pbc,dwReduceHowFar,&tempMk,&leftReducedComposedMk)
-           )
+            IMoniker_Reduce(rightMostMk,pbc,dwReduceHowFar,&tempMk,&leftReducedComposedMk) ){
+            IMoniker_Release(tempMk);
+            IMoniker_Release(rightMostMk);
 
             return CreateGenericComposite(leftReducedComposedMk,rightMostReducedMk,ppmkReduced);
-
+        }
         else{
             /* If no reduction occurred, the method passes back the same moniker and returns MK_S_REDUCED_TO_SELF.*/
+            IMoniker_Release(tempMk);
+            IMoniker_Release(rightMostMk);
 
             IMoniker_AddRef(iface);
 
@@ -1133,7 +1140,7 @@ CompositeMonikerImpl_GetDisplayName(IMoniker* iface, IBindCtx* pbc,
         if (*ppszDisplayName==NULL)
             return E_OUTOFMEMORY;
 
-        strcatW(*ppszDisplayName,tempStr);
+        lstrcatW(*ppszDisplayName,tempStr);
 
         CoTaskMemFree(tempStr);
         IMoniker_Release(tempMk);
index 3eff569..4e4f264 100644 (file)
@@ -57,7 +57,6 @@
 #include "winerror.h"
 #include "ole2.h"
 #include "compobj_private.h"
-#include "wine/unicode.h"
 #include "wine/list.h"
 #include "wine/debug.h"
 
@@ -1003,7 +1002,7 @@ static HRESULT save_mfpict(DataCacheEntry *entry, BOOL contents, IStream *stream
         meta_place_rec.bounding_box[3] = (LONGLONG)mfpict->yExt * meta_place_rec.inch / 2540;
         GlobalUnlock(entry->stgmedium.u.hMetaFilePict);
 
-        for (check = (WORD *)&meta_place_rec; check != (WORD *)&meta_place_rec.checksum; check++)
+        for (check = (WORD *)&meta_place_rec; check != &meta_place_rec.checksum; check++)
             meta_place_rec.checksum ^= *check;
         hr = IStream_Write(stream, &meta_place_rec, sizeof(struct meta_placeable), NULL);
         if (hr == S_OK && data_size)
index e6c52cd..c1045c1 100644 (file)
@@ -60,7 +60,6 @@
 #include "compobj_private.h"
 #include "storage32.h"
 
-#include "wine/unicode.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -449,14 +448,14 @@ static HRESULT WINAPI DefaultHandler_SetHostNames(
   {
       if ((This->containerApp = HeapAlloc( GetProcessHeap(), 0,
                                            (lstrlenW(szContainerApp) + 1) * sizeof(WCHAR) )))
-          strcpyW( This->containerApp, szContainerApp );
+          lstrcpyW( This->containerApp, szContainerApp );
   }
 
   if (szContainerObj)
   {
       if ((This->containerObj = HeapAlloc( GetProcessHeap(), 0,
                                            (lstrlenW(szContainerObj) + 1) * sizeof(WCHAR) )))
-          strcpyW( This->containerObj, szContainerObj );
+          lstrcpyW( This->containerObj, szContainerObj );
   }
   return S_OK;
 }
index d5ec172..6aa3a33 100644 (file)
@@ -34,7 +34,6 @@
 #include "oleauto.h"
 #include "winerror.h"
 
-#include "wine/unicode.h"
 #include "compobj_private.h"
 
 #include "wine/debug.h"
@@ -48,7 +47,7 @@ static inline WCHAR *heap_strdupW(const WCHAR *str)
     if(str) {
         size_t size;
 
-        size = (strlenW(str)+1)*sizeof(WCHAR);
+        size = (lstrlenW(str)+1)*sizeof(WCHAR);
         ret = heap_alloc(size);
         if(ret)
             memcpy(ret, str, size);
index c5cb45f..e9699c0 100644 (file)
@@ -41,7 +41,6 @@
 #include "storage32.h"
 
 #include "wine/debug.h"
-#include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(storage);
 
@@ -117,7 +116,7 @@ HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsN
        HeapFree(GetProcessHeap(), 0, This);
        return E_OUTOFMEMORY;
     }
-    strcpyW(This->pwcsName, fullpath);
+    lstrcpyW(This->pwcsName, fullpath);
   }
   else
     This->pwcsName = NULL;
@@ -376,7 +375,7 @@ static HRESULT WINAPI FileLockBytesImpl_Stat(ILockBytes* iface,
         pstatstg->pwcsName =
           CoTaskMemAlloc((lstrlenW(This->pwcsName)+1)*sizeof(WCHAR));
 
-        strcpyW(pstatstg->pwcsName, This->pwcsName);
+        lstrcpyW(pstatstg->pwcsName, This->pwcsName);
     }
     else
         pstatstg->pwcsName = NULL;
index 271e5bb..1e945f9 100644 (file)
@@ -30,7 +30,6 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "winnls.h"
-#include "wine/unicode.h"
 #include "wine/debug.h"
 #include "objbase.h"
 #include "moniker.h"
@@ -693,14 +692,14 @@ FileMonikerImpl_ComposeWith(IMoniker* iface, IMoniker* pmkRight,
         lastIdx1=FileMonikerImpl_DecomposePath(str1,&strDec1)-1;
         lastIdx2=FileMonikerImpl_DecomposePath(str2,&strDec2)-1;
 
-        if ((lastIdx1==-1 && lastIdx2>-1)||(lastIdx1==1 && lstrcmpW(strDec1[0],twoPoint)==0))
+        if ((lastIdx1==-1 && lastIdx2>-1)||(lastIdx1==1 && wcscmp(strDec1[0],twoPoint)==0))
             res = MK_E_SYNTAX;
         else{
-            if(lstrcmpW(strDec1[lastIdx1],bkSlash)==0)
+            if(wcscmp(strDec1[lastIdx1],bkSlash)==0)
                 lastIdx1--;
 
             /* for each "..\" in the left of str2 remove the right element from str1 */
-            for(i=0; ( (lastIdx1>=0) && (strDec2[i]!=NULL) && (lstrcmpW(strDec2[i],twoPoint)==0) ); i+=2){
+            for(i=0; ( (lastIdx1>=0) && (strDec2[i]!=NULL) && (wcscmp(strDec2[i],twoPoint)==0) ); i+=2){
 
                 lastIdx1-=2;
             }
@@ -711,13 +710,13 @@ FileMonikerImpl_ComposeWith(IMoniker* iface, IMoniker* pmkRight,
             if (newStr){
                 /* new path is the concatenation of the rest of str1 and str2 */
                 for(*newStr=0,j=0;j<=lastIdx1;j++)
-                    strcatW(newStr,strDec1[j]);
+                    lstrcatW(newStr,strDec1[j]);
 
-                if ((strDec2[i]==NULL && lastIdx1>-1 && lastIdx2>-1) || lstrcmpW(strDec2[i],bkSlash)!=0)
-                    strcatW(newStr,bkSlash);
+                if ((strDec2[i]==NULL && lastIdx1>-1 && lastIdx2>-1) || wcscmp(strDec2[i],bkSlash)!=0)
+                    lstrcatW(newStr,bkSlash);
 
                 for(j=i;j<=lastIdx2;j++)
-                    strcatW(newStr,strDec2[j]);
+                    lstrcatW(newStr,strDec2[j]);
 
                 /* create a new moniker with the new string */
                 res=CreateFileMoniker(newStr,ppmkComposite);
@@ -1003,7 +1002,7 @@ FileMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOther,IMoniker** p
     else
     {
         for (i = 0; i < sameIdx; i++)
-            strcatW(commonPath,stringTable1[i]);
+            lstrcatW(commonPath,stringTable1[i]);
         ret = CreateFileMoniker(commonPath, ppmkPrefix);
     }
 
@@ -1057,7 +1056,7 @@ int FileMonikerImpl_DecomposePath(LPCOLESTR str, LPOLESTR** stringTable)
                 goto lend;
             }
 
-            strcpyW(strgtable[tabIndex++],bSlash);
+            lstrcpyW(strgtable[tabIndex++],bSlash);
 
             i++;
 
@@ -1077,7 +1076,7 @@ int FileMonikerImpl_DecomposePath(LPCOLESTR str, LPOLESTR** stringTable)
                 goto lend;
             }
 
-            strcpyW(strgtable[tabIndex++],word);
+            lstrcpyW(strgtable[tabIndex++],word);
         }
     }
     strgtable[tabIndex]=NULL;
@@ -1157,11 +1156,11 @@ FileMonikerImpl_RelativePathTo(IMoniker* iface,IMoniker* pmOther, IMoniker** ppm
     if (len2>0 && !(len1==1 && len2==1 && sameIdx==0))
         for(j=sameIdx;(tabStr1[j] != NULL); j++)
             if (*tabStr1[j]!='\\')
-                strcatW(relPath,back);
+                lstrcatW(relPath,back);
 
     /* add items of the second path (similar items with the first path are not included) to the relativePath */
     for(j=sameIdx;tabStr2[j]!=NULL;j++)
-        strcatW(relPath,tabStr2[j]);
+        lstrcatW(relPath,tabStr2[j]);
 
     res=CreateFileMoniker(relPath,ppmkRelPath);
 
@@ -1199,7 +1198,7 @@ FileMonikerImpl_GetDisplayName(IMoniker* iface, IBindCtx* pbc,
     if (*ppszDisplayName==NULL)
         return E_OUTOFMEMORY;
 
-    strcpyW(*ppszDisplayName,This->filePathName);
+    lstrcpyW(*ppszDisplayName,This->filePathName);
 
     TRACE("-- %s\n", debugstr_w(*ppszDisplayName));
     
@@ -1281,7 +1280,7 @@ FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData,
                                           ULONG cbMax, ULONG* pcbData)
 {
     FileMonikerImpl *This = impl_from_IROTData(iface);
-    int len = strlenW(This->filePathName)+1;
+    int len = lstrlenW(This->filePathName)+1;
     int i;
     LPWSTR pszFileName;
 
@@ -1294,7 +1293,7 @@ FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData,
     memcpy(pbData, &CLSID_FileMoniker, sizeof(CLSID));
     pszFileName = (LPWSTR)(pbData+sizeof(CLSID));
     for (i = 0; i < len; i++)
-        pszFileName[i] = toupperW(This->filePathName[i]);
+        pszFileName[i] = towupper(This->filePathName[i]);
 
     return S_OK;
 }
@@ -1364,25 +1363,25 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa
     if (This->filePathName==NULL)
         return E_OUTOFMEMORY;
 
-    strcpyW(This->filePathName,lpszPathName);
+    lstrcpyW(This->filePathName,lpszPathName);
 
     nb=FileMonikerImpl_DecomposePath(This->filePathName,&tabStr);
 
     if (nb > 0 ){
 
         addBkSlash = TRUE;
-        if (lstrcmpW(tabStr[0],twoPoint)!=0)
+        if (wcscmp(tabStr[0],twoPoint)!=0)
             addBkSlash = FALSE;
         else
             for(i=0;i<nb;i++){
 
-                if ( (lstrcmpW(tabStr[i],twoPoint)!=0) && (lstrcmpW(tabStr[i],bkSlash)!=0) ){
+                if ( (wcscmp(tabStr[i],twoPoint)!=0) && (wcscmp(tabStr[i],bkSlash)!=0) ){
                     addBkSlash = FALSE;
                     break;
                 }
                 else
 
-                    if (lstrcmpW(tabStr[i],bkSlash)==0 && i<nb-1 && lstrcmpW(tabStr[i+1],bkSlash)==0){
+                    if (wcscmp(tabStr[i],bkSlash)==0 && i<nb-1 && wcscmp(tabStr[i+1],bkSlash)==0){
                         *tabStr[i]=0;
                         sizeStr--;
                         addBkSlash = FALSE;
@@ -1390,7 +1389,7 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa
                     }
             }
 
-        if (lstrcmpW(tabStr[nb-1],bkSlash)==0)
+        if (wcscmp(tabStr[nb-1],bkSlash)==0)
             addBkSlash = FALSE;
 
         This->filePathName=HeapReAlloc(GetProcessHeap(),0,This->filePathName,(sizeStr+1)*sizeof(WCHAR));
@@ -1398,10 +1397,10 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa
         *This->filePathName=0;
 
         for(i=0;tabStr[i]!=NULL;i++)
-            strcatW(This->filePathName,tabStr[i]);
+            lstrcatW(This->filePathName,tabStr[i]);
 
         if (addBkSlash)
-            strcatW(This->filePathName,bkSlash);
+            lstrcatW(This->filePathName,bkSlash);
     }
 
     free_stringtable(tabStr);
@@ -1446,7 +1445,7 @@ HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, IMoniker **ppmk)
 static inline WCHAR *memrpbrkW(const WCHAR *ptr, size_t n, const WCHAR *accept)
 {
     const WCHAR *end, *ret = NULL;
-    for (end = ptr + n; ptr < end; ptr++) if (strchrW(accept, *ptr)) ret = ptr;
+    for (end = ptr + n; ptr < end; ptr++) if (wcschr(accept, *ptr)) ret = ptr;
     return (WCHAR *)ret;
 }
 
@@ -1456,7 +1455,7 @@ HRESULT FileMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName,
     LPCWSTR end;
     static const WCHAR wszSeparators[] = {':','\\','/','!',0};
 
-    for (end = szDisplayName + strlenW(szDisplayName);
+    for (end = szDisplayName + lstrlenW(szDisplayName);
          end && (end != szDisplayName);
          end = memrpbrkW(szDisplayName, end - szDisplayName, wszSeparators))
     {
index c36f5f6..851810d 100644 (file)
@@ -18,8 +18,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <stdlib.h>
 #include <stdarg.h>
 #include <stdio.h>
index 2c08710..c9ec529 100644 (file)
@@ -22,8 +22,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <assert.h>
 #include <stdlib.h>
 #include <stdarg.h>
index c9e5625..ea03e9b 100644 (file)
@@ -18,8 +18,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <ctype.h>
 #include <stdarg.h>
 #include <stdlib.h>
index 14beada..3bf1201 100644 (file)
@@ -32,7 +32,6 @@
 #include "winnls.h"
 #include "wine/debug.h"
 #include "ole2.h"
-#include "wine/unicode.h"
 #include "moniker.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -487,7 +486,7 @@ static HRESULT WINAPI ItemMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOther
     if(SUCCEEDED ((res = CreateBindCtx(0,&bind)))) {
         if(SUCCEEDED (IMoniker_GetDisplayName(iface,bind,NULL,&dispName1))) {
            if(SUCCEEDED (IMoniker_GetDisplayName(pmkOtherMoniker,bind,NULL,&dispName2))) {
-                if(lstrcmpW(dispName1,dispName2)==0) res = S_OK;
+                if(wcscmp(dispName1,dispName2)==0) res = S_OK;
                 CoTaskMemFree(dispName2);
             }
             CoTaskMemFree(dispName1);
@@ -514,7 +513,7 @@ static HRESULT WINAPI ItemMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash)
     len = lstrlenW(val);
 
     for (i = len ; i > 0; i--)
-        h = (h * 3) ^ toupperW(val[off++]);
+        h = (h * 3) ^ towupper(val[off++]);
 
     *pdwHash=h;
 
@@ -813,7 +812,7 @@ static HRESULT WINAPI ItemMonikerROTDataImpl_GetComparisonData(IROTData* iface,
                                                                ULONG* pcbData)
 {
     ItemMonikerImpl *This = impl_from_IROTData(iface);
-    int len = (strlenW(This->itemName)+1);
+    int len = (lstrlenW(This->itemName)+1);
     int i;
     LPWSTR pszItemName;
     LPWSTR pszItemDelimiter;
@@ -832,7 +831,7 @@ static HRESULT WINAPI ItemMonikerROTDataImpl_GetComparisonData(IROTData* iface,
     /* write name */
     pszItemName = pszItemDelimiter + 1;
     for (i = 0; i < len; i++)
-        pszItemName[i] = toupperW(This->itemName[i]);
+        pszItemName[i] = towupper(This->itemName[i]);
 
     return S_OK;
 }
index b12082c..4b8945d 100644 (file)
@@ -32,7 +32,6 @@
 #include "objbase.h"
 #include "ole2.h"
 #include "winerror.h"
-#include "wine/unicode.h"
 
 #include "compobj_private.h"
 
index b2fc5b4..2d7d457 100644 (file)
@@ -19,8 +19,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <assert.h>
 #include <stdarg.h>
 #include <string.h>
index c1312d1..23ce032 100644 (file)
@@ -21,9 +21,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-#include "wine/port.h"
-
 #include <stdarg.h>
 #include <string.h>
 
@@ -39,7 +36,6 @@
 
 #include "wine/list.h"
 #include "wine/debug.h"
-#include "wine/unicode.h"
 #include "wine/exception.h"
 
 #include "compobj_private.h"
@@ -282,7 +278,7 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparison
             return hr;
         }
 
-        len = strlenW(pszDisplayName);
+        len = lstrlenW(pszDisplayName);
         *moniker_data = HeapAlloc(GetProcessHeap(), 0,
             FIELD_OFFSET(MonikerComparisonData, abData[sizeof(CLSID) + (len+1)*sizeof(WCHAR)]));
         if (!*moniker_data)
@@ -1152,7 +1148,7 @@ HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szDisplayName,
     *pchEaten = 0;
     *ppmk = NULL;
 
-    if (!strncmpiW(szDisplayName, wszClsidColon, ARRAY_SIZE(wszClsidColon)))
+    if (!_wcsnicmp(szDisplayName, wszClsidColon, ARRAY_SIZE(wszClsidColon)))
     {
         hr = ClassMoniker_CreateFromDisplayName(pbc, szDisplayName, &chEaten, &moniker);
         if (FAILED(hr) && (hr != MK_E_SYNTAX))
@@ -1269,7 +1265,7 @@ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid)
     absFile=pathDec[nbElm-1];
 
     /* failed if the path represents a directory and not an absolute file name*/
-    if (!lstrcmpW(absFile, bkslashW)) {
+    if (!wcscmp(absFile, bkslashW)) {
         CoTaskMemFree(pathDec);
         return MK_E_INVALIDEXTENSION;
     }
@@ -1280,7 +1276,7 @@ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid)
     for(i = length-1; (i >= 0) && *(extension = &absFile[i]) != '.'; i--)
         /* nothing */;
 
-    if (!extension || !lstrcmpW(extension, dotW)) {
+    if (!extension || !wcscmp(extension, dotW)) {
         CoTaskMemFree(pathDec);
         return MK_E_INVALIDEXTENSION;
     }
index f145982..0ab5f37 100644 (file)
@@ -23,8 +23,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <assert.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -44,7 +42,6 @@
 #include "ole2.h"
 #include "ole2ver.h"
 
-#include "wine/unicode.h"
 #include "compobj_private.h"
 #include "olestd.h"
 #include "wine/list.h"
@@ -706,7 +703,7 @@ HRESULT WINAPI OleRegGetUserType(REFCLSID clsid, DWORD form, LPOLESTR *usertype)
   {
     HKEY auxkey;
 
-    sprintfW(auxkeynameW, auxusertypeW, form);
+    swprintf(auxkeynameW, auxusertypeW, form);
     if (COM_OpenKeyForCLSID(clsid, auxkeynameW, KEY_READ, &auxkey) == S_OK)
     {
       if (!RegQueryValueExW(auxkey, emptyW, NULL, &valuetype, NULL, &valuelen) && valuelen)
@@ -895,7 +892,7 @@ HRESULT WINAPI OleRegGetMiscStatus(
   /*
    * Open the key specific to the requested aspect.
    */
-  sprintfW(keyName, dfmtW, dwAspect);
+  swprintf(keyName, dfmtW, dwAspect);
 
   result = open_classes_key(miscStatusKey, keyName, KEY_READ, &aspectKey);
   if (result == ERROR_SUCCESS)
@@ -1014,7 +1011,7 @@ static HRESULT WINAPI EnumOLEVERB_Next(
         }
 
         TRACE("verb string: %s\n", debugstr_w(pwszOLEVERB));
-        pwszMenuFlags = strchrW(pwszOLEVERB, ',');
+        pwszMenuFlags = wcschr(pwszOLEVERB, ',');
         if (!pwszMenuFlags)
         {
             hr = OLEOBJ_E_INVALIDVERB;
@@ -1024,7 +1021,7 @@ static HRESULT WINAPI EnumOLEVERB_Next(
         /* nul terminate the name string and advance to first character */
         *pwszMenuFlags = '\0';
         pwszMenuFlags++;
-        pwszAttribs = strchrW(pwszMenuFlags, ',');
+        pwszAttribs = wcschr(pwszMenuFlags, ',');
         if (!pwszAttribs)
         {
             hr = OLEOBJ_E_INVALIDVERB;
@@ -1036,10 +1033,10 @@ static HRESULT WINAPI EnumOLEVERB_Next(
         pwszAttribs++;
 
         /* fill out structure for this verb */
-        rgelt->lVerb = atolW(wszSubKey);
+        rgelt->lVerb = wcstol(wszSubKey, NULL, 10);
         rgelt->lpszVerbName = pwszOLEVERB; /* user should free */
-        rgelt->fuFlags = atolW(pwszMenuFlags);
-        rgelt->grfAttribs = atolW(pwszAttribs);
+        rgelt->fuFlags = wcstol(pwszMenuFlags, NULL, 10);
+        rgelt->grfAttribs = wcstol(pwszAttribs, NULL, 10);
 
         if (pceltFetched)
             (*pceltFetched)++;
@@ -2552,7 +2549,7 @@ static void OLEUTL_ReadRegistryDWORDValue(
       case REG_EXPAND_SZ:
       case REG_MULTI_SZ:
       case REG_SZ:
-       *pdwValue = (DWORD)strtoulW(buffer, NULL, 10);
+       *pdwValue = wcstoul(buffer, NULL, 10);
        break;
     }
   }
@@ -2744,7 +2741,7 @@ HRESULT WINAPI OleSetAutoConvert(REFCLSID clsidOld, REFCLSID clsidNew)
     if (FAILED(res))
         goto done;
     StringFromGUID2(clsidNew, szClsidNew, CHARS_IN_GUID);
-    if (RegSetValueW(hkey, wszAutoConvertTo, REG_SZ, szClsidNew, (strlenW(szClsidNew)+1) * sizeof(WCHAR)))
+    if (RegSetValueW(hkey, wszAutoConvertTo, REG_SZ, szClsidNew, (lstrlenW(szClsidNew)+1) * sizeof(WCHAR)))
     {
         res = REGDB_E_WRITEREGDB;
        goto done;
@@ -2940,6 +2937,25 @@ static inline HRESULT PROPVARIANT_ValidateType(VARTYPE vt)
     case VT_FILETIME|VT_VECTOR:
     case VT_CF|VT_VECTOR:
     case VT_CLSID|VT_VECTOR:
+    case VT_ARRAY|VT_I1:
+    case VT_ARRAY|VT_UI1:
+    case VT_ARRAY|VT_I2:
+    case VT_ARRAY|VT_UI2:
+    case VT_ARRAY|VT_I4:
+    case VT_ARRAY|VT_UI4:
+    case VT_ARRAY|VT_INT:
+    case VT_ARRAY|VT_UINT:
+    case VT_ARRAY|VT_R4:
+    case VT_ARRAY|VT_R8:
+    case VT_ARRAY|VT_CY:
+    case VT_ARRAY|VT_DATE:
+    case VT_ARRAY|VT_BSTR:
+    case VT_ARRAY|VT_BOOL:
+    case VT_ARRAY|VT_DECIMAL:
+    case VT_ARRAY|VT_DISPATCH:
+    case VT_ARRAY|VT_UNKNOWN:
+    case VT_ARRAY|VT_ERROR:
+    case VT_ARRAY|VT_VARIANT:
         return S_OK;
     }
     WARN("Bad type %d\n", vt);
@@ -3051,6 +3067,8 @@ HRESULT WINAPI PropVariantClear(PROPVARIANT * pvar) /* [in/out] */
                 CoTaskMemFree(pvar->u.capropvar.pElems);
             }
         }
+        else if (pvar->vt & VT_ARRAY)
+            hr = SafeArrayDestroy(pvar->u.parray);
         else
         {
             WARN("Invalid/unsupported type %d\n", pvar->vt);
@@ -3231,6 +3249,11 @@ HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest,      /* [out] */
             else
                 CopyMemory(pvarDest->u.capropvar.pElems, pvarSrc->u.capropvar.pElems, len * elemSize);
         }
+        else if (pvarSrc->vt & VT_ARRAY)
+        {
+            pvarDest->u.uhVal.QuadPart = 0;
+            return SafeArrayCopy(pvarSrc->u.parray, &pvarDest->u.parray);
+        }
         else
             WARN("Invalid/unsupported type %d\n", pvarSrc->vt);
     }
index d7fd58c..49130c5 100644 (file)
@@ -19,8 +19,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <stdarg.h>
 
 #include "windef.h"
index 9766791..b56b01d 100644 (file)
 @ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr)
 # CoCreateObjectInContext
 # CoDeactivateObject
-@ stdcall -stub CoDisableCallCancellation(ptr)
+@ stdcall CoDisableCallCancellation(ptr)
 @ stdcall -stub -version=0x600+ CoDisconnectContext(long)
 @ stdcall CoDisconnectObject(ptr long)
 @ stdcall CoDosDateTimeToFileTime(long long ptr) kernel32.DosDateTimeToFileTime
-@ stdcall -stub CoEnableCallCancellation(ptr)
+@ stdcall CoEnableCallCancellation(ptr)
 @ stdcall CoFileTimeNow(ptr)
 @ stdcall CoFileTimeToDosDateTime(ptr ptr ptr) kernel32.FileTimeToDosDateTime
 @ stdcall CoFreeAllLibraries()
index 7c12f1c..c38c525 100644 (file)
@@ -18,9 +18,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-#include "wine/port.h"
-
 #include <stdarg.h>
 #include <stdio.h>
 
index 44e15e5..13a8736 100644 (file)
@@ -41,11 +41,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
 
 static void release_statdata(STATDATA *data)
 {
-    if(data->formatetc.ptd)
-    {
-        CoTaskMemFree(data->formatetc.ptd);
-        data->formatetc.ptd = NULL;
-    }
+    CoTaskMemFree(data->formatetc.ptd);
+    data->formatetc.ptd = NULL;
 
     if(data->pAdvSink)
     {
index a7b8e39..b5c08ff 100644 (file)
@@ -19,8 +19,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-
 #include <stdlib.h>
 #include <stdarg.h>
 #include <stdio.h>
index c9ea845..634e323 100644 (file)
@@ -2,8 +2,6 @@
 #ifndef _OLE32_PCH_
 #define _OLE32_PCH_
 
-#include <wine/config.h>
-
 #include <assert.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -30,7 +28,6 @@
 
 #include <wine/debug.h>
 #include <wine/list.h>
-#include <wine/unicode.h>
 
 #include "compobj_private.h"
 #include "dictionary.h"
index bd4611d..895aa40 100644 (file)
@@ -20,9 +20,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-#include "wine/port.h"
-
 #include <stdarg.h>
 #include <string.h>
 
@@ -39,7 +36,6 @@
 #include "winerror.h"
 #include "winreg.h"
 #include "servprov.h"
-#include "wine/unicode.h"
 
 #include "compobj_private.h"
 
@@ -1684,7 +1680,7 @@ static HRESULT create_server(REFCLSID rclsid, HANDLE *process)
 
     /* EXE servers are started with the -Embedding switch. */
 
-    strcatW(command, embedding);
+    lstrcatW(command, embedding);
 
     TRACE("activating local server %s for %s\n", debugstr_w(command), debugstr_guid(rclsid));
 
@@ -1800,7 +1796,7 @@ static HRESULT create_local_service(REFCLSID rclsid)
 static void get_localserver_pipe_name(WCHAR *pipefn, REFCLSID rclsid)
 {
     static const WCHAR wszPipeRef[] = {'\\','\\','.','\\','p','i','p','e','\\',0};
-    strcpyW(pipefn, wszPipeRef);
+    lstrcpyW(pipefn, wszPipeRef);
     StringFromGUID2(rclsid, pipefn + ARRAY_SIZE(wszPipeRef) - 1, CHARS_IN_GUID);
 }
 
index 4b968d6..d2e66a1 100644 (file)
@@ -36,9 +36,6 @@
  *   PropertyStorage_ReadFromStream
  */
 
-#include "config.h"
-#include "wine/port.h"
-
 #include <assert.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -52,7 +49,7 @@
 #include "winbase.h"
 #include "winnls.h"
 #include "winuser.h"
-#include "wine/unicode.h"
+#include "wine/asm.h"
 #include "wine/debug.h"
 #include "dictionary.h"
 #include "storage32.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(storage);
 
-#ifdef _MSC_VER
-#define __ASM_STDCALL_FUNC(name,args,code)
-#endif
-
 static inline StorageImpl *impl_from_IPropertySetStorage( IPropertySetStorage *iface )
 {
     return CONTAINING_RECORD(iface, StorageImpl, base.IPropertySetStorage_iface);
@@ -375,7 +368,7 @@ static HRESULT PropertyStorage_StringCopy(LPCSTR src, LCID srcCP, LPSTR *dst,
         size_t len;
 
         if (dstCP == CP_UNICODE)
-            len = (strlenW((LPCWSTR)src) + 1) * sizeof(WCHAR);
+            len = (lstrlenW((LPCWSTR)src) + 1) * sizeof(WCHAR);
         else
             len = strlen(src) + 1;
         *dst = CoTaskMemAlloc(len * sizeof(WCHAR));
@@ -943,7 +936,7 @@ static int PropertyStorage_PropNameCompare(const void *a, const void *b,
     {
         TRACE("(%s, %s)\n", debugstr_w(a), debugstr_w(b));
         if (This->grfFlags & PROPSETFLAG_CASE_SENSITIVE)
-            return lstrcmpW(a, b);
+            return wcscmp(a, b);
         else
             return lstrcmpiW(a, b);
     }
@@ -2513,7 +2506,7 @@ static void prop_enum_copy_cb(IUnknown *parent, void *orig, void *dest)
 
     if (dictionary_find(storage->propid_to_name, UlongToPtr(src_prop->propid), (void**)&name))
     {
-        DWORD size = (strlenW(name) + 1) * sizeof(WCHAR);
+        DWORD size = (lstrlenW(name) + 1) * sizeof(WCHAR);
 
         dest_prop->lpwstrName = CoTaskMemAlloc(size);
         if (!dest_prop->lpwstrName) return;
index a8bbd40..fa3872d 100644 (file)
@@ -43,7 +43,6 @@
 #include "winbase.h"
 #include "winnls.h"
 #include "winuser.h"
-#include "wine/unicode.h"
 #include "wine/debug.h"
 
 #include "storage32.h"
@@ -519,7 +518,7 @@ static LONG entryNameCmp(
     /*
      * We compare the string themselves only when they are of the same length
      */
-    diff = toupperW(*name1++) - toupperW(*name2++);
+    diff = towupper(*name1++) - towupper(*name2++);
   }
 
   return diff;
@@ -1347,7 +1346,7 @@ static HRESULT StorageBaseImpl_CopyChildEntryTo(StorageBaseImpl *This,
 
     while ( *snb != NULL && !skip )
     {
-      if ( lstrcmpW(data.name, *snb) == 0 )
+      if ( wcscmp(data.name, *snb) == 0 )
         skip = TRUE;
       ++snb;
     }
@@ -1891,7 +1890,7 @@ static HRESULT WINAPI StorageBaseImpl_RenameElement(
         currentEntryRef);
 
     /* Change the name of the element */
-    strcpyW(currentEntry.name, pwcsNewName);
+    lstrcpyW(currentEntry.name, pwcsNewName);
 
     /* Delete any sibling links */
     currentEntry.leftChild = DIRENTRY_NULL;
@@ -2013,7 +2012,7 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream(
   if (newStreamEntry.sizeOfNameString > DIRENTRY_NAME_BUFFER_LEN)
     return STG_E_INVALIDNAME;
 
-  strcpyW(newStreamEntry.name, pwcsName);
+  lstrcpyW(newStreamEntry.name, pwcsName);
 
   newStreamEntry.stgType       = STGTY_STREAM;
   newStreamEntry.startingBlock = BLOCK_END_OF_CHAIN;
@@ -2209,7 +2208,7 @@ static HRESULT WINAPI StorageBaseImpl_CreateStorage(
     return STG_E_INVALIDNAME;
   }
 
-  strcpyW(newEntry.name, pwcsName);
+  lstrcpyW(newEntry.name, pwcsName);
 
   newEntry.stgType       = STGTY_STORAGE;
   newEntry.startingBlock = BLOCK_END_OF_CHAIN;
@@ -2357,7 +2356,7 @@ static HRESULT WINAPI StorageBaseImpl_CopyTo(
 
         while ( *snb != NULL && fail )
         {
-          if ( lstrcmpW(data.name, *snb) == 0 )
+          if ( wcscmp(data.name, *snb) == 0 )
             fail = FALSE;
           ++snb;
         }
@@ -4768,7 +4767,7 @@ static HRESULT StorageImpl_Refresh(StorageImpl *This, BOOL new_object, BOOL crea
      * Initialize the directory table
      */
     memset(&rootEntry, 0, sizeof(rootEntry));
-    strcpyW(rootEntry.name, rootentryW);
+    lstrcpyW(rootEntry.name, rootentryW);
     rootEntry.sizeOfNameString = sizeof(rootentryW);
     rootEntry.stgType          = STGTY_ROOT;
     rootEntry.leftChild        = DIRENTRY_NULL;
@@ -7040,7 +7039,7 @@ void StorageUtl_CopyDirEntryToSTATSTG(
     destination->pwcsName =
       CoTaskMemAlloc((lstrlenW(source->name)+1)*sizeof(WCHAR));
 
-    strcpyW(destination->pwcsName, source->name);
+    lstrcpyW(destination->pwcsName, source->name);
   }
 
   switch (source->stgType)
index 9f19b66..ba318c6 100644 (file)
@@ -35,7 +35,6 @@
 #include "oleauto.h"
 #include "rpcproxy.h"
 
-#include "wine/unicode.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -1716,7 +1715,7 @@ ULONG __RPC_USER STGMEDIUM_UserSize(ULONG *pFlags, ULONG StartingSize, STGMEDIUM
         {
             TRACE("file name is %s\n", debugstr_w(pStgMedium->u.lpszFileName));
             size += 3 * sizeof(DWORD) +
-                (strlenW(pStgMedium->u.lpszFileName) + 1) * sizeof(WCHAR);
+                (lstrlenW(pStgMedium->u.lpszFileName) + 1) * sizeof(WCHAR);
         }
         break;
     case TYMED_ISTREAM:
@@ -1814,7 +1813,7 @@ unsigned char * __RPC_USER STGMEDIUM_UserMarshal(ULONG *pFlags, unsigned char *p
         if (pStgMedium->u.lpszFileName)
         {
             DWORD len;
-            len = strlenW(pStgMedium->u.lpszFileName);
+            len = lstrlenW(pStgMedium->u.lpszFileName);
             /* conformance */
             *(DWORD *)pBuffer = len + 1;
             pBuffer += sizeof(DWORD);
@@ -2126,7 +2125,7 @@ ULONG __RPC_USER SNB_UserSize(ULONG *pFlags, ULONG StartingSize, SNB *pSnb)
 
         while (*ptrW)
         {
-            size += (strlenW(*ptrW) + 1)*sizeof(WCHAR);
+            size += (lstrlenW(*ptrW) + 1)*sizeof(WCHAR);
             ptrW++;
         }
     }
@@ -2161,7 +2160,7 @@ unsigned char * __RPC_USER SNB_UserMarshal(ULONG *pFlags, unsigned char *pBuffer
 
         while (*ptrW)
         {
-            ULONG len = strlenW(*ptrW) + 1;
+            ULONG len = lstrlenW(*ptrW) + 1;
 
             wire->strcnt++;
             wire->charcnt += len;
@@ -2202,7 +2201,7 @@ unsigned char * __RPC_USER SNB_UserUnmarshal(ULONG *pFlags, unsigned char *pBuff
 
         for (i = 0; i < wire->strcnt; i++)
         {
-            ULONG len = strlenW(src);
+            ULONG len = lstrlenW(src);
             memcpy(dest, src, (len + 1)*sizeof(WCHAR));
             *ptrW = dest;
             src += len + 1;
index 352ad73..2376a96 100644 (file)
@@ -140,7 +140,7 @@ dll/win32/ntdsapi             # Synced to WineStaging-4.18
 dll/win32/objsel              # Synced to WineStaging-4.18
 dll/win32/odbc32              # Synced to WineStaging-4.18. Depends on port of Linux ODBC.
 dll/win32/odbccp32            # Synced to WineStaging-4.18
-dll/win32/ole32               # Synced to WineStaging-4.0
+dll/win32/ole32               # Synced to WineStaging-4.18
 dll/win32/oleacc              # Synced to WineStaging-4.0
 dll/win32/oleaut32            # Synced to WineStaging-4.0
 dll/win32/olecli32            # Synced to WineStaging-3.3