Module: wine Branch: master Commit: 1fb247b0e31460d41bbb88439a1cf926e515b035 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1fb247b0e31460d41bbb88439a...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Oct 5 14:56:29 2012 +0200
msvcp60: Added basic_istream::seekg implementation.
---
dlls/msvcp60/ios.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ dlls/msvcp60/msvcp60.spec | 8 +++--- 2 files changed, 64 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcp60/ios.c b/dlls/msvcp60/ios.c index 4d753c5..2b06716 100644 --- a/dlls/msvcp60/ios.c +++ b/dlls/msvcp60/ios.c @@ -7332,6 +7332,36 @@ fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int return ret; }
+/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z */ +/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 12) +basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir) +{ + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + + TRACE("(%p %ld %d)\n", this, off, dir); + + if(basic_istream_char_sentry_create(this, TRUE)) { + if(!ios_base_fail(&base->base)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + fpos_int ret; + + basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in); + basic_istream_char_sentry_destroy(this); + + if(ret.off==0 && ret.pos==-1 && ret.state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + else + basic_ios_char_clear(base, IOSTATE_goodbit); + return this; + } + } + basic_istream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, IOSTATE_failbit); + return this; +} + /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28) @@ -8572,6 +8602,36 @@ fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_i return ret; }
+/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z */ +/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 12) +basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir) +{ + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + + TRACE("(%p %ld %d)\n", this, off, dir); + + if(basic_istream_wchar_sentry_create(this, TRUE)) { + if(!ios_base_fail(&base->base)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + fpos_int ret; + + basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in); + basic_istream_wchar_sentry_destroy(this); + + if(ret.off==0 && ret.pos==-1 && ret.state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); + else + basic_ios_wchar_clear(base, IOSTATE_goodbit); + return this; + } + } + basic_istream_wchar_sentry_destroy(this); + + basic_ios_wchar_setstate(base, IOSTATE_failbit); + return this; +} + /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ diff --git a/dlls/msvcp60/msvcp60.spec b/dlls/msvcp60/msvcp60.spec index 25ee5db..22a3da8 100644 --- a/dlls/msvcp60/msvcp60.spec +++ b/dlls/msvcp60/msvcp60.spec @@ -3908,14 +3908,14 @@ @ cdecl -arch=win64 ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z(ptr long ptr ptr) ctype_char_scan_not @ thiscall -arch=win32 ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z(ptr long ptr ptr) ctype_wchar_scan_not @ cdecl -arch=win64 ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z(ptr long ptr ptr) ctype_wchar_scan_not -@ stub -arch=win32 ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z +@ thiscall -arch=win32 ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z(ptr long long) basic_istream_char_seekg @ cdecl -arch=win64 ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z(ptr ptr) basic_istream_char_seekg_fpos @ thiscall -arch=win32 ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z(ptr long long int64 long long) basic_istream_char_seekg_fpos -@ stub -arch=win64 ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z -@ stub -arch=win32 ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z +@ cdecl -arch=win64 ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z(ptr long long) basic_istream_char_seekg +@ thiscall -arch=win32 ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z(ptr long long) basic_istream_wchar_seekg @ cdecl -arch=win64 ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z(ptr ptr) basic_istream_wchar_seekg_fpos @ thiscall -arch=win32 ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z(ptr long long int64 long long) basic_istream_wchar_seekg_fpos -@ stub -arch=win64 ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z +@ cdecl -arch=win64 ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z(ptr long long) basic_istream_wchar_seekg @ stub -arch=win32 ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z @ stub -arch=win64 ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z @ stub -arch=win32 ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z