Module: wine Branch: master Commit: f2b0e3168a3560a868e452fb25461b3bfe6f4320 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f2b0e3168a3560a868e452fb25...
Author: Christian Costa titan.costa@wanadoo.fr Date: Wed Aug 20 10:18:58 2008 +0200
msvcirt: Implement some ostream stubs.
---
dlls/msvcirt/msvcirt.c | 58 +++++++++++++++++++++++++++++++++++++++++++++ dlls/msvcirt/msvcirt.spec | 6 ++-- 2 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcirt/msvcirt.c b/dlls/msvcirt/msvcirt.c index 686ca7c..6178aca 100644 --- a/dlls/msvcirt/msvcirt.c +++ b/dlls/msvcirt/msvcirt.c @@ -16,6 +16,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#include "config.h" +#include "wine/port.h" + #include <stdarg.h>
#include "windef.h" @@ -24,6 +27,61 @@
WINE_DEFAULT_DEBUG_CHANNEL(msvcirt);
+typedef struct { + LPVOID VTable; +} class_ostream; + +#ifdef __i386__ /* thiscall functions are i386-specific */ + +#define THISCALL(func) __thiscall_ ## func +#define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func) +#define DEFINE_THISCALL_WRAPPER(func) \ + extern void THISCALL(func)(); \ + __ASM_GLOBAL_FUNC(__thiscall_ ## func, \ + "popl %eax\n\t" \ + "pushl %ecx\n\t" \ + "pushl %eax\n\t" \ + "jmp " __ASM_NAME(#func) ) +#else /* __i386__ */ + +#define THISCALL(func) func +#define THISCALL_NAME(func) __ASM_NAME(#func) +#define DEFINE_THISCALL_WRAPPER(func) /* nothing */ + +#endif /* __i386__ */ + +/****************************************************************** + * ??6ostream@@QAEAAV0@H@Z (MSVCRTI.@) + * class ostream & __thiscall ostream::operator<<(int) + */ +DEFINE_THISCALL_WRAPPER(MSVCIRT_operator_sl_int) +void * __stdcall MSVCIRT_operator_sl_int(class_ostream * _this, int integer) +{ + FIXME("(%p)->(%d) stub\n", _this, integer); + return _this; +} + +/****************************************************************** + * ??6ostream@@QAEAAV0@PBD@Z (MSVCRTI.@) + * class ostream & __thiscall ostream::operator<<(char const *) + */ +DEFINE_THISCALL_WRAPPER(MSVCIRT_operator_sl_pchar) +void * __stdcall MSVCIRT_operator_sl_pchar(class_ostream * _this, const char * string) +{ + FIXME("(%p)->(%s) stub\n", _this, string); + return _this; +} + +/****************************************************************** + * ?endl@@YAAAVostream@@AAV1@@Z (MSVCRTI.@) + * class ostream & __cdecl endl(class ostream &) + */ +void * CDECL MSVCIRT_endl(class_ostream * _this) +{ + FIXME("(%p)->() stub\n", _this); + return _this; +} + BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) { switch (reason) diff --git a/dlls/msvcirt/msvcirt.spec b/dlls/msvcirt/msvcirt.spec index 0588b55..a91cec7 100644 --- a/dlls/msvcirt/msvcirt.spec +++ b/dlls/msvcirt/msvcirt.spec @@ -134,7 +134,7 @@ @ stub ??6ostream@@QAEAAV0@E@Z # class ostream & __thiscall ostream::operator<<(unsigned char) @ stub ??6ostream@@QAEAAV0@F@Z # class ostream & __thiscall ostream::operator<<(short) @ stub ??6ostream@@QAEAAV0@G@Z # class ostream & __thiscall ostream::operator<<(unsigned short) -@ stub ??6ostream@@QAEAAV0@H@Z # class ostream & __thiscall ostream::operator<<(int) +@ cdecl -i386 -norelay ??6ostream@@QAEAAV0@H@Z(ptr long) __thiscall_MSVCIRT_operator_sl_int # class ostream & __thiscall ostream::operator<<(int) @ stub ??6ostream@@QAEAAV0@I@Z # class ostream & __thiscall ostream::operator<<(unsigned int) @ stub ??6ostream@@QAEAAV0@J@Z # class ostream & __thiscall ostream::operator<<(long) @ stub ??6ostream@@QAEAAV0@K@Z # class ostream & __thiscall ostream::operator<<(unsigned long) @@ -145,7 +145,7 @@ @ stub ??6ostream@@QAEAAV0@P6AAAVios@@AAV1@@Z@Z # class ostream & __thiscall ostream::operator<<(class ios & (__cdecl*)(class ios &)) @ stub ??6ostream@@QAEAAV0@PAVstreambuf@@@Z # class ostream & __thiscall ostream::operator<<(class streambuf *) @ stub ??6ostream@@QAEAAV0@PBC@Z # class ostream & __thiscall ostream::operator<<(signed char const *) -@ stub ??6ostream@@QAEAAV0@PBD@Z # class ostream & __thiscall ostream::operator<<(char const *) +@ cdecl -i386 -norelay ??6ostream@@QAEAAV0@PBD@Z(ptr ptr) __thiscall_MSVCIRT_operator_sl_pchar # class ostream & __thiscall ostream::operator<<(char const *) @ stub ??6ostream@@QAEAAV0@PBE@Z # class ostream & __thiscall ostream::operator<<(unsigned char const *) @ stub ??6ostream@@QAEAAV0@PBX@Z # class ostream & __thiscall ostream::operator<<(void const *) @ stub ??7ios@@QBEHXZ # int __thiscall ios::operator!(void)const @@ -268,7 +268,7 @@ @ stub ?eback@streambuf@@IBEPADXZ # char * __thiscall streambuf::eback(void)const @ stub ?ebuf@streambuf@@IBEPADXZ # char * __thiscall streambuf::ebuf(void)const @ stub ?egptr@streambuf@@IBEPADXZ # char * __thiscall streambuf::egptr(void)const -@ stub ?endl@@YAAAVostream@@AAV1@@Z # class ostream & __cdecl endl(class ostream &) +@ cdecl ?endl@@YAAAVostream@@AAV1@@Z(ptr) MSVCIRT_endl # class ostream & __cdecl endl(class ostream &) @ stub ?ends@@YAAAVostream@@AAV1@@Z # class ostream & __cdecl ends(class ostream &) @ stub ?eof@ios@@QBEHXZ # int __thiscall ios::eof(void)const @ stub ?epptr@streambuf@@IBEPADXZ # char * __thiscall streambuf::epptr(void)const