msvcp90: Added partial basic_ostream<char> implementation.
This commit is contained in:
parent
2ef0676042
commit
3c980ffa01
|
@ -60,6 +60,25 @@ typedef enum {
|
||||||
FMTFLAG_mask = 0xffff
|
FMTFLAG_mask = 0xffff
|
||||||
} IOSB_fmtflags;
|
} IOSB_fmtflags;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
OPENMODE_in = 0x01,
|
||||||
|
OPENMODE_out = 0x02,
|
||||||
|
OPENMODE_ate = 0x04,
|
||||||
|
OPENMODE_app = 0x08,
|
||||||
|
OPENMODE_trunc = 0x10,
|
||||||
|
OPENMODE__Nocreate = 0x40,
|
||||||
|
OPENMODE__Noreplace = 0x80,
|
||||||
|
OPENMODE_binray = 0x20,
|
||||||
|
OPENMODE_mask = 0xff
|
||||||
|
} IOSB_openmode;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SEEKDIR_beg = 0x1,
|
||||||
|
SEEKDIR_cur = 0x2,
|
||||||
|
SEEKDIR_end = 0x3,
|
||||||
|
SEEKDIR_mask = 0x3
|
||||||
|
} IOSB_seekdir;
|
||||||
|
|
||||||
typedef struct _iosarray {
|
typedef struct _iosarray {
|
||||||
struct _iosarray *next;
|
struct _iosarray *next;
|
||||||
int index;
|
int index;
|
||||||
|
@ -162,12 +181,16 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct _basic_ostream_char {
|
typedef struct _basic_ostream_char {
|
||||||
const int *vbtable;
|
const int *vbtable;
|
||||||
basic_ios_char base;
|
/* virtual inheritance
|
||||||
|
* basic_ios_char base;
|
||||||
|
*/
|
||||||
} basic_ostream_char;
|
} basic_ostream_char;
|
||||||
|
|
||||||
typedef struct _basic_ostream_wchar {
|
typedef struct _basic_ostream_wchar {
|
||||||
const int *vbtable;
|
const int *vbtable;
|
||||||
basic_ios_char base;
|
/* virtual inheritance
|
||||||
|
* basic_ios_char base;
|
||||||
|
*/
|
||||||
} basic_ostream_wchar;
|
} basic_ostream_wchar;
|
||||||
|
|
||||||
extern const vtable_ptr MSVCP_iosb_vtable;
|
extern const vtable_ptr MSVCP_iosb_vtable;
|
||||||
|
@ -193,6 +216,7 @@ extern const vtable_ptr MSVCP_basic_streambuf_wchar_vtable;
|
||||||
/* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
|
/* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
|
||||||
extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
|
extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
|
||||||
|
|
||||||
|
static const int basic_ostream_char_vbtable[] = {0, sizeof(void*)};
|
||||||
/* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
|
/* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
|
||||||
extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
|
extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
|
||||||
|
|
||||||
|
@ -210,8 +234,9 @@ DEFINE_RTTI_DATA(basic_streambuf_wchar, 0, 0, NULL, NULL, NULL,
|
||||||
".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@");
|
".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@");
|
||||||
DEFINE_RTTI_DATA(basic_streambuf_short, 0, 0, NULL, NULL, NULL,
|
DEFINE_RTTI_DATA(basic_streambuf_short, 0, 0, NULL, NULL, NULL,
|
||||||
".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@");
|
".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@");
|
||||||
DEFINE_RTTI_DATA(basic_ostream_char, 4, 3, &basic_ios_char_rtti_base_descriptor, &ios_base_rtti_base_descriptor,
|
DEFINE_RTTI_DATA(basic_ostream_char, sizeof(void*), 3, &basic_ios_char_rtti_base_descriptor,
|
||||||
&iosb_rtti_base_descriptor, ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@");
|
&ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
|
||||||
|
".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@");
|
||||||
|
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
void __asm_dummy_vtables(void) {
|
void __asm_dummy_vtables(void) {
|
||||||
|
@ -2116,7 +2141,7 @@ void __thiscall ios_base_Init(ios_base *this)
|
||||||
this->state = this->except = IOSTATE_goodbit;
|
this->state = this->except = IOSTATE_goodbit;
|
||||||
this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
|
this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
|
||||||
this->prec = 6;
|
this->prec = 6;
|
||||||
this->wide = ' ';
|
this->wide = 0;
|
||||||
this->arr = NULL;
|
this->arr = NULL;
|
||||||
this->calls = NULL;
|
this->calls = NULL;
|
||||||
this->loc = MSVCRT_operator_new(sizeof(locale));
|
this->loc = MSVCRT_operator_new(sizeof(locale));
|
||||||
|
@ -2393,7 +2418,7 @@ void __thiscall basic_ios_char_dtor(basic_ios_char *this)
|
||||||
DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_char_vector_dtor, 8)
|
DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_char_vector_dtor, 8)
|
||||||
basic_ios_char* __thiscall MSVCP_basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
|
basic_ios_char* __thiscall MSVCP_basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
|
||||||
{
|
{
|
||||||
TRACE("(%p %x) stub\n", this, flags);
|
TRACE("(%p %x)", this, flags);
|
||||||
if(flags & 2) {
|
if(flags & 2) {
|
||||||
/* we have an array, with the number of elements stored before the first object */
|
/* we have an array, with the number of elements stored before the first object */
|
||||||
int i, *ptr = (int *)this-1;
|
int i, *ptr = (int *)this-1;
|
||||||
|
@ -2566,11 +2591,11 @@ char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4)
|
DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4)
|
||||||
basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this)
|
basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this)
|
||||||
{
|
{
|
||||||
TRACE("(%p)\n", this);
|
TRACE("(%p)\n", this);
|
||||||
|
|
||||||
ios_base_ctor(&this->base);
|
ios_base_ctor(&this->base);
|
||||||
this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
|
this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */
|
/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */
|
||||||
|
@ -2639,7 +2664,7 @@ void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this)
|
||||||
DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_wchar_vector_dtor, 8)
|
DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_wchar_vector_dtor, 8)
|
||||||
basic_ios_wchar* __thiscall MSVCP_basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
|
basic_ios_wchar* __thiscall MSVCP_basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
|
||||||
{
|
{
|
||||||
TRACE("(%p %x) stub\n", this, flags);
|
TRACE("(%p %x)\n", this, flags);
|
||||||
if(flags & 2) {
|
if(flags & 2) {
|
||||||
/* we have an array, with the number of elements stored before the first object */
|
/* we have an array, with the number of elements stored before the first object */
|
||||||
int i, *ptr = (int *)this-1;
|
int i, *ptr = (int *)this-1;
|
||||||
|
@ -2840,22 +2865,60 @@ wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Caution: basic_ostream uses virtual inheritance.
|
||||||
|
* All constructors have additional parameter that says if base class should be initialized.
|
||||||
|
* Base class needs to be accessed using vbtable.
|
||||||
|
*/
|
||||||
|
static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this)
|
||||||
|
{
|
||||||
|
return (basic_ios_char*)((char*)this+this->vbtable[1]);
|
||||||
|
}
|
||||||
|
|
||||||
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
|
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
|
||||||
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
|
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 12)
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 16)
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd)
|
basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this,
|
||||||
|
basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
|
||||||
{
|
{
|
||||||
FIXME("(%p %p %d) stub\n", this, strbuf, isstd);
|
basic_ios_char *base;
|
||||||
return NULL;
|
|
||||||
|
TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
|
||||||
|
|
||||||
|
if(virt_init) {
|
||||||
|
this->vbtable = basic_ostream_char_vbtable;
|
||||||
|
base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
basic_ios_char_ctor(base);
|
||||||
|
}else {
|
||||||
|
base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
base->base.vtable = &MSVCP_basic_ostream_char_vtable;
|
||||||
|
basic_ios_char_init(base, strbuf, isstd);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
|
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
|
||||||
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
|
/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_uninitialized, 12)
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_uninitialized, 16)
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_uninitialized(basic_ostream_char *this, int uninitialized, MSVCP_bool addstd)
|
basic_ostream_char* __thiscall basic_ostream_char_uninitialized(basic_ostream_char *this,
|
||||||
|
int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
|
||||||
{
|
{
|
||||||
FIXME("(%p %d %x) stub\n", this, uninitialized, addstd);
|
basic_ios_char *base;
|
||||||
return NULL;
|
|
||||||
|
TRACE("(%p %d %x)\n", this, uninitialized, addstd);
|
||||||
|
|
||||||
|
if(virt_init) {
|
||||||
|
this->vbtable = basic_ostream_char_vbtable;
|
||||||
|
base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
basic_ios_char_ctor(base);
|
||||||
|
}else {
|
||||||
|
base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
base->base.vtable = &MSVCP_basic_ostream_char_vtable;
|
||||||
|
if(addstd)
|
||||||
|
ios_base_Addstd(&base->base);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
|
/* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
|
||||||
|
@ -2863,22 +2926,36 @@ basic_ostream_char* __thiscall basic_ostream_char_uninitialized(basic_ostream_ch
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
|
||||||
void __thiscall basic_ostream_char_dtor(basic_ostream_char *this)
|
void __thiscall basic_ostream_char_dtor(basic_ostream_char *this)
|
||||||
{
|
{
|
||||||
FIXME("(%p) stub\n", this);
|
/* don't destroy virtual base here */
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
|
||||||
|
/* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4)
|
||||||
|
void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this)
|
||||||
|
{
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
basic_ostream_char_dtor(this);
|
||||||
|
basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_THISCALL_WRAPPER(MSVCP_basic_ostream_char_vector_dtor, 8)
|
DEFINE_THISCALL_WRAPPER(MSVCP_basic_ostream_char_vector_dtor, 8)
|
||||||
basic_ostream_char* __thiscall MSVCP_basic_ostream_char_vector_dtor(basic_ostream_char *this, unsigned int flags)
|
basic_ostream_char* __thiscall MSVCP_basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
|
||||||
{
|
{
|
||||||
TRACE("(%p %x) stub\n", this, flags);
|
basic_ostream_char *this = (basic_ostream_char *)((char*)base - basic_ostream_char_vbtable[1] + basic_ostream_char_vbtable[0]);
|
||||||
|
|
||||||
|
TRACE("(%p %x)\n", this, flags);
|
||||||
|
|
||||||
if(flags & 2) {
|
if(flags & 2) {
|
||||||
/* we have an array, with the number of elements stored before the first object */
|
/* we have an array, with the number of elements stored before the first object */
|
||||||
int i, *ptr = (int *)this-1;
|
int i, *ptr = (int *)this-1;
|
||||||
|
|
||||||
for(i=*ptr-1; i>=0; i--)
|
for(i=*ptr-1; i>=0; i--)
|
||||||
basic_ostream_char_dtor(this+i);
|
basic_ostream_char_vbase_dtor(this+i);
|
||||||
MSVCRT_operator_delete(ptr);
|
MSVCRT_operator_delete(ptr);
|
||||||
} else {
|
} else {
|
||||||
basic_ostream_char_dtor(this);
|
basic_ostream_char_vbase_dtor(this);
|
||||||
if(flags & 1)
|
if(flags & 1)
|
||||||
MSVCRT_operator_delete(this);
|
MSVCRT_operator_delete(this);
|
||||||
}
|
}
|
||||||
|
@ -2886,6 +2963,182 @@ basic_ostream_char* __thiscall MSVCP_basic_ostream_char_vector_dtor(basic_ostrea
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
|
||||||
|
/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
|
||||||
|
basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
|
||||||
|
{
|
||||||
|
/* this function is not matching C++ specification */
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
|
||||||
|
if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base)
|
||||||
|
&& basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1)
|
||||||
|
ios_base_setstate(&base->base, IOSTATE_badbit);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
|
||||||
|
/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4)
|
||||||
|
void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
|
||||||
|
if(base->base.fmtfl & FMTFLAG_unitbuf)
|
||||||
|
basic_ostream_char_flush(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
|
||||||
|
/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
|
||||||
|
void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
|
||||||
|
{
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
basic_ostream_char__Osfx(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL sentry_char_create(basic_ostream_char *ostr)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
|
||||||
|
|
||||||
|
if(basic_ios_char_rdbuf_get(base))
|
||||||
|
basic_streambuf_char__Lock(base->strbuf);
|
||||||
|
|
||||||
|
if(ios_base_good(&base->base) && base->stream)
|
||||||
|
basic_ostream_char_flush(base->stream);
|
||||||
|
|
||||||
|
return ios_base_good(&base->base);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sentry_char_destroy(basic_ostream_char *ostr)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
|
||||||
|
|
||||||
|
if(ios_base_good(&base->base) && !__uncaught_exception())
|
||||||
|
basic_ostream_char_osfx(ostr);
|
||||||
|
|
||||||
|
if(basic_ios_char_rdbuf_get(base))
|
||||||
|
basic_streambuf_char__Unlock(base->strbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
|
||||||
|
/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
|
||||||
|
MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
|
||||||
|
if(ios_base_good(&base->base) && base->stream)
|
||||||
|
basic_ostream_char_flush(base->stream);
|
||||||
|
return ios_base_good(&base->base);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
|
||||||
|
/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
|
||||||
|
basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p %c)\n", this, ch);
|
||||||
|
|
||||||
|
if(!sentry_char_create(this)
|
||||||
|
|| basic_streambuf_char_sputc(base->strbuf, ch)==EOF) {
|
||||||
|
sentry_char_destroy(this);
|
||||||
|
ios_base_setstate(&base->base, IOSTATE_badbit);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
sentry_char_destroy(this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
|
||||||
|
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 12)
|
||||||
|
basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p %lu %d)\n", this, off, way);
|
||||||
|
|
||||||
|
if(!ios_base_fail(&base->base)) {
|
||||||
|
fpos_int seek;
|
||||||
|
|
||||||
|
basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
|
||||||
|
&seek, off, way, OPENMODE_out);
|
||||||
|
if(seek.off==0 && seek.pos==-1 && seek.state==0)
|
||||||
|
ios_base_setstate(&base->base, IOSTATE_failbit);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
|
||||||
|
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
|
||||||
|
basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
|
||||||
|
|
||||||
|
if(!ios_base_fail(&base->base)) {
|
||||||
|
fpos_int seek;
|
||||||
|
|
||||||
|
basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base),
|
||||||
|
&seek, pos, OPENMODE_out);
|
||||||
|
if(seek.off==0 && seek.pos==-1 && seek.state==0)
|
||||||
|
ios_base_setstate(&base->base, IOSTATE_failbit);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
|
||||||
|
/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
|
||||||
|
fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
|
||||||
|
if(!ios_base_fail(&base->base)) {
|
||||||
|
basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
|
||||||
|
ret, 0, SEEKDIR_cur, OPENMODE_out);
|
||||||
|
}else {
|
||||||
|
ret->off = 0;
|
||||||
|
ret->pos = -1;
|
||||||
|
ret->state = 0;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
|
||||||
|
/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
|
||||||
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 12)
|
||||||
|
basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
|
||||||
|
{
|
||||||
|
basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
|
||||||
|
|
||||||
|
TRACE("(%p %s %lu)\n", this, debugstr_a(str), count);
|
||||||
|
|
||||||
|
if(!sentry_char_create(this)
|
||||||
|
|| basic_streambuf_char_sputn(base->strbuf, str, count)!=count) {
|
||||||
|
sentry_char_destroy(this);
|
||||||
|
ios_base_setstate(&base->base, IOSTATE_badbit);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
sentry_char_destroy(this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
|
/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
|
||||||
/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
|
/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
|
DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
|
||||||
|
@ -3002,82 +3255,3 @@ basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char
|
||||||
FIXME("(%p %x) stub\n", this, val);
|
FIXME("(%p %x) stub\n", this, val);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
|
|
||||||
/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4)
|
|
||||||
void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this)
|
|
||||||
{
|
|
||||||
FIXME("(%p) stub\n", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
|
|
||||||
/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
|
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
|
|
||||||
{
|
|
||||||
FIXME("(%p) stub\n", this);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
|
|
||||||
/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
|
|
||||||
MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
|
|
||||||
{
|
|
||||||
FIXME("(%p) stub\n", this);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
|
|
||||||
/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
|
|
||||||
void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
|
|
||||||
{
|
|
||||||
FIXME("(%p) stub\n", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
|
|
||||||
/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
|
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
|
|
||||||
{
|
|
||||||
FIXME("(%p %c) stub\n", this, ch);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
|
|
||||||
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 12)
|
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way)
|
|
||||||
{
|
|
||||||
FIXME("(%p %lu %d) stub\n", this, off, way);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
|
|
||||||
/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
|
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
|
|
||||||
{
|
|
||||||
FIXME("(%p %s) stub\n", this, debugstr_fpos_int(&pos));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
|
|
||||||
/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
|
|
||||||
fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
|
|
||||||
{
|
|
||||||
FIXME("(%p) stub\n", this);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
|
|
||||||
/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
|
|
||||||
DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 12)
|
|
||||||
basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
|
|
||||||
{
|
|
||||||
FIXME("(%p %s %lu) stub\n", this, debugstr_a(str), count);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ typedef SIZE_T streamsize;
|
||||||
|
|
||||||
void __cdecl _invalid_parameter(const wchar_t*, const wchar_t*,
|
void __cdecl _invalid_parameter(const wchar_t*, const wchar_t*,
|
||||||
const wchar_t*, unsigned int, uintptr_t);
|
const wchar_t*, unsigned int, uintptr_t);
|
||||||
|
BOOL __cdecl __uncaught_exception(void);
|
||||||
|
|
||||||
extern void* (__cdecl *MSVCRT_operator_new)(MSVCP_size_t);
|
extern void* (__cdecl *MSVCRT_operator_new)(MSVCP_size_t);
|
||||||
extern void (__cdecl *MSVCRT_operator_delete)(void*);
|
extern void (__cdecl *MSVCRT_operator_delete)(void*);
|
||||||
|
|
|
@ -696,10 +696,10 @@
|
||||||
@ stub -arch=win64 ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z
|
@ stub -arch=win64 ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z
|
||||||
@ stub -arch=win32 ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ
|
@ stub -arch=win32 ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ
|
||||||
@ stub -arch=win64 ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ
|
@ stub -arch=win64 ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ
|
||||||
@ thiscall -arch=win32 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z(ptr ptr long) basic_ostream_char_ctor
|
@ thiscall -arch=win32 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z(ptr ptr long long) basic_ostream_char_ctor
|
||||||
@ cdecl -arch=win64 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z(ptr ptr long) basic_ostream_char_ctor
|
@ cdecl -arch=win64 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z(ptr ptr long long) basic_ostream_char_ctor
|
||||||
@ thiscall -arch=win32 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z(ptr long long) basic_ostream_char_uninitialized
|
@ thiscall -arch=win32 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z(ptr long long long) basic_ostream_char_uninitialized
|
||||||
@ cdecl -arch=win64 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z(ptr long long) basic_ostream_char_uninitialized
|
@ cdecl -arch=win64 ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z(ptr long long long) basic_ostream_char_uninitialized
|
||||||
@ stub -arch=win32 ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z
|
@ stub -arch=win32 ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z
|
||||||
@ stub -arch=win64 ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z
|
@ stub -arch=win64 ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z
|
||||||
@ stub -arch=win32 ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z
|
@ stub -arch=win32 ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z
|
||||||
|
@ -1937,8 +1937,8 @@
|
||||||
@ stub -arch=win64 ??_D?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXXZ
|
@ stub -arch=win64 ??_D?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXXZ
|
||||||
@ stub -arch=win32 ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ
|
@ stub -arch=win32 ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ
|
||||||
@ stub -arch=win64 ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ
|
@ stub -arch=win64 ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ
|
||||||
@ stub -arch=win32 ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ
|
@ thiscall -arch=win32 ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) basic_ostream_char_vbase_dtor
|
||||||
@ stub -arch=win64 ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ
|
@ cdecl -arch=win64 ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ(ptr) basic_ostream_char_vbase_dtor
|
||||||
@ stub -arch=win32 ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ
|
@ stub -arch=win32 ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ
|
||||||
@ stub -arch=win64 ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ
|
@ stub -arch=win64 ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ
|
||||||
@ stub -arch=win32 ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ
|
@ stub -arch=win32 ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ
|
||||||
|
|
Loading…
Reference in New Issue