diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index 068c8c5e796..32e94a7781c 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -26,6 +26,8 @@ #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(msvcp90); +typedef int category; + typedef struct _locale_id { MSVCP_size_t id; } locale_id; @@ -35,9 +37,22 @@ typedef struct _locale_facet { MSVCP_size_t refs; } locale_facet; +typedef struct _locale__Locimp { + locale_facet facet; + locale_facet **facetvec; + MSVCP_size_t facet_cnt; + category catmask; + MSVCP_bool transparent; + basic_string_char name; +} locale__Locimp; + /* ?_Id_cnt@id@locale@std@@0HA */ int locale_id__Id_cnt = 0; +/* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */ +/* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */ +locale__Locimp *locale__Locimp__Clocptr; + static const vtable_ptr MSVCP_locale_facet_vtable[]; /* ??0id@locale@std@@QAE@I@Z */ @@ -150,3 +165,119 @@ MSVCP_size_t __cdecl locale_facet__Getcat(const locale_facet **facet, const /*lo static const vtable_ptr MSVCP_locale_facet_vtable[] = { (vtable_ptr)THISCALL_NAME(MSVCP_locale_facet_vector_dtor) }; + +/* ??_F_Locimp@locale@std@@QAEXXZ */ +/* ??_F_Locimp@locale@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor, 4) +locale__Locimp* __thiscall locale__Locimp_ctor(locale__Locimp *this) +{ + FIXME("(%p) stub\n", this); + return NULL; +} + +/* ??0_Locimp@locale@std@@AAE@_N@Z */ +/* ??0_Locimp@locale@std@@AEAA@_N@Z */ +DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent, 8) +locale__Locimp* __thiscall locale__Locimp_ctor_transparent(locale__Locimp *this, MSVCP_bool transparent) +{ + FIXME("(%p %d) stub\n", this, transparent); + return NULL; +} + +/* ??0_Locimp@locale@std@@AAE@ABV012@@Z */ +/* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */ +/* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */ +/* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */ +DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor, 8) +locale__Locimp* __thiscall locale__Locimp_copy_ctor(locale__Locimp *this, const locale__Locimp *copy) +{ + FIXME("(%p %p) stub\n", this, copy); + return NULL; +} + +/* ??1_Locimp@locale@std@@MAE@XZ */ +/* ??1_Locimp@locale@std@@MEAA@XZ */ +/* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */ +/* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */ +DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor, 4) +void __thiscall locale__Locimp_dtor(locale__Locimp *this) +{ + FIXME("(%p) stub\n", this); +} + +DEFINE_THISCALL_WRAPPER(MSVCP_locale__Locimp_vector_dtor, 8) +locale__Locimp* __thiscall MSVCP_locale__Locimp_vector_dtor(locale__Locimp *this, unsigned int flags) +{ + TRACE("(%p %x) stub\n", this, flags); + if(flags & 2) { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)this-1; + + for(i=*ptr-1; i>=0; i--) + locale__Locimp_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + locale__Locimp_dtor(this); + if(flags & 1) + MSVCRT_operator_delete(this); + } + + return this; +} + +/* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */ +/* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */ +void __cdecl locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet *facet, MSVCP_size_t id) +{ + FIXME("(%p %p %lu) stub\n", locimp, facet, id); +} + +/* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */ +/* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */ +DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac, 12) +void __thiscall locale__Locimp__Addfac(locale__Locimp *this, locale_facet *facet, MSVCP_size_t id) +{ + FIXME("(%p %p %lu) stub\n", this, facet, id); +} + +/* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */ +/* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */ +locale__Locimp** __cdecl locale__Locimp__Clocptr_func(void) +{ + FIXME("stub\n"); + return NULL; +} + +/* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */ +/* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */ +locale__Locimp* __cdecl locale__Locimp__Makeloc(const /*_Locinfo*/void *locinfo, category cat, locale__Locimp *locimp, const /*locale*/void *loc) +{ + FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc); + return NULL; +} + +/* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */ +/* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */ +void __cdecl locale__Locimp__Makeushloc(const /*_Locinfo*/void *locinfo, category cat, locale__Locimp *locimp, const /*locale*/void *loc) +{ + FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc); +} + +/* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */ +/* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */ +void __cdecl locale__Locimp__Makewloc(const /*_Locinfo*/void *locinfo, category cat, locale__Locimp *locimp, const /*locale*/void *loc) +{ + FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc); +} + +/* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */ +/* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */ +void __cdecl locale__Locimp__Makexloc(const /*_Locinfo*/void *locinfo, category cat, locale__Locimp *locimp, const /*locale*/void *loc) +{ + FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc); +} + +/* ??_7_Locimp@locale@std@@6B@ */ +const vtable_ptr MSVCP_locale__Locimp_vtable[] = { + (vtable_ptr)THISCALL_NAME(MSVCP_locale__Locimp_vector_dtor) +}; diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index c10e70fbef9..91794321182 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -1068,10 +1068,10 @@ @ stub -arch=win64 ??0Init@ios_base@std@@QEAA@XZ @ stub -arch=win32 ??0_Init_locks@std@@QAE@XZ @ stub -arch=win64 ??0_Init_locks@std@@QEAA@XZ -@ stub -arch=win32 ??0_Locimp@locale@std@@AAE@ABV012@@Z -@ stub -arch=win64 ??0_Locimp@locale@std@@AEAA@AEBV012@@Z -@ stub -arch=win32 ??0_Locimp@locale@std@@AAE@_N@Z -@ stub -arch=win64 ??0_Locimp@locale@std@@AEAA@_N@Z +@ thiscall -arch=win32 ??0_Locimp@locale@std@@AAE@ABV012@@Z(ptr ptr) locale__Locimp_copy_ctor +@ cdecl -arch=win64 ??0_Locimp@locale@std@@AEAA@AEBV012@@Z(ptr ptr) locale__Locimp_copy_ctor +@ thiscall -arch=win32 ??0_Locimp@locale@std@@AAE@_N@Z(ptr long) locale__Locimp_ctor_transparent +@ cdecl -arch=win64 ??0_Locimp@locale@std@@AEAA@_N@Z(ptr long) locale__Locimp_ctor_transparent @ stub -arch=win32 ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z @ stub -arch=win64 ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z @ stub -arch=win32 ??0_Locinfo@std@@QAE@HPBD@Z @@ -1312,8 +1312,8 @@ @ stub -arch=win64 ??1Init@ios_base@std@@QEAA@XZ @ stub -arch=win32 ??1_Init_locks@std@@QAE@XZ @ stub -arch=win64 ??1_Init_locks@std@@QEAA@XZ -@ stub -arch=win32 ??1_Locimp@locale@std@@MAE@XZ -@ stub -arch=win64 ??1_Locimp@locale@std@@MEAA@XZ +@ thiscall -arch=win32 ??1_Locimp@locale@std@@MAE@XZ(ptr) locale__Locimp_dtor +@ cdecl -arch=win64 ??1_Locimp@locale@std@@MEAA@XZ(ptr) locale__Locimp_dtor @ stub -arch=win32 ??1_Locinfo@std@@QAE@XZ @ stub -arch=win64 ??1_Locinfo@std@@QEAA@XZ @ stub -arch=win32 ??1_Lockit@std@@QAE@XZ @@ -1857,7 +1857,7 @@ # extern ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ # extern ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ # extern ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ -# extern ??_7_Locimp@locale@std@@6B@ +@ extern ??_7_Locimp@locale@std@@6B@ MSVCP_locale__Locimp_vtable # extern ??_7codecvt_base@std@@6B@ # extern ??_7ctype_base@std@@6B@ @ extern ??_7ios_base@std@@6B@ MSVCP_ios_base_vtable @@ -2075,8 +2075,8 @@ @ stub -arch=win64 ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ @ stub -arch=win32 ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ @ stub -arch=win64 ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ -@ stub -arch=win32 ??_F_Locimp@locale@std@@QAEXXZ -@ stub -arch=win64 ??_F_Locimp@locale@std@@QEAAXXZ +@ thiscall -arch=win32 ??_F_Locimp@locale@std@@QAEXXZ(ptr) locale__Locimp_ctor +@ cdecl -arch=win64 ??_F_Locimp@locale@std@@QEAAXXZ(ptr) locale__Locimp_ctor @ stub -arch=win32 ??_F_Locinfo@std@@QAEXXZ @ stub -arch=win64 ??_F_Locinfo@std@@QEAAXXZ @ stub -arch=win32 ??_F_Timevec@std@@QAEXXZ @@ -2099,8 +2099,8 @@ @ stub -arch=win64 ??_Ftime_base@std@@QEAAXXZ @ stub -arch=win32 ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z @ stub -arch=win64 ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z -@ stub -arch=win32 ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z -@ stub -arch=win64 ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z +@ thiscall -arch=win32 ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z(ptr ptr long) locale__Locimp__Addfac +@ cdecl -arch=win64 ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z(ptr ptr long) locale__Locimp__Addfac @ stub -arch=win32 ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z @ stub -arch=win64 ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z @ cdecl -arch=win32 ?_Addstd@ios_base@std@@SAXPAV12@@Z(ptr) ios_base_Addstd @@ -2125,10 +2125,10 @@ # extern -arch=win64 ?_Cl@?5???$log@M@std@@YA?AV?$complex@M@1@AEBV21@@Z@4MB # extern -arch=win32 ?_Cl@?5???$log@N@std@@YA?AV?$complex@N@1@ABV21@@Z@4NB # extern -arch=win64 ?_Cl@?5???$log@N@std@@YA?AV?$complex@N@1@AEBV21@@Z@4NB -# extern -arch=win32 ?_Clocptr@_Locimp@locale@std@@0PAV123@A -# extern -arch=win64 ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA -@ stub -arch=win32 ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ -@ stub -arch=win64 ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ +@ extern -arch=win32 ?_Clocptr@_Locimp@locale@std@@0PAV123@A locale__Locimp__Clocptr +@ extern -arch=win64 ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA locale__Locimp__Clocptr +@ cdecl -arch=win32 ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ(long) locale__Locimp__Clocptr_func +@ cdecl -arch=win64 ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ(long) locale__Locimp__Clocptr_func @ stub -arch=win32 ?_Clog_func@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@XZ @ stub -arch=win64 ?_Clog_func@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@XZ @ stub -arch=win64 ?_Cm@?5???$log@M@std@@YA?AV?$complex@M@1@AEBV21@@Z@4MB @@ -2575,12 +2575,12 @@ @ stub ?_Isnan@?$_Ctraits@M@std@@SA_NM@Z @ stub ?_Isnan@?$_Ctraits@N@std@@SA_NN@Z @ stub ?_Isnan@?$_Ctraits@O@std@@SA_NO@Z -@ stub -arch=win32 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z -@ stub -arch=win64 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z -@ stub -arch=win32 ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z -@ stub -arch=win64 ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z -@ stub -arch=win32 ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z -@ stub -arch=win64 ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z +@ cdecl -arch=win32 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z(ptr ptr long) locale__Locimp__Locimp_Addfac +@ cdecl -arch=win64 ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z(ptr ptr long) locale__Locimp__Locimp_Addfac +@ cdecl -arch=win32 ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z(ptr ptr) locale__Locimp_copy_ctor +@ cdecl -arch=win64 ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z(ptr ptr) locale__Locimp_copy_ctor +@ cdecl -arch=win32 ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z(ptr) locale__Locimp_dtor +@ cdecl -arch=win64 ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z(ptr) locale__Locimp_dtor @ stub -arch=win32 ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z @ stub -arch=win64 ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z @ stub -arch=win32 ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z @@ -2615,14 +2615,14 @@ @ stub -arch=win64 ?_MP_Mul@tr1@std@@YAXQEA_K_K1@Z @ stub -arch=win32 ?_MP_Rem@tr1@std@@YAXQA_K_K@Z @ stub -arch=win64 ?_MP_Rem@tr1@std@@YAXQEA_K_K@Z -@ stub -arch=win32 ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z -@ stub -arch=win64 ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z -@ stub -arch=win32 ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z -@ stub -arch=win64 ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z -@ stub -arch=win32 ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z -@ stub -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z -@ stub -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z -@ stub -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z +@ cdecl -arch=win32 ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makeloc +@ cdecl -arch=win64 ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makeloc +@ cdecl -arch=win32 ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makeushloc +@ cdecl -arch=win64 ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makeushloc +@ cdecl -arch=win32 ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makewloc +@ cdecl -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makewloc +@ cdecl -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc +@ cdecl -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc @ stub -arch=win32 ?_Makpat@?$_Mpunct@D@std@@AAEXAAUpattern@money_base@2@III@Z @ stub -arch=win64 ?_Makpat@?$_Mpunct@D@std@@AEAAXAEAUpattern@money_base@2@III@Z @ stub -arch=win32 ?_Makpat@?$_Mpunct@G@std@@AAEXAAUpattern@money_base@2@III@Z