Commit 7ef6e006 authored by Alexandre Julliard's avatar Alexandre Julliard

msvcp71: Share the locale.c implementation with msvcp90.

parent a7a149fd
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* Copyright 2010 Piotr Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "stdlib.h"
#include "windef.h"
#include "cxx.h"
typedef unsigned char MSVCP_bool;
typedef SIZE_T MSVCP_size_t;
typedef SSIZE_T streamoff;
typedef SSIZE_T streamsize;
void __cdecl _invalid_parameter(const wchar_t*, const wchar_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_delete)(void*);
extern void* (__cdecl *MSVCRT_set_new_handler)(void*);
/* basic_string<char, char_traits<char>, allocator<char>> */
#define BUF_SIZE_CHAR 16
typedef struct
{
void *allocator;
union {
char buf[BUF_SIZE_CHAR];
char *ptr;
} data;
MSVCP_size_t size;
MSVCP_size_t res;
} basic_string_char;
basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char*);
basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(basic_string_char*, const char*);
basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(basic_string_char*, const char*, MSVCP_size_t);
basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(basic_string_char*, const basic_string_char*);
void __thiscall MSVCP_basic_string_char_dtor(basic_string_char*);
const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char*);
void __thiscall MSVCP_basic_string_char_clear(basic_string_char*);
basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(basic_string_char*, char);
MSVCP_size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char*);
basic_string_char* __thiscall MSVCP_basic_string_char_assign(basic_string_char*, const basic_string_char*);
#define BUF_SIZE_WCHAR 8
typedef struct
{
void *allocator;
union {
wchar_t buf[BUF_SIZE_WCHAR];
wchar_t *ptr;
} data;
MSVCP_size_t size;
MSVCP_size_t res;
} basic_string_wchar;
basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar*);
basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(basic_string_wchar*, const wchar_t*);
basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(basic_string_wchar*, const wchar_t*, MSVCP_size_t);
void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar*);
const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar*);
void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar*);
basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(basic_string_wchar*, wchar_t);
MSVCP_size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar*);
char* __thiscall MSVCP_allocator_char_allocate(void*, MSVCP_size_t);
void __thiscall MSVCP_allocator_char_deallocate(void*, char*, MSVCP_size_t);
MSVCP_size_t __thiscall MSVCP_allocator_char_max_size(void*);
wchar_t* __thiscall MSVCP_allocator_wchar_allocate(void*, MSVCP_size_t);
void __thiscall MSVCP_allocator_wchar_deallocate(void*, wchar_t*, MSVCP_size_t);
MSVCP_size_t __thiscall MSVCP_allocator_wchar_max_size(void*);
/* class locale::facet */
typedef struct {
const vtable_ptr *vtable;
MSVCP_size_t refs;
} locale_facet;
typedef enum {
CODECVT_ok = 0,
CODECVT_partial = 1,
CODECVT_error = 2,
CODECVT_noconv = 3
} codecvt_base_result;
typedef struct {
LCID handle;
unsigned page;
const short *table;
int delfl;
} _Ctypevec;
/* class codecvt_base */
typedef struct {
locale_facet facet;
} codecvt_base;
/* class codecvt<char> */
typedef struct {
codecvt_base base;
} codecvt_char;
MSVCP_bool __thiscall codecvt_base_always_noconv(const codecvt_base*);
int __thiscall codecvt_char_unshift(const codecvt_char*, int*, char*, char*, char**);
int __thiscall codecvt_char_out(const codecvt_char*, int*, const char*,
const char*, const char**, char*, char*, char**);
int __thiscall codecvt_char_in(const codecvt_char*, int*, const char*,
const char*, const char**, char*, char*, char**);
int __thiscall codecvt_base_max_length(const codecvt_base*);
typedef struct {
LCID handle;
unsigned page;
} _Cvtvec;
/* class codecvt<wchar> */
typedef struct {
codecvt_base base;
_Cvtvec cvt;
} codecvt_wchar;
int __thiscall codecvt_wchar_unshift(const codecvt_wchar*, int*, char*, char*, char**);
int __thiscall codecvt_wchar_out(const codecvt_wchar*, int*, const wchar_t*,
const wchar_t*, const wchar_t**, char*, char*, char**);
int __thiscall codecvt_wchar_in(const codecvt_wchar*, int*, const char*,
const char*, const char**, wchar_t*, wchar_t*, wchar_t**);
/* class ctype_base */
typedef struct {
locale_facet facet;
} ctype_base;
/* class ctype<char> */
typedef struct {
ctype_base base;
_Ctypevec ctype;
} ctype_char;
MSVCP_bool __thiscall ctype_char_is_ch(const ctype_char*, short, char);
char __thiscall ctype_char_narrow_ch(const ctype_char*, char, char);
char __thiscall ctype_char_widen_ch(const ctype_char*, char);
/* class ctype<wchar> */
typedef struct {
ctype_base base;
_Ctypevec ctype;
_Cvtvec cvt;
} ctype_wchar;
MSVCP_bool __thiscall ctype_wchar_is_ch(const ctype_wchar*, short, wchar_t);
char __thiscall ctype_wchar_narrow_ch(const ctype_wchar*, wchar_t, char);
wchar_t __thiscall ctype_wchar_widen_ch(const ctype_wchar*, char);
/* class locale */
typedef struct
{
struct _locale__Locimp *ptr;
} locale;
locale* __thiscall locale_ctor(locale*);
locale* __thiscall locale_copy_ctor(locale*, const locale*);
locale* __thiscall locale_operator_assign(locale*, const locale*);
void __thiscall locale_dtor(locale*);
void free_locale(void);
codecvt_char* codecvt_char_use_facet(const locale*);
codecvt_wchar* codecvt_wchar_use_facet(const locale*);
codecvt_wchar* codecvt_short_use_facet(const locale*);
ctype_char* ctype_char_use_facet(const locale*);
ctype_wchar* ctype_wchar_use_facet(const locale*);
ctype_wchar* ctype_short_use_facet(const locale*);
/* class _Lockit */
typedef struct {
int locktype;
} _Lockit;
#define _LOCK_LOCALE 0
#define _LOCK_MALLOC 1
#define _LOCK_STREAM 2
#define _LOCK_DEBUG 3
#define _MAX_LOCK 4
void init_lockit(void);
void free_lockit(void);
_Lockit* __thiscall _Lockit_ctor_locktype(_Lockit*, int);
void __thiscall _Lockit_dtor(_Lockit*);
/* class mutex */
typedef struct {
void *mutex;
} mutex;
mutex* __thiscall mutex_ctor(mutex*);
void __thiscall mutex_dtor(mutex*);
void __thiscall mutex_lock(mutex*);
void __thiscall mutex_unlock(mutex*);
typedef enum {
FMTFLAG_skipws = 0x0001,
FMTFLAG_unitbuf = 0x0002,
FMTFLAG_uppercase = 0x0004,
FMTFLAG_showbase = 0x0008,
FMTFLAG_showpoint = 0x0010,
FMTFLAG_showpos = 0x0020,
FMTFLAG_left = 0x0040,
FMTFLAG_right = 0x0080,
FMTFLAG_internal = 0x0100,
FMTFLAG_dec = 0x0200,
FMTFLAG_oct = 0x0400,
FMTFLAG_hex = 0x0800,
FMTFLAG_scientific = 0x1000,
FMTFLAG_fixed = 0x2000,
FMTFLAG_hexfloat = 0x3000,
FMTFLAG_boolalpha = 0x4000,
FMTFLAG_stdio = 0x8000,
FMTFLAG_adjustfield = FMTFLAG_left|FMTFLAG_right|FMTFLAG_internal,
FMTFLAG_basefield = FMTFLAG_dec|FMTFLAG_oct|FMTFLAG_hex,
FMTFLAG_floatfield = FMTFLAG_scientific|FMTFLAG_fixed,
FMTFLAG_mask = 0xffff
} 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_binary = 0x20,
OPENMODE_mask = 0xff
} IOSB_openmode;
typedef enum {
SEEKDIR_beg = 0x0,
SEEKDIR_cur = 0x1,
SEEKDIR_end = 0x2,
SEEKDIR_mask = 0x3
} IOSB_seekdir;
typedef enum {
IOSTATE_goodbit = 0x00,
IOSTATE_eofbit = 0x01,
IOSTATE_failbit = 0x02,
IOSTATE_badbit = 0x04,
IOSTATE__Hardfail = 0x10,
IOSTATE_mask = 0x17
} IOSB_iostate;
typedef struct _iosarray {
struct _iosarray *next;
int index;
int long_val;
void *ptr_val;
} IOS_BASE_iosarray;
typedef enum {
EVENT_erase_event,
EVENT_imbue_event,
EVENT_copyfmt_event
} IOS_BASE_event;
struct _ios_base;
typedef void (CDECL *IOS_BASE_event_callback)(IOS_BASE_event, struct _ios_base*, int);
typedef struct _fnarray {
struct _fnarray *next;
int index;
IOS_BASE_event_callback event_handler;
} IOS_BASE_fnarray;
/* class ios_base */
typedef struct _ios_base {
const vtable_ptr *vtable;
MSVCP_size_t stdstr;
IOSB_iostate state;
IOSB_iostate except;
IOSB_fmtflags fmtfl;
streamsize prec;
streamsize wide;
IOS_BASE_iosarray *arr;
IOS_BASE_fnarray *calls;
locale *loc;
} ios_base;
/* class basic_streambuf<char> */
typedef struct {
const vtable_ptr *vtable;
mutex lock;
char *rbuf;
char *wbuf;
char **prbuf;
char **pwbuf;
char *rpos;
char *wpos;
char **prpos;
char **pwpos;
int rsize;
int wsize;
int *prsize;
int *pwsize;
locale *loc;
} basic_streambuf_char;
typedef struct {
basic_streambuf_char *strbuf;
MSVCP_bool got;
char val;
} istreambuf_iterator_char;
typedef struct {
MSVCP_bool failed;
basic_streambuf_char *strbuf;
} ostreambuf_iterator_char;
int __thiscall basic_streambuf_char_sgetc(basic_streambuf_char*);
int __thiscall basic_streambuf_char_sbumpc(basic_streambuf_char*);
int __thiscall basic_streambuf_char_sputc(basic_streambuf_char*, char);
/* class basic_streambuf<wchar> */
typedef struct {
const vtable_ptr *vtable;
mutex lock;
wchar_t *rbuf;
wchar_t *wbuf;
wchar_t **prbuf;
wchar_t **pwbuf;
wchar_t *rpos;
wchar_t *wpos;
wchar_t **prpos;
wchar_t **pwpos;
int rsize;
int wsize;
int *prsize;
int *pwsize;
locale *loc;
} basic_streambuf_wchar;
typedef struct {
basic_streambuf_wchar *strbuf;
MSVCP_bool got;
wchar_t val;
} istreambuf_iterator_wchar;
typedef struct {
MSVCP_bool failed;
basic_streambuf_wchar *strbuf;
} ostreambuf_iterator_wchar;
unsigned short __thiscall basic_streambuf_wchar_sgetc(basic_streambuf_wchar*);
unsigned short __thiscall basic_streambuf_wchar_sbumpc(basic_streambuf_wchar*);
unsigned short __thiscall basic_streambuf_wchar_sputc(basic_streambuf_wchar*, wchar_t);
/* class num_get<char> */
typedef struct {
locale_facet facet;
_Cvtvec cvt;
} num_get;
num_get* num_get_char_use_facet(const locale*);
istreambuf_iterator_char* __thiscall num_get_char_get_long(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*);
istreambuf_iterator_char* __thiscall num_get_char_get_ushort(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*);
istreambuf_iterator_char* __thiscall num_get_char_get_uint(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*);
istreambuf_iterator_char* __thiscall num_get_char_get_ulong(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*);
istreambuf_iterator_char* __thiscall num_get_char_get_float(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*);
istreambuf_iterator_char *__thiscall num_get_char_get_double(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*);
istreambuf_iterator_char *__thiscall num_get_char_get_ldouble(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*);
istreambuf_iterator_char *__thiscall num_get_char_get_void(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**);
istreambuf_iterator_char *__thiscall num_get_char_get_int64(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*);
istreambuf_iterator_char *__thiscall num_get_char_get_uint64(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*);
istreambuf_iterator_char *__thiscall num_get_char_get_bool(const num_get*, istreambuf_iterator_char*,
istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, MSVCP_bool*);
num_get* num_get_wchar_use_facet(const locale*);
num_get* num_get_short_use_facet(const locale*);
istreambuf_iterator_wchar* __thiscall num_get_wchar_get_long(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*);
istreambuf_iterator_wchar* __thiscall num_get_wchar_get_ushort(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*);
istreambuf_iterator_wchar* __thiscall num_get_wchar_get_uint(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*);
istreambuf_iterator_wchar* __thiscall num_get_wchar_get_ulong(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*);
istreambuf_iterator_wchar* __thiscall num_get_wchar_get_float(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*);
istreambuf_iterator_wchar *__thiscall num_get_wchar_get_double(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*);
istreambuf_iterator_wchar *__thiscall num_get_wchar_get_ldouble(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*);
istreambuf_iterator_wchar *__thiscall num_get_wchar_get_void(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**);
istreambuf_iterator_wchar *__thiscall num_get_wchar_get_int64(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*);
istreambuf_iterator_wchar *__thiscall num_get_wchar_get_uint64(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*);
istreambuf_iterator_wchar *__thiscall num_get_wchar_get_bool(const num_get*, istreambuf_iterator_wchar*,
istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, MSVCP_bool*);
/* class num_put<char> */
/* class num_put<wchar> */
typedef struct {
locale_facet facet;
_Cvtvec cvt;
} num_put;
num_put* num_put_char_use_facet(const locale*);
ostreambuf_iterator_char* __thiscall num_put_char_put_long(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, LONG);
ostreambuf_iterator_char* __thiscall num_put_char_put_ulong(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, ULONG);
ostreambuf_iterator_char* __thiscall num_put_char_put_double(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, double);
ostreambuf_iterator_char* __thiscall num_put_char_put_ldouble(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, double);
ostreambuf_iterator_char* __thiscall num_put_char_put_ptr(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, const void*);
ostreambuf_iterator_char* __thiscall num_put_char_put_int64(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, __int64);
ostreambuf_iterator_char* __thiscall num_put_char_put_uint64(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, unsigned __int64);
ostreambuf_iterator_char* __thiscall num_put_char_put_bool(const num_put*, ostreambuf_iterator_char*,
ostreambuf_iterator_char, ios_base*, char, MSVCP_bool);
num_put* num_put_wchar_use_facet(const locale*);
num_put* num_put_short_use_facet(const locale*);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_long(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_ulong(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_double(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, double);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_ldouble(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, double);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_ptr(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_int64(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_uint64(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64);
ostreambuf_iterator_wchar* __thiscall num_put_wchar_put_bool(const num_put*, ostreambuf_iterator_wchar*,
ostreambuf_iterator_wchar, ios_base*, wchar_t, MSVCP_bool);
void init_exception(void*);
void init_locale(void*);
void init_io(void*);
void free_io(void);
/* class complex<float> */
typedef struct {
float real;
float imag;
} complex_float;
/* class complex<double> */
/* class complex<long double> */
typedef struct {
double real;
double imag;
} complex_double;
...@@ -1482,8 +1482,13 @@ ctype_char* __thiscall ctype_char_vector_dtor(ctype_char *this, unsigned int fla ...@@ -1482,8 +1482,13 @@ ctype_char* __thiscall ctype_char_vector_dtor(ctype_char *this, unsigned int fla
/* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */ /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
/* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */ /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch, 12) DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch, 12)
#if _MSVCP_VER < 80
#define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
char, (const ctype_char*, char, char), (this, ch, unused))
#else
#define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \ #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
char, (const ctype_char*, char, char), (this, ch, unused)) char, (const ctype_char*, char, char), (this, ch, unused))
#endif
char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char unused) char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char unused)
{ {
TRACE("(%p %c %c)\n", this, ch, unused); TRACE("(%p %c %c)\n", this, ch, unused);
...@@ -1493,9 +1498,15 @@ char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char un ...@@ -1493,9 +1498,15 @@ char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char un
/* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */ /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
/* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */ /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow, 20) DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow, 20)
#if _MSVCP_VER < 80
#define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
const char*, (const ctype_char*, const char*, const char*, char, char*), \
(this, first, last, unused, dest))
#else
#define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \ #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
const char*, (const ctype_char*, const char*, const char*, char, char*), \ const char*, (const ctype_char*, const char*, const char*, char, char*), \
(this, first, last, unused, dest)) (this, first, last, unused, dest))
#endif
const char* __thiscall ctype_char_do_narrow(const ctype_char *this, const char* __thiscall ctype_char_do_narrow(const ctype_char *this,
const char *first, const char *last, char unused, char *dest) const char *first, const char *last, char unused, char *dest)
{ {
...@@ -2111,8 +2122,13 @@ char __thiscall ctype_wchar__Donarrow(const ctype_wchar *this, wchar_t ch, char ...@@ -2111,8 +2122,13 @@ char __thiscall ctype_wchar__Donarrow(const ctype_wchar *this, wchar_t ch, char
/* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */ /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
/* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */ /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch, 12) DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch, 12)
#if _MSVCP_VER < 80
#define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
#else
#define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \ #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt)) char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
#endif
char __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt) char __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
{ {
return ctype_wchar__Donarrow(this, ch, dflt); return ctype_wchar__Donarrow(this, ch, dflt);
...@@ -2123,9 +2139,15 @@ char __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, ch ...@@ -2123,9 +2139,15 @@ char __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, ch
/* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */ /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
/* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */ /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow, 20) DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow, 20)
#if _MSVCP_VER < 80
#define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
(this, first, last, dflt, dest))
#else
#define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \ #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \ const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
(this, first, last, dflt, dest)) (this, first, last, dflt, dest))
#endif
const wchar_t* __thiscall ctype_wchar_do_narrow(const ctype_wchar *this, const wchar_t* __thiscall ctype_wchar_do_narrow(const ctype_wchar *this,
const wchar_t *first, const wchar_t *last, char dflt, char *dest) const wchar_t *first, const wchar_t *last, char dflt, char *dest)
{ {
...@@ -9486,10 +9508,16 @@ void __asm_dummy_vtables(void) { ...@@ -9486,10 +9508,16 @@ void __asm_dummy_vtables(void) {
VTABLE_ADD_FUNC(ctype_char_do_toupper_ch) VTABLE_ADD_FUNC(ctype_char_do_toupper_ch)
VTABLE_ADD_FUNC(ctype_char_do_widen) VTABLE_ADD_FUNC(ctype_char_do_widen)
VTABLE_ADD_FUNC(ctype_char_do_widen_ch) VTABLE_ADD_FUNC(ctype_char_do_widen_ch)
#if _MSVCP_VER < 80
VTABLE_ADD_FUNC(ctype_char_do_narrow)
VTABLE_ADD_FUNC(ctype_char_do_narrow_ch));
#else
VTABLE_ADD_FUNC(ctype_char__Do_widen_s) VTABLE_ADD_FUNC(ctype_char__Do_widen_s)
VTABLE_ADD_FUNC(ctype_char_do_narrow) VTABLE_ADD_FUNC(ctype_char_do_narrow)
VTABLE_ADD_FUNC(ctype_char_do_narrow_ch) VTABLE_ADD_FUNC(ctype_char_do_narrow_ch)
VTABLE_ADD_FUNC(ctype_char__Do_narrow_s)); VTABLE_ADD_FUNC(ctype_char__Do_narrow_s));
#endif
__ASM_VTABLE(ctype_wchar, __ASM_VTABLE(ctype_wchar,
VTABLE_ADD_FUNC(ctype_wchar_vector_dtor) VTABLE_ADD_FUNC(ctype_wchar_vector_dtor)
VTABLE_ADD_FUNC(ctype_wchar_do_is) VTABLE_ADD_FUNC(ctype_wchar_do_is)
...@@ -9502,10 +9530,15 @@ void __asm_dummy_vtables(void) { ...@@ -9502,10 +9530,15 @@ void __asm_dummy_vtables(void) {
VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch) VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
VTABLE_ADD_FUNC(ctype_wchar_do_widen) VTABLE_ADD_FUNC(ctype_wchar_do_widen)
VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch) VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
#if _MSVCP_VER < 80
VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch));
#else
VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s) VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
VTABLE_ADD_FUNC(ctype_wchar_do_narrow) VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch) VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s)); VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
#endif
__ASM_VTABLE(ctype_short, __ASM_VTABLE(ctype_short,
VTABLE_ADD_FUNC(ctype_wchar_vector_dtor) VTABLE_ADD_FUNC(ctype_wchar_vector_dtor)
VTABLE_ADD_FUNC(ctype_wchar_do_is) VTABLE_ADD_FUNC(ctype_wchar_do_is)
...@@ -9518,10 +9551,15 @@ void __asm_dummy_vtables(void) { ...@@ -9518,10 +9551,15 @@ void __asm_dummy_vtables(void) {
VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch) VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
VTABLE_ADD_FUNC(ctype_wchar_do_widen) VTABLE_ADD_FUNC(ctype_wchar_do_widen)
VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch) VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
#if _MSVCP_VER < 80
VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch));
#else
VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s) VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
VTABLE_ADD_FUNC(ctype_wchar_do_narrow) VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch) VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s)); VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
#endif
__ASM_VTABLE(codecvt_base, __ASM_VTABLE(codecvt_base,
VTABLE_ADD_FUNC(codecvt_base_vector_dtor) VTABLE_ADD_FUNC(codecvt_base_vector_dtor)
VTABLE_ADD_FUNC(codecvt_base_do_always_noconv) VTABLE_ADD_FUNC(codecvt_base_do_always_noconv)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment