From b30f73f72555aab03299d6c79a6d0f2655b65495 Mon Sep 17 00:00:00 2001 From: Daniel Lehman Date: Mon, 4 Apr 2016 13:24:21 -0700 Subject: [PATCH 1/2] msvcp110: Use sentry in istream<>::tellg partial revert of "msvcp90: In istream<>::tellg don't use sentry" 01c451703c3de5e029a20cc19b6fc77e382ee700 older visual studios don't seem to use it also clear eof bit Signed-off-by: Daniel Lehman --- dlls/msvcp90/ios.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index fbbb320..6b9a820 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -8746,6 +8746,20 @@ fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int TRACE("(%p %p)\n", this, ret); +#if _MSVCP_VER >= 110 + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), + ret, 0, SEEKDIR_cur, OPENMODE_in); + + if(ret->off==-1 && ret->pos==0 && ret->state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + }else { + ret->off = -1; + ret->pos = 0; + ret->state = 0; + } + basic_istream_char_sentry_destroy(this); +#else if(ios_base_fail(&base->base)) { ret->off = -1; ret->pos = 0; @@ -8758,6 +8772,7 @@ fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int if(ret->off==-1 && ret->pos==0 && ret->state==0) basic_ios_char_setstate(base, IOSTATE_failbit); +#endif return ret; } @@ -10270,6 +10285,20 @@ fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_i TRACE("(%p %p)\n", this, ret); +#if _MSVCP_VER >= 110 + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), + ret, 0, SEEKDIR_cur, OPENMODE_in); + + if(ret->off==-1 && ret->pos==0 && ret->state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); + }else { + ret->off = -1; + ret->pos = 0; + ret->state = 0; + } + basic_istream_wchar_sentry_destroy(this); +#else if(ios_base_fail(&base->base)) { ret->off = -1; ret->pos = 0; @@ -10281,7 +10310,7 @@ fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_i ret, 0, SEEKDIR_cur, OPENMODE_in); if(ret->off==-1 && ret->pos==0 && ret->state==0) basic_ios_wchar_setstate(base, IOSTATE_failbit); - +#endif return ret; } -- 1.9.5