PATCH: split 16bit src for ole2disp
Marcus Meissner
marcus at jet.franken.de
Thu Dec 12 04:15:39 CST 2002
Hi,
This splits out the non 16bit functionality from ole2disp.c and moves
them to oleaut.c and dispatch.c.
Ciao, Marcus
Changelog:
Seperated out 16bit sources for ole2disp.dll
Index: Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/Makefile.in,v
retrieving revision 1.40
diff -u -u -r1.40 Makefile.in
--- Makefile.in 12 Dec 2002 03:56:36 -0000 1.40
+++ Makefile.in 12 Dec 2002 10:15:24 -0000
@@ -16,7 +16,6 @@
connpt.c \
dispatch.c \
hash.c \
- ole2disp.c \
oleaut.c \
olefont.c \
olepicture.c \
@@ -27,7 +26,7 @@
typelib.c \
variant.c
-C_SRCS16 = typelib16.c
+C_SRCS16 = typelib16.c ole2disp.c
RC_SRCS = version.rc
Index: dispatch.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/dispatch.c,v
retrieving revision 1.8
diff -u -u -r1.8 dispatch.c
--- dispatch.c 5 Dec 2002 20:33:08 -0000 1.8
+++ dispatch.c 12 Dec 2002 10:15:25 -0000
@@ -154,3 +154,30 @@
if (hr == DISP_E_TYPEMISMATCH) *puArgErr = pos;
return hr;
}
+
+/******************************************************************************
+ * CreateStdDispatch [OLEAUT32.32]
+ */
+HRESULT WINAPI CreateStdDispatch(
+ IUnknown* punkOuter,
+ void* pvThis,
+ ITypeInfo* ptinfo,
+ IUnknown** ppunkStdDisp)
+{
+ FIXME("(%p,%p,%p,%p),stub\n",punkOuter, pvThis, ptinfo,
+ ppunkStdDisp);
+ return E_NOTIMPL;
+}
+
+/******************************************************************************
+ * CreateDispTypeInfo [OLEAUT32.31]
+ */
+HRESULT WINAPI CreateDispTypeInfo(
+ INTERFACEDATA *pidata,
+ LCID lcid,
+ ITypeInfo **pptinfo)
+{
+ FIXME("(%p,%ld,%p),stub\n",pidata,lcid,pptinfo);
+ return 0;
+}
+
Index: ole2disp.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/ole2disp.c,v
retrieving revision 1.28
diff -u -u -r1.28 ole2disp.c
--- ole2disp.c 25 Oct 2002 03:12:50 -0000 1.28
+++ ole2disp.c 12 Dec 2002 10:15:25 -0000
@@ -85,21 +85,6 @@
}
/******************************************************************************
- * SysAllocString [OLEAUT32.2]
- *
- * MSDN (October 2001) states that this returns a NULL value if the argument
- * is a zero-length string. This does not appear to be true; certainly it
- * returns a value under Win98 (Oleaut32.dll Ver 2.40.4515.0)
- */
-BSTR WINAPI SysAllocString(LPCOLESTR in)
-{
- if (!in) return 0;
-
- /* Delegate this to the SysAllocStringLen32 method. */
- return SysAllocStringLen(in, lstrlenW(in));
-}
-
-/******************************************************************************
* SysReallocString [OLE2DISP.3]
*/
INT16 WINAPI SysReAllocString16(LPBSTR16 old,LPCOLESTR16 in)
@@ -111,31 +96,6 @@
}
/******************************************************************************
- * SysReAllocString [OLEAUT32.3]
- */
-INT WINAPI SysReAllocString(LPBSTR old,LPCOLESTR in)
-{
- /*
- * Sanity check
- */
- if (old==NULL)
- return 0;
-
- /*
- * Make sure we free the old string.
- */
- if (*old!=NULL)
- SysFreeString(*old);
-
- /*
- * Allocate the new string
- */
- *old = SysAllocString(in);
-
- return 1;
-}
-
-/******************************************************************************
* SysAllocStringLen [OLE2DISP.4]
*/
BSTR16 WINAPI SysAllocStringLen16(const char *in, int len)
@@ -159,73 +119,6 @@
}
/******************************************************************************
- * SysAllocStringLen [OLEAUT32.4]
- *
- * In "Inside OLE, second edition" by Kraig Brockshmidt. In the Automation
- * section, he describes the DWORD value placed *before* the BSTR data type.
- * he describes it as a "DWORD count of characters". By experimenting with
- * a windows application, this count seems to be a DWORD count of bytes in
- * the string. Meaning that the count is double the number of wide
- * characters in the string.
- */
-BSTR WINAPI SysAllocStringLen(const OLECHAR *in, unsigned int len)
-{
- DWORD bufferSize;
- DWORD* newBuffer;
- WCHAR* stringBuffer;
-
- /*
- * Find the length of the buffer passed-in in bytes.
- */
- bufferSize = len * sizeof (WCHAR);
-
- /*
- * Allocate a new buffer to hold the string.
- * dont't forget to keep an empty spot at the beginning of the
- * buffer for the character count and an extra character at the
- * end for the NULL.
- */
- newBuffer = (DWORD*)HeapAlloc(GetProcessHeap(),
- 0,
- bufferSize + sizeof(WCHAR) + sizeof(DWORD));
-
- /*
- * If the memory allocation failed, return a null pointer.
- */
- if (newBuffer==0)
- return 0;
-
- /*
- * Copy the length of the string in the placeholder.
- */
- *newBuffer = bufferSize;
-
- /*
- * Skip the byte count.
- */
- newBuffer++;
-
- /*
- * Copy the information in the buffer.
- * Since it is valid to pass a NULL pointer here, we'll initialize the
- * buffer to nul if it is the case.
- */
- if (in != 0)
- memcpy(newBuffer, in, bufferSize);
- else
- memset(newBuffer, 0, bufferSize);
-
- /*
- * Make sure that there is a nul character at the end of the
- * string.
- */
- stringBuffer = (WCHAR*)newBuffer;
- stringBuffer[len] = L'\0';
-
- return (LPWSTR)stringBuffer;
-}
-
-/******************************************************************************
* SysReAllocStringLen [OLE2DISP.5]
*/
int WINAPI SysReAllocStringLen16(BSTR16 *old,const char *in,int len)
@@ -236,32 +129,6 @@
return 1;
}
-
-/******************************************************************************
- * SysReAllocStringLen [OLEAUT32.5]
- */
-int WINAPI SysReAllocStringLen(BSTR* old, const OLECHAR* in, unsigned int len)
-{
- /*
- * Sanity check
- */
- if (old==NULL)
- return 0;
-
- /*
- * Make sure we free the old string.
- */
- if (*old!=NULL)
- SysFreeString(*old);
-
- /*
- * Allocate the new string
- */
- *old = SysAllocStringLen(in, len);
-
- return 1;
-}
-
/******************************************************************************
* SysFreeString [OLE2DISP.6]
*/
@@ -271,31 +138,6 @@
}
/******************************************************************************
- * SysFreeString [OLEAUT32.6]
- */
-void WINAPI SysFreeString(BSTR in)
-{
- DWORD* bufferPointer;
-
- /* NULL is a valid parameter */
- if(!in) return;
-
- /*
- * We have to be careful when we free a BSTR pointer, it points to
- * the beginning of the string but it skips the byte count contained
- * before the string.
- */
- bufferPointer = (DWORD*)in;
-
- bufferPointer--;
-
- /*
- * Free the memory from its "real" origin.
- */
- HeapFree(GetProcessHeap(), 0, bufferPointer);
-}
-
-/******************************************************************************
* SysStringLen [OLE2DISP.7]
*/
int WINAPI SysStringLen16(BSTR16 str)
@@ -304,66 +146,6 @@
}
/******************************************************************************
- * SysStringLen [OLEAUT32.7]
- *
- * The Windows documentation states that the length returned by this function
- * is not necessarely the same as the length returned by the _lstrlenW method.
- * It is the same number that was passed in as the "len" parameter if the
- * string was allocated with a SysAllocStringLen method call.
- */
-int WINAPI SysStringLen(BSTR str)
-{
- DWORD* bufferPointer;
-
- if (!str) return 0;
- /*
- * The length of the string (in bytes) is contained in a DWORD placed
- * just before the BSTR pointer
- */
- bufferPointer = (DWORD*)str;
-
- bufferPointer--;
-
- return (int)(*bufferPointer/sizeof(WCHAR));
-}
-
-/******************************************************************************
- * SysStringByteLen [OLEAUT32.149]
- *
- * The Windows documentation states that the length returned by this function
- * is not necessarely the same as the length returned by the _lstrlenW method.
- * It is the same number that was passed in as the "len" parameter if the
- * string was allocated with a SysAllocStringLen method call.
- */
-int WINAPI SysStringByteLen(BSTR str)
-{
- DWORD* bufferPointer;
-
- if (!str) return 0;
- /*
- * The length of the string (in bytes) is contained in a DWORD placed
- * just before the BSTR pointer
- */
- bufferPointer = (DWORD*)str;
-
- bufferPointer--;
-
- return (int)(*bufferPointer);
-}
-
-/******************************************************************************
- * CreateDispTypeInfo [OLEAUT32.31]
- */
-HRESULT WINAPI CreateDispTypeInfo(
- INTERFACEDATA *pidata,
- LCID lcid,
- ITypeInfo **pptinfo)
-{
- FIXME("(%p,%ld,%p),stub\n",pidata,lcid,pptinfo);
- return 0;
-}
-
-/******************************************************************************
* CreateDispTypeInfo [OLE2DISP.31]
*/
HRESULT WINAPI CreateDispTypeInfo16(
@@ -390,20 +172,6 @@
}
/******************************************************************************
- * CreateStdDispatch [OLEAUT32.32]
- */
-HRESULT WINAPI CreateStdDispatch(
- IUnknown* punkOuter,
- void* pvThis,
- ITypeInfo* ptinfo,
- IUnknown** ppunkStdDisp)
-{
- FIXME("(%p,%p,%p,%p),stub\n",punkOuter, pvThis, ptinfo,
- ppunkStdDisp);
- return E_NOTIMPL;
-}
-
-/******************************************************************************
* RegisterActiveObject [OLE2DISP.35]
*/
HRESULT WINAPI RegisterActiveObject16(
@@ -412,140 +180,3 @@
FIXME("(%p,%s,0x%08lx,%p):stub\n",punk,debugstr_guid(rclsid),dwFlags,pdwRegister);
return E_NOTIMPL;
}
-
-/******************************************************************************
- * OleTranslateColor [OLEAUT32.421]
- *
- * Converts an OLE_COLOR to a COLORREF.
- * See the documentation for conversion rules.
- * pColorRef can be NULL. In that case the user only wants to test the
- * conversion.
- */
-HRESULT WINAPI OleTranslateColor(
- OLE_COLOR clr,
- HPALETTE hpal,
- COLORREF* pColorRef)
-{
- COLORREF colorref;
- BYTE b = HIBYTE(HIWORD(clr));
-
- TRACE("(%08lx, %p, %p):stub\n", clr, hpal, pColorRef);
-
- /*
- * In case pColorRef is NULL, provide our own to simplify the code.
- */
- if (pColorRef == NULL)
- pColorRef = &colorref;
-
- switch (b)
- {
- case 0x00:
- {
- if (hpal != 0)
- *pColorRef = PALETTERGB(GetRValue(clr),
- GetGValue(clr),
- GetBValue(clr));
- else
- *pColorRef = clr;
-
- break;
- }
-
- case 0x01:
- {
- if (hpal != 0)
- {
- PALETTEENTRY pe;
- /*
- * Validate the palette index.
- */
- if (GetPaletteEntries(hpal, LOWORD(clr), 1, &pe) == 0)
- return E_INVALIDARG;
- }
-
- *pColorRef = clr;
-
- break;
- }
-
- case 0x02:
- *pColorRef = clr;
- break;
-
- case 0x80:
- {
- int index = LOBYTE(LOWORD(clr));
-
- /*
- * Validate GetSysColor index.
- */
- if ((index < COLOR_SCROLLBAR) || (index > COLOR_GRADIENTINACTIVECAPTION))
- return E_INVALIDARG;
-
- *pColorRef = GetSysColor(index);
-
- break;
- }
-
- default:
- return E_INVALIDARG;
- }
-
- return S_OK;
-}
-
-/******************************************************************************
- * SysAllocStringByteLen [OLEAUT32.150]
- *
- */
-BSTR WINAPI SysAllocStringByteLen(LPCSTR in, UINT len)
-{
- DWORD* newBuffer;
- char* stringBuffer;
-
- /*
- * Allocate a new buffer to hold the string.
- * dont't forget to keep an empty spot at the beginning of the
- * buffer for the character count and an extra character at the
- * end for the NULL.
- */
- newBuffer = (DWORD*)HeapAlloc(GetProcessHeap(),
- 0,
- len + sizeof(WCHAR) + sizeof(DWORD));
-
- /*
- * If the memory allocation failed, return a null pointer.
- */
- if (newBuffer==0)
- return 0;
-
- /*
- * Copy the length of the string in the placeholder.
- */
- *newBuffer = len;
-
- /*
- * Skip the byte count.
- */
- newBuffer++;
-
- /*
- * Copy the information in the buffer.
- * Since it is valid to pass a NULL pointer here, we'll initialize the
- * buffer to nul if it is the case.
- */
- if (in != 0)
- memcpy(newBuffer, in, len);
-
- /*
- * Make sure that there is a nul character at the end of the
- * string.
- */
- stringBuffer = (char *)newBuffer;
- stringBuffer[len] = 0;
- stringBuffer[len+1] = 0;
-
- return (LPWSTR)stringBuffer;
-}
-
-
Index: oleaut.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/oleaut.c,v
retrieving revision 1.24
diff -u -u -r1.24 oleaut.c
--- oleaut.c 31 May 2002 23:25:50 -0000 1.24
+++ oleaut.c 12 Dec 2002 10:15:25 -0000
@@ -28,7 +28,7 @@
#include "ole2.h"
#include "olectl.h"
-#include "wine/obj_oleaut.h"
+#include "oleauto.h"
#include "wine/obj_olefont.h"
#include "tmarshal.h"
@@ -37,6 +37,265 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
+/******************************************************************************
+ * SysStringLen [OLEAUT32.7]
+ *
+ * The Windows documentation states that the length returned by this function
+ * is not necessarely the same as the length returned by the _lstrlenW method.
+ * It is the same number that was passed in as the "len" parameter if the
+ * string was allocated with a SysAllocStringLen method call.
+ */
+int WINAPI SysStringLen(BSTR str)
+{
+ DWORD* bufferPointer;
+
+ if (!str) return 0;
+ /*
+ * The length of the string (in bytes) is contained in a DWORD placed
+ * just before the BSTR pointer
+ */
+ bufferPointer = (DWORD*)str;
+
+ bufferPointer--;
+
+ return (int)(*bufferPointer/sizeof(WCHAR));
+}
+
+/******************************************************************************
+ * SysStringByteLen [OLEAUT32.149]
+ *
+ * The Windows documentation states that the length returned by this function
+ * is not necessarely the same as the length returned by the _lstrlenW method.
+ * It is the same number that was passed in as the "len" parameter if the
+ * string was allocated with a SysAllocStringLen method call.
+ */
+int WINAPI SysStringByteLen(BSTR str)
+{
+ DWORD* bufferPointer;
+
+ if (!str) return 0;
+ /*
+ * The length of the string (in bytes) is contained in a DWORD placed
+ * just before the BSTR pointer
+ */
+ bufferPointer = (DWORD*)str;
+
+ bufferPointer--;
+
+ return (int)(*bufferPointer);
+}
+
+/******************************************************************************
+ * SysAllocString [OLEAUT32.2]
+ *
+ * MSDN (October 2001) states that this returns a NULL value if the argument
+ * is a zero-length string. This does not appear to be true; certainly it
+ * returns a value under Win98 (Oleaut32.dll Ver 2.40.4515.0)
+ */
+BSTR WINAPI SysAllocString(LPCOLESTR in)
+{
+ if (!in) return 0;
+
+ /* Delegate this to the SysAllocStringLen32 method. */
+ return SysAllocStringLen(in, lstrlenW(in));
+}
+
+/******************************************************************************
+ * SysFreeString [OLEAUT32.6]
+ */
+void WINAPI SysFreeString(BSTR in)
+{
+ DWORD* bufferPointer;
+
+ /* NULL is a valid parameter */
+ if(!in) return;
+
+ /*
+ * We have to be careful when we free a BSTR pointer, it points to
+ * the beginning of the string but it skips the byte count contained
+ * before the string.
+ */
+ bufferPointer = (DWORD*)in;
+
+ bufferPointer--;
+
+ /*
+ * Free the memory from its "real" origin.
+ */
+ HeapFree(GetProcessHeap(), 0, bufferPointer);
+}
+
+/******************************************************************************
+ * SysAllocStringLen [OLEAUT32.4]
+ *
+ * In "Inside OLE, second edition" by Kraig Brockshmidt. In the Automation
+ * section, he describes the DWORD value placed *before* the BSTR data type.
+ * he describes it as a "DWORD count of characters". By experimenting with
+ * a windows application, this count seems to be a DWORD count of bytes in
+ * the string. Meaning that the count is double the number of wide
+ * characters in the string.
+ */
+BSTR WINAPI SysAllocStringLen(const OLECHAR *in, unsigned int len)
+{
+ DWORD bufferSize;
+ DWORD* newBuffer;
+ WCHAR* stringBuffer;
+
+ /*
+ * Find the length of the buffer passed-in in bytes.
+ */
+ bufferSize = len * sizeof (WCHAR);
+
+ /*
+ * Allocate a new buffer to hold the string.
+ * dont't forget to keep an empty spot at the beginning of the
+ * buffer for the character count and an extra character at the
+ * end for the NULL.
+ */
+ newBuffer = (DWORD*)HeapAlloc(GetProcessHeap(),
+ 0,
+ bufferSize + sizeof(WCHAR) + sizeof(DWORD));
+
+ /*
+ * If the memory allocation failed, return a null pointer.
+ */
+ if (newBuffer==0)
+ return 0;
+
+ /*
+ * Copy the length of the string in the placeholder.
+ */
+ *newBuffer = bufferSize;
+
+ /*
+ * Skip the byte count.
+ */
+ newBuffer++;
+
+ /*
+ * Copy the information in the buffer.
+ * Since it is valid to pass a NULL pointer here, we'll initialize the
+ * buffer to nul if it is the case.
+ */
+ if (in != 0)
+ memcpy(newBuffer, in, bufferSize);
+ else
+ memset(newBuffer, 0, bufferSize);
+
+ /*
+ * Make sure that there is a nul character at the end of the
+ * string.
+ */
+ stringBuffer = (WCHAR*)newBuffer;
+ stringBuffer[len] = L'\0';
+
+ return (LPWSTR)stringBuffer;
+}
+
+/******************************************************************************
+ * SysReAllocStringLen [OLEAUT32.5]
+ */
+int WINAPI SysReAllocStringLen(BSTR* old, const OLECHAR* in, unsigned int len)
+{
+ /*
+ * Sanity check
+ */
+ if (old==NULL)
+ return 0;
+
+ /*
+ * Make sure we free the old string.
+ */
+ if (*old!=NULL)
+ SysFreeString(*old);
+
+ /*
+ * Allocate the new string
+ */
+ *old = SysAllocStringLen(in, len);
+
+ return 1;
+}
+
+/******************************************************************************
+ * SysAllocStringByteLen [OLEAUT32.150]
+ *
+ */
+BSTR WINAPI SysAllocStringByteLen(LPCSTR in, UINT len)
+{
+ DWORD* newBuffer;
+ char* stringBuffer;
+
+ /*
+ * Allocate a new buffer to hold the string.
+ * dont't forget to keep an empty spot at the beginning of the
+ * buffer for the character count and an extra character at the
+ * end for the NULL.
+ */
+ newBuffer = (DWORD*)HeapAlloc(GetProcessHeap(),
+ 0,
+ len + sizeof(WCHAR) + sizeof(DWORD));
+
+ /*
+ * If the memory allocation failed, return a null pointer.
+ */
+ if (newBuffer==0)
+ return 0;
+
+ /*
+ * Copy the length of the string in the placeholder.
+ */
+ *newBuffer = len;
+
+ /*
+ * Skip the byte count.
+ */
+ newBuffer++;
+
+ /*
+ * Copy the information in the buffer.
+ * Since it is valid to pass a NULL pointer here, we'll initialize the
+ * buffer to nul if it is the case.
+ */
+ if (in != 0)
+ memcpy(newBuffer, in, len);
+
+ /*
+ * Make sure that there is a nul character at the end of the
+ * string.
+ */
+ stringBuffer = (char *)newBuffer;
+ stringBuffer[len] = 0;
+ stringBuffer[len+1] = 0;
+
+ return (LPWSTR)stringBuffer;
+}
+
+/******************************************************************************
+ * SysReAllocString [OLEAUT32.3]
+ */
+INT WINAPI SysReAllocString(LPBSTR old,LPCOLESTR in)
+{
+ /*
+ * Sanity check
+ */
+ if (old==NULL)
+ return 0;
+
+ /*
+ * Make sure we free the old string.
+ */
+ if (*old!=NULL)
+ SysFreeString(*old);
+
+ /*
+ * Allocate the new string
+ */
+ *old = SysAllocString(in);
+
+ return 1;
+}
+
static WCHAR _delimiter[2] = {'!',0}; /* default delimiter apparently */
static WCHAR *pdelimiter = &_delimiter[0];
@@ -148,6 +407,87 @@
ERR("Version value not known yet. Please investigate it !\n");
return 0x0;
}
+}
+
+/******************************************************************************
+ * OleTranslateColor [OLEAUT32.421]
+ *
+ * Converts an OLE_COLOR to a COLORREF.
+ * See the documentation for conversion rules.
+ * pColorRef can be NULL. In that case the user only wants to test the
+ * conversion.
+ */
+HRESULT WINAPI OleTranslateColor(
+ OLE_COLOR clr,
+ HPALETTE hpal,
+ COLORREF* pColorRef)
+{
+ COLORREF colorref;
+ BYTE b = HIBYTE(HIWORD(clr));
+
+ TRACE("(%08lx, %p, %p):stub\n", clr, hpal, pColorRef);
+
+ /*
+ * In case pColorRef is NULL, provide our own to simplify the code.
+ */
+ if (pColorRef == NULL)
+ pColorRef = &colorref;
+
+ switch (b)
+ {
+ case 0x00:
+ {
+ if (hpal != 0)
+ *pColorRef = PALETTERGB(GetRValue(clr),
+ GetGValue(clr),
+ GetBValue(clr));
+ else
+ *pColorRef = clr;
+
+ break;
+ }
+
+ case 0x01:
+ {
+ if (hpal != 0)
+ {
+ PALETTEENTRY pe;
+ /*
+ * Validate the palette index.
+ */
+ if (GetPaletteEntries(hpal, LOWORD(clr), 1, &pe) == 0)
+ return E_INVALIDARG;
+ }
+
+ *pColorRef = clr;
+
+ break;
+ }
+
+ case 0x02:
+ *pColorRef = clr;
+ break;
+
+ case 0x80:
+ {
+ int index = LOBYTE(LOWORD(clr));
+
+ /*
+ * Validate GetSysColor index.
+ */
+ if ((index < COLOR_SCROLLBAR) || (index > COLOR_GRADIENTINACTIVECAPTION))
+ return E_INVALIDARG;
+
+ *pColorRef = GetSysColor(index);
+
+ break;
+ }
+
+ default:
+ return E_INVALIDARG;
+ }
+
+ return S_OK;
}
/***********************************************************************
More information about the wine-patches
mailing list