Piotr Caban : msvcp60: Added basic_istream::seekg implementation.

Alexandre Julliard julliard at winehq.org
Mon Oct 8 13:39:56 CDT 2012


Module: wine
Branch: master
Commit: 1fb247b0e31460d41bbb88439a1cf926e515b035
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1fb247b0e31460d41bbb88439a1cf926e515b035

Author: Piotr Caban <piotr at 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 at DU?$char_traits at D@std@@@std@@QAEAAV12 at JW4seekdir@ios_base at 2@@Z */
+/* ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QEAAAEAV12 at _JW4seekdir@ios_base at 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 at DU?$char_traits at D@std@@@std@@QAEAAV12 at V?$fpos at H@2@@Z */
 /* ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QEAAAEAV12 at V?$fpos at 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 at GU?$char_traits at G@std@@@std@@QAEAAV12 at JW4seekdir@ios_base at 2@@Z */
+/* ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QEAAAEAV12 at _JW4seekdir@ios_base at 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 at _WU?$char_traits at _W@std@@@std@@QAEAAV12 at V?$fpos at H@2@@Z */
 /* ?seekg@?$basic_istream at _WU?$char_traits at _W@std@@@std@@QEAAAEAV12 at V?$fpos at H@2@@Z */
 /* ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QAEAAV12 at V?$fpos at 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 at D@std@@QEBAPEBDFPEBD0 at Z(ptr long ptr ptr) ctype_char_scan_not
 @ thiscall -arch=win32 ?scan_not@?$ctype at G@std@@QBEPBGFPBG0 at Z(ptr long ptr ptr) ctype_wchar_scan_not
 @ cdecl -arch=win64 ?scan_not@?$ctype at G@std@@QEBAPEBGFPEBG0 at Z(ptr long ptr ptr) ctype_wchar_scan_not
-@ stub -arch=win32 ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QAEAAV12 at JW4seekdir@ios_base at 2@@Z
+@ thiscall -arch=win32 ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QAEAAV12 at JW4seekdir@ios_base at 2@@Z(ptr long long) basic_istream_char_seekg
 @ cdecl -arch=win64 ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QEAAAEAV12 at V?$fpos at H@2@@Z(ptr ptr) basic_istream_char_seekg_fpos
 @ thiscall -arch=win32 ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QAEAAV12 at V?$fpos at H@2@@Z(ptr long long int64 long long) basic_istream_char_seekg_fpos
-@ stub -arch=win64 ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QEAAAEAV12 at _JW4seekdir@ios_base at 2@@Z
-@ stub -arch=win32 ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QAEAAV12 at JW4seekdir@ios_base at 2@@Z
+@ cdecl -arch=win64 ?seekg@?$basic_istream at DU?$char_traits at D@std@@@std@@QEAAAEAV12 at _JW4seekdir@ios_base at 2@@Z(ptr long long) basic_istream_char_seekg
+@ thiscall -arch=win32 ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QAEAAV12 at JW4seekdir@ios_base at 2@@Z(ptr long long) basic_istream_wchar_seekg
 @ cdecl -arch=win64 ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QEAAAEAV12 at V?$fpos at H@2@@Z(ptr ptr) basic_istream_wchar_seekg_fpos
 @ thiscall -arch=win32 ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QAEAAV12 at V?$fpos at H@2@@Z(ptr long long int64 long long) basic_istream_wchar_seekg_fpos
-@ stub -arch=win64 ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QEAAAEAV12 at _JW4seekdir@ios_base at 2@@Z
+@ cdecl -arch=win64 ?seekg@?$basic_istream at GU?$char_traits at G@std@@@std@@QEAAAEAV12 at _JW4seekdir@ios_base at 2@@Z(ptr long long) basic_istream_wchar_seekg
 @ stub -arch=win32 ?seekoff@?$basic_filebuf at DU?$char_traits at D@std@@@std@@MAE?AV?$fpos at H@2 at JW4seekdir@ios_base at 2@H at Z
 @ stub -arch=win64 ?seekoff@?$basic_filebuf at DU?$char_traits at D@std@@@std@@MEAA?AV?$fpos at H@2 at _JW4seekdir@ios_base at 2@H at Z
 @ stub -arch=win32 ?seekoff@?$basic_filebuf at GU?$char_traits at G@std@@@std@@MAE?AV?$fpos at H@2 at JW4seekdir@ios_base at 2@H at Z




More information about the wine-cvs mailing list