Piotr Caban : msvcp60: Fix basic_string::operator[size_t] implementation.
Module: wine Branch: master Commit: 874c3f96f7559893a48bdc8ff1e9684a2a4c359d URL: http://source.winehq.org/git/wine.git/?a=commit;h=874c3f96f7559893a48bdc8ff1... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Sat Sep 12 16:05:40 2015 +0200 msvcp60: Fix basic_string::operator[size_t] implementation. --- dlls/msvcp60/msvcp60.spec | 8 ++++---- dlls/msvcp60/string.c | 41 ++++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/dlls/msvcp60/msvcp60.spec b/dlls/msvcp60/msvcp60.spec index 4ba1584..0aa3f1b 100644 --- a/dlls/msvcp60/msvcp60.spec +++ b/dlls/msvcp60/msvcp60.spec @@ -1535,12 +1535,12 @@ @ cdecl -arch=win64 ??9std@@YA_NPEBGAEBV?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@0@@Z(ptr ptr) MSVCP_basic_string_wchar_not_equal_cstr_str @ thiscall -arch=win32 ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QAEAADI(a)Z(ptr long) MSVCP_basic_string_char_operator_at @ cdecl -arch=win64 ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEAAAEAD_K(a)Z(ptr long) MSVCP_basic_string_char_operator_at -@ thiscall -arch=win32 ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QBEABDI(a)Z(ptr long) MSVCP_basic_string_char_operator_at -@ cdecl -arch=win64 ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEBAAEBD_K(a)Z(ptr long) MSVCP_basic_string_char_operator_at +@ thiscall -arch=win32 ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QBEABDI(a)Z(ptr long) MSVCP_basic_string_char_operator_at_const +@ cdecl -arch=win64 ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEBAAEBD_K(a)Z(ptr long) MSVCP_basic_string_char_operator_at_const @ thiscall -arch=win32 ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QAEAAGI(a)Z(ptr long) MSVCP_basic_string_wchar_operator_at @ cdecl -arch=win64 ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEAAAEAG_K(a)Z(ptr long) MSVCP_basic_string_wchar_operator_at -@ thiscall -arch=win32 ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QBEABGI(a)Z(ptr long) MSVCP_basic_string_wchar_operator_at -@ cdecl -arch=win64 ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEBAAEBG_K(a)Z(ptr long) MSVCP_basic_string_wchar_operator_at +@ thiscall -arch=win32 ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QBEABGI(a)Z(ptr long) MSVCP_basic_string_wchar_operator_at_const +@ cdecl -arch=win64 ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEBAAEBG_K(a)Z(ptr long) MSVCP_basic_string_wchar_operator_at_const @ thiscall -arch=win32 ??Bid(a)locale@std@@QAEIXZ(ptr) locale_id_operator_size_t @ cdecl -arch=win64 ??Bid(a)locale@std@@QEAA_KXZ(ptr) locale_id_operator_size_t @ thiscall -arch=win32 ??Bios_base(a)std@@QBEPAXXZ(ptr) ios_base_op_fail diff --git a/dlls/msvcp60/string.c b/dlls/msvcp60/string.c index 76a0e02..09f9854 100644 --- a/dlls/msvcp60/string.c +++ b/dlls/msvcp60/string.c @@ -22,7 +22,6 @@ #include "msvcp.h" #include "stdio.h" -#include "assert.h" #include "windef.h" #include "winbase.h" @@ -1412,15 +1411,29 @@ basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_cstr_bstr(basic_s /* ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QAEAADI(a)Z */ /* ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEAAAEAD_K(a)Z */ -/* ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QBEABDI(a)Z */ -/* ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEBAAEBD_K(a)Z */ DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at, 8) char* __thiscall MSVCP_basic_string_char_operator_at( basic_string_char *this, MSVCP_size_t pos) { TRACE("%p %lu\n", this, pos); - assert(this->size >= pos); + if(!this->ptr || pos>this->size) + return (char*)basic_string_char__Nullstr(); + + basic_string_char__Freeze(this); + return this->ptr+pos; +} + +/* ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QBEABDI(a)Z */ +/* ??A?$basic_string(a)DU?$char_traits(a)D@std@@V?$allocator(a)D@2@@std@@QEBAAEBD_K(a)Z */ +DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at_const, 8) +const char* __thiscall MSVCP_basic_string_char_operator_at_const( + const basic_string_char *this, MSVCP_size_t pos) +{ + TRACE("%p %lu\n", this, pos); + + if(!this->ptr) + return basic_string_char__Nullstr(); return this->ptr+pos; } @@ -2935,15 +2948,29 @@ basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_cstr_bstr(basic /* ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QAEAAGI(a)Z */ /* ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEAAAEAG_K(a)Z */ -/* ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QBEABGI(a)Z */ -/* ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEBAAEBG_K(a)Z */ DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at, 8) wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at( basic_string_wchar *this, MSVCP_size_t pos) { TRACE("%p %lu\n", this, pos); - assert(this->size >= pos); + if(!this->ptr || pos>this->size) + return (wchar_t*)basic_string_wchar__Nullstr(); + + basic_string_wchar__Freeze(this); + return this->ptr+pos; +} + +/* ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QBEABGI(a)Z */ +/* ??A?$basic_string(a)GU?$char_traits(a)G@std@@V?$allocator(a)G@2@@std@@QEBAAEBG_K(a)Z */ +DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at_const, 8) +const wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at_const( + const basic_string_wchar *this, MSVCP_size_t pos) +{ + TRACE("%p %lu\n", this, pos); + + if(!this->ptr) + return basic_string_wchar__Nullstr(); return this->ptr+pos; }
participants (1)
-
Alexandre Julliard