Piotr Caban : msvcp60: Fix basic_string::operator[size_t] implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Sep 14 09:44:34 CDT 2015
Module: wine
Branch: master
Commit: 874c3f96f7559893a48bdc8ff1e9684a2a4c359d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=874c3f96f7559893a48bdc8ff1e9684a2a4c359d
Author: Piotr Caban <piotr at 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 at GU?$char_traits at G@std@@V?$allocator at G@2@@0@@Z(ptr ptr) MSVCP_basic_string_wchar_not_equal_cstr_str
@ thiscall -arch=win32 ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEAADI at Z(ptr long) MSVCP_basic_string_char_operator_at
@ cdecl -arch=win64 ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAAEAD_K at Z(ptr long) MSVCP_basic_string_char_operator_at
-@ thiscall -arch=win32 ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEABDI at Z(ptr long) MSVCP_basic_string_char_operator_at
-@ cdecl -arch=win64 ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAAEBD_K at Z(ptr long) MSVCP_basic_string_char_operator_at
+@ thiscall -arch=win32 ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEABDI at Z(ptr long) MSVCP_basic_string_char_operator_at_const
+@ cdecl -arch=win64 ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAAEBD_K at Z(ptr long) MSVCP_basic_string_char_operator_at_const
@ thiscall -arch=win32 ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QAEAAGI at Z(ptr long) MSVCP_basic_string_wchar_operator_at
@ cdecl -arch=win64 ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEAAAEAG_K at Z(ptr long) MSVCP_basic_string_wchar_operator_at
-@ thiscall -arch=win32 ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QBEABGI at Z(ptr long) MSVCP_basic_string_wchar_operator_at
-@ cdecl -arch=win64 ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEBAAEBG_K at Z(ptr long) MSVCP_basic_string_wchar_operator_at
+@ thiscall -arch=win32 ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QBEABGI at Z(ptr long) MSVCP_basic_string_wchar_operator_at_const
+@ cdecl -arch=win64 ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEBAAEBG_K at Z(ptr long) MSVCP_basic_string_wchar_operator_at_const
@ thiscall -arch=win32 ??Bid at locale@std@@QAEIXZ(ptr) locale_id_operator_size_t
@ cdecl -arch=win64 ??Bid at locale@std@@QEAA_KXZ(ptr) locale_id_operator_size_t
@ thiscall -arch=win32 ??Bios_base at 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 at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEAADI at Z */
/* ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAAEAD_K at Z */
-/* ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEABDI at Z */
-/* ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAAEBD_K at 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 at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEABDI at Z */
+/* ??A?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAAEBD_K at 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 at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QAEAAGI at Z */
/* ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEAAAEAG_K at Z */
-/* ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QBEABGI at Z */
-/* ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEBAAEBG_K at 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 at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QBEABGI at Z */
+/* ??A?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEBAAEBG_K at 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;
}
More information about the wine-cvs
mailing list