[WIN32K]
authorJérôme Gardou <jerome.gardou@reactos.org>
Fri, 6 Aug 2010 21:33:37 +0000 (21:33 +0000)
committerJérôme Gardou <jerome.gardou@reactos.org>
Fri, 6 Aug 2010 21:33:37 +0000 (21:33 +0000)
  - sync with trunk (48469)

svn path=/branches/reactos-yarotows/; revision=48471

dll/win32/ole32/ole2.c
dll/win32/oleaut32/oleaut32.spec
dll/win32/oleaut32/typelib.c
dll/win32/oleaut32/typelib2.c
drivers/filesystems/cdfs/cdfs.h
drivers/filesystems/cdfs/fsctl.c
subsystems/win32/win32k/eng/xlate.c

index f570167..a9a4885 100644 (file)
@@ -409,6 +409,7 @@ HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
   HRESULT hr;
   IStream *stream;
   HANDLE map;
+  IUnknown *unk;
 
   TRACE("(%p,%p)\n", hwnd, pDropTarget);
 
@@ -449,7 +450,15 @@ HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
   hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
   if(FAILED(hr)) return hr;
 
-  hr = CoMarshalInterface(stream, &IID_IDropTarget, (IUnknown*)pDropTarget, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
+  hr = IDropTarget_QueryInterface(pDropTarget, &IID_IUnknown, (void**)&unk);
+  if(FAILED(hr))
+  {
+      IStream_Release(stream);
+      return hr;
+  }
+  hr = CoMarshalInterface(stream, &IID_IDropTarget, unk, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
+  IUnknown_Release(unk);
+
   if(SUCCEEDED(hr))
   {
     hr = create_map_from_stream(stream, &map);
index 7b764ef..a86486f 100644 (file)
 439 stdcall VarUI8FromUI2(long ptr)
 440 stdcall VarUI8FromUI4(long ptr)
 441 stdcall VarUI8FromDec(long ptr)
+442 stdcall RegisterTypeLibForUser(ptr wstr wstr)
+443 stdcall UnRegisterTypeLibForUser(ptr long long long long)
 
 @ stdcall -private DllCanUnloadNow()
 @ stdcall -private DllGetClassObject(ptr ptr ptr)
index 7fac039..46c0d28 100644 (file)
@@ -903,6 +903,49 @@ end:
     return result;
 }
 
+/******************************************************************************
+ *             RegisterTypeLibForUser  [OLEAUT32.442]
+ * Adds information about a type library to the user registry
+ * NOTES
+ *    Docs: ITypeLib FAR * ptlib
+ *    Docs: OLECHAR FAR* szFullPath
+ *    Docs: OLECHAR FAR* szHelpDir
+ *
+ * RETURNS
+ *    Success: S_OK
+ *    Failure: Status
+ */
+HRESULT WINAPI RegisterTypeLibForUser(
+     ITypeLib * ptlib,     /* [in] Pointer to the library*/
+     OLECHAR * szFullPath, /* [in] full Path of the library*/
+     OLECHAR * szHelpDir)  /* [in] dir to the helpfile for the library,
+                                                        may be NULL*/
+{
+    FIXME("(%p, %s, %s) registering the typelib system-wide\n", ptlib,
+          debugstr_w(szFullPath), debugstr_w(szHelpDir));
+    return RegisterTypeLib(ptlib, szFullPath, szHelpDir);
+}
+
+/******************************************************************************
+ *     UnRegisterTypeLibForUser        [OLEAUT32.443]
+ * Removes information about a type library from the user registry
+ *
+ * RETURNS
+ *    Success: S_OK
+ *    Failure: Status
+ */
+HRESULT WINAPI UnRegisterTypeLibForUser(
+    REFGUID libid,     /* [in] GUID of the library */
+    WORD wVerMajor,    /* [in] major version */
+    WORD wVerMinor,    /* [in] minor version */
+    LCID lcid, /* [in] locale id */
+    SYSKIND syskind)
+{
+    FIXME("(%s, %u, %u, %u, %u) unregistering the typelib system-wide\n",
+          debugstr_guid(libid), wVerMajor, wVerMinor, lcid, syskind);
+    return UnRegisterTypeLib(libid, wVerMajor, wVerMinor, lcid, syskind);
+}
+
 /*======================= ITypeLib implementation =======================*/
 
 typedef struct tagTLBCustData
@@ -6017,13 +6060,13 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
     unsigned int var_index;
     TYPEKIND type_kind;
     HRESULT hres;
-    const TLBFuncDesc *pFuncInfo = This->funclist;
+    const TLBFuncDesc *pFuncInfo;
 
     TRACE("(%p)(%p,id=%d,flags=0x%08x,%p,%p,%p,%p)\n",
       This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr
     );
 
-    if( pFuncInfo->funcdesc.wFuncFlags == FUNCFLAG_FRESTRICTED )
+    if( This->TypeAttr.wTypeFlags & TYPEFLAG_FRESTRICTED )
         return DISP_E_MEMBERNOTFOUND;
 
     if (!pDispParams)
@@ -6045,7 +6088,8 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
      * FUNCDESC for dispinterfaces and we want the real function description */
     for (pFuncInfo = This->funclist; pFuncInfo; pFuncInfo=pFuncInfo->next)
         if ((memid == pFuncInfo->funcdesc.memid) &&
-            (wFlags & pFuncInfo->funcdesc.invkind))
+            (wFlags & pFuncInfo->funcdesc.invkind) &&
+            (pFuncInfo->funcdesc.wFuncFlags & FUNCFLAG_FRESTRICTED) == 0)
             break;
 
     if (pFuncInfo) {
index 1096ea8..92d4ab0 100644 (file)
@@ -317,7 +317,7 @@ static int ctl2_find_guid(
     while (offset != -1) {
        guidentry = (MSFT_GuidEntry *)&This->typelib_segment_data[MSFT_SEG_GUID][offset];
 
-       if (!memcmp(guidentry, guid, sizeof(GUID))) return offset;
+        if (IsEqualGUID(guidentry, guid)) return offset;
 
        offset = guidentry->next_hash;
     }
@@ -1695,7 +1695,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(
         impinfo.oGuid = guid_offset;
         *phRefType = ctl2_alloc_importinfo(This->typelib, &impinfo)+1;
 
-        if(!memcmp(&guid.guid, &IID_IDispatch, sizeof(GUID)))
+        if(IsEqualGUID(&guid.guid, &IID_IDispatch))
             This->typelib->typelib_header.dispatchpos = *phRefType;
     }
 
@@ -2469,7 +2469,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(
                 return hres;
             }
 
-            if(!memcmp(&typeattr->guid, &IID_IDispatch, sizeof(IDispatch)))
+            if(IsEqualGUID(&typeattr->guid, &IID_IDispatch))
                 This->typeinfo->flags |= TYPEFLAG_FDISPATCHABLE;
 
             This->typeinfo->datatype2 += (typeattr->cFuncs<<16) + 1;
index 3f686d3..3b114ef 100644 (file)
@@ -142,7 +142,7 @@ typedef struct _CDINFO
   ULONG JolietLevel;
   ULONG RootStart;
   ULONG RootSize;
-  WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
+  WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
   ULONG VolumeLabelLength;
   ULONG SerialNumber;
 } CDINFO, *PCDINFO;
index 897c081..95db2ea 100644 (file)
@@ -73,11 +73,24 @@ CdfsGetPVDData(PUCHAR Buffer,
     /* Extract the volume label */
     pc = Pvd->VolumeId;
     pw = CdInfo->VolumeLabel;
-    for (i = 0; i < MAXIMUM_VOLUME_LABEL_LENGTH && *pc != ' '; i++)
+    for (i = 0; i < MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR); i++)
     {
         *pw++ = (WCHAR)*pc++;
     }
     *pw = 0;
+
+    /* Trim trailing spaces */
+    while (pw > CdInfo->VolumeLabel)
+    {
+        if (*--pw != ' ') break;
+
+        /* Remove the space */
+        *pw = '\0';
+
+        /* Decrease size */
+        i--;
+    }
+
     CdInfo->VolumeLabelLength = i * sizeof(WCHAR);
 
     CdInfo->VolumeSpaceSize = Pvd->VolumeSpaceSizeL;
index 0dc9ac0..a1ec189 100644 (file)
@@ -83,24 +83,45 @@ EXLATEOBJ_iXlateRGBto555(PEXLATEOBJ pxlo, ULONG iColor)
 {
     ULONG iNewColor;
 
+    /* Copy blue */
+    iColor >>= 3;
+    iNewColor = iColor & 0x1F;
+
+    /* Copy green */
+    iColor >>= 3;
+    iNewColor |= iColor & 0x3E0;
+
+    /* Copy red */
+    iColor >>= 3;
+    iNewColor |= iColor & 0x7C00;
+
+    return iNewColor;
+}
+
+ULONG
+FASTCALL
+EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
+{
+    ULONG iNewColor;
+
     /* Copy red */
     iColor <<= 7;
     iNewColor = iColor & 0x7C00;
 
     /* Copy green */
     iColor >>= 13;
-    iNewColor |= iColor & 0x3E0;
+    iNewColor |= (iColor & 0x3E0);
 
-    /* Copy green */
+    /* Copy blue */
     iColor >>= 13;
-    iNewColor |= iColor & 0x1F;
+    iNewColor |= (iColor & 0x1F);
 
     return iNewColor;
 }
 
 ULONG
 FASTCALL
-EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
+EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
 {
     ULONG iNewColor;
 
@@ -109,19 +130,19 @@ EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
     iNewColor = iColor & 0x1f;
 
     /* Copy green */
-    iColor >>= 3;
-    iNewColor |= (iColor & 0x3E0);
+    iColor >>= 2;
+    iNewColor |= (iColor & 0x7E0);
 
     /* Copy red */
     iColor >>= 3;
-    iNewColor |= (iColor & 0x7C00);
+    iNewColor |= (iColor & 0xF800);
 
     return iNewColor;
 }
 
 ULONG
 FASTCALL
-EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
+EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
 {
     ULONG iNewColor;
 
@@ -140,27 +161,6 @@ EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
     return iNewColor;
 }
 
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
-{
-    ULONG iNewColor;
-
-    /* Copy blue */
-    iColor >>= 3;
-    iNewColor = iColor & 0x1f;
-
-    /* Copy green */
-    iColor >>= 2;
-    iNewColor |= (iColor & 0x7E0);
-
-    /* Copy red */
-    iColor >>= 3;
-    iNewColor |= (iColor & 0xF800);
-
-    return iNewColor;
-}
-
 ULONG
 FASTCALL
 EXLATEOBJ_iXlateRGBtoPal(PEXLATEOBJ pexlo, ULONG iColor)
@@ -175,7 +175,7 @@ EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor = gajXlate5to8[iColor & 0x1F];
 
     /* Copy green */
     iColor >>= 5;
@@ -183,7 +183,7 @@ EXLATEOBJ_iXlate555toRGB(PEXLATEOBJ pxlo, ULONG iColor)
 
     /* Copy red */
     iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F];
+    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
 
     return iNewColor;
 }
@@ -195,7 +195,7 @@ EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F];
+    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
 
     /* Copy green */
     iColor >>= 5;
@@ -203,7 +203,7 @@ EXLATEOBJ_iXlate555toBGR(PEXLATEOBJ pxlo, ULONG iColor)
 
     /* Copy red */
     iColor >>= 5;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor |= gajXlate5to8[iColor & 0x1F];
 
     return iNewColor;
 }
@@ -260,7 +260,7 @@ EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor = gajXlate5to8[iColor & 0x1F];
 
     /* Copy green */
     iColor >>= 5;
@@ -268,7 +268,7 @@ EXLATEOBJ_iXlate565toRGB(PEXLATEOBJ pexlo, ULONG iColor)
 
     /* Copy red */
     iColor >>= 6;
-    iNewColor |= gajXlate5to8[iColor & 0x1F];
+    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
 
     return iNewColor;
 }
@@ -280,15 +280,15 @@ EXLATEOBJ_iXlate565toBGR(PEXLATEOBJ pexlo, ULONG iColor)
     ULONG iNewColor;
 
     /* Copy blue */
-    iNewColor = gajXlate5to8[iColor & 0x1F];
+    iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
 
     /* Copy green */
     iColor >>= 5;
     iNewColor |= gajXlate6to8[iColor & 0x3F] << 8;
 
-    /* Copy blue */
+    /* Copy red */
     iColor >>= 6;
-    iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
+    iNewColor |= gajXlate5to8[iColor & 0x1F];
 
     return iNewColor;
 }