Daniel Lehman : msvcp: Sync istream<>::_ignore.

Alexandre Julliard julliard at winehq.org
Thu Oct 25 13:50:45 CDT 2012


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

Author: Daniel Lehman <dlehman at esri.com>
Date:   Wed Oct 24 13:47:05 2012 -0700

msvcp: Sync istream<>::_ignore.

---

 dlls/msvcp100/ios.c |   30 ++++++++++++++++++++++--------
 dlls/msvcp60/ios.c  |   32 +++++++++++++++++++++++---------
 dlls/msvcp71/ios.c  |   32 +++++++++++++++++++++++---------
 3 files changed, 68 insertions(+), 26 deletions(-)

diff --git a/dlls/msvcp100/ios.c b/dlls/msvcp100/ios.c
index 9583ae1..83a2c3a 100644
--- a/dlls/msvcp100/ios.c
+++ b/dlls/msvcp100/ios.c
@@ -5747,6 +5747,7 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi
 {
     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
     int ch = (unsigned char)delim;
+    unsigned int state;
 
     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim);
 
@@ -5754,22 +5755,28 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi
 
     if(basic_istream_char_sentry_create(this, TRUE)) {
         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
+        state = IOSTATE_goodbit;
 
         while(count > 0) {
             ch = basic_streambuf_char_sbumpc(strbuf);
 
-            if(ch==EOF || ch==(unsigned char)delim)
+            if(ch==EOF) {
+                state = IOSTATE_eofbit;
+                break;
+            }
+
+            if(ch==(unsigned char)delim)
                 break;
 
             this->count++;
             if(count != INT_MAX)
                 count--;
         }
-    }
+    }else
+        state = IOSTATE_failbit;
     basic_istream_char_sentry_destroy(this);
 
-    if(ch == EOF)
-        basic_ios_char_setstate(base, IOSTATE_eofbit);
+    basic_ios_char_setstate(base, state);
     return this;
 }
 
@@ -6871,6 +6878,7 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
 {
     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
     unsigned short ch = delim;
+    unsigned int state;
 
     TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim);
 
@@ -6878,22 +6886,28 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
 
     if(basic_istream_wchar_sentry_create(this, TRUE)) {
         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
+        state = IOSTATE_goodbit;
 
         while(count > 0) {
             ch = basic_streambuf_wchar_sbumpc(strbuf);
 
-            if(ch==WEOF || ch==delim)
+            if(ch==WEOF) {
+                state = IOSTATE_eofbit;
+                break;
+            }
+
+            if(ch==delim)
                 break;
 
             this->count++;
             if(count != INT_MAX)
                 count--;
         }
-    }
+    }else
+        state = IOSTATE_failbit;
     basic_istream_wchar_sentry_destroy(this);
 
-    if(ch == WEOF)
-        basic_ios_wchar_setstate(base, IOSTATE_eofbit);
+    basic_ios_wchar_setstate(base, state);
     return this;
 }
 
diff --git a/dlls/msvcp60/ios.c b/dlls/msvcp60/ios.c
index 48de106..82015547 100644
--- a/dlls/msvcp60/ios.c
+++ b/dlls/msvcp60/ios.c
@@ -7137,7 +7137,8 @@ DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 12)
 basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim)
 {
     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
-    int ch = delim;
+    int ch = (unsigned char)delim;
+    unsigned int state;
 
     TRACE("(%p %ld %d)\n", this, count, delim);
 
@@ -7145,22 +7146,28 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi
 
     if(basic_istream_char_sentry_create(this, TRUE)) {
         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
+        state = IOSTATE_goodbit;
 
         while(count > 0) {
             ch = basic_streambuf_char_sbumpc(strbuf);
 
-            if(ch==EOF || ch==delim)
+            if(ch==EOF) {
+                state = IOSTATE_eofbit;
+                break;
+            }
+
+            if(ch==(unsigned char)delim)
                 break;
 
             this->count++;
             if(count != INT_MAX)
                 count--;
         }
-    }
+    }else
+        state = IOSTATE_failbit;
     basic_istream_char_sentry_destroy(this);
 
-    if(ch == EOF)
-        basic_ios_char_setstate(base, IOSTATE_eofbit);
+    basic_ios_char_setstate(base, state);
     return this;
 }
 
@@ -8389,6 +8396,7 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
 {
     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
     unsigned short ch = delim;
+    unsigned int state;
 
     TRACE("(%p %ld %d)\n", this, count, delim);
 
@@ -8396,22 +8404,28 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
 
     if(basic_istream_wchar_sentry_create(this, TRUE)) {
         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
+        state = IOSTATE_goodbit;
 
         while(count > 0) {
             ch = basic_streambuf_wchar_sbumpc(strbuf);
 
-            if(ch==WEOF || ch==delim)
+            if(ch==WEOF) {
+                state = IOSTATE_eofbit;
+                break;
+            }
+
+            if(ch==delim)
                 break;
 
             this->count++;
             if(count != INT_MAX)
                 count--;
         }
-    }
+    }else
+        state = IOSTATE_failbit;
     basic_istream_wchar_sentry_destroy(this);
 
-    if(ch == WEOF)
-        basic_ios_wchar_setstate(base, IOSTATE_eofbit);
+    basic_ios_wchar_setstate(base, state);
     return this;
 }
 
diff --git a/dlls/msvcp71/ios.c b/dlls/msvcp71/ios.c
index 148f2c8..34404b5 100644
--- a/dlls/msvcp71/ios.c
+++ b/dlls/msvcp71/ios.c
@@ -7469,7 +7469,8 @@ DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 12)
 basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim)
 {
     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
-    int ch = delim;
+    int ch = (unsigned char)delim;
+    unsigned int state;
 
     TRACE("(%p %ld %d)\n", this, count, delim);
 
@@ -7477,22 +7478,28 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi
 
     if(basic_istream_char_sentry_create(this, TRUE)) {
         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
+        state = IOSTATE_goodbit;
 
         while(count > 0) {
             ch = basic_streambuf_char_sbumpc(strbuf);
 
-            if(ch==EOF || ch==delim)
+            if(ch==EOF) {
+                state = IOSTATE_eofbit;
+                break;
+            }
+
+            if(ch==(unsigned char)delim)
                 break;
 
             this->count++;
             if(count != INT_MAX)
                 count--;
         }
-    }
+    }else
+        state = IOSTATE_failbit;
     basic_istream_char_sentry_destroy(this);
 
-    if(ch == EOF)
-        basic_ios_char_setstate(base, IOSTATE_eofbit);
+    basic_ios_char_setstate(base, state);
     return this;
 }
 
@@ -8724,6 +8731,7 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
 {
     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
     unsigned short ch = delim;
+    unsigned int state;
 
     TRACE("(%p %ld %d)\n", this, count, delim);
 
@@ -8731,22 +8739,28 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
 
     if(basic_istream_wchar_sentry_create(this, TRUE)) {
         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
+        state = IOSTATE_goodbit;
 
         while(count > 0) {
             ch = basic_streambuf_wchar_sbumpc(strbuf);
 
-            if(ch==WEOF || ch==delim)
+            if(ch==WEOF) {
+                state = IOSTATE_eofbit;
+                break;
+            }
+
+            if(ch==delim)
                 break;
 
             this->count++;
             if(count != INT_MAX)
                 count--;
         }
-    }
+    }else
+        state = IOSTATE_failbit;
     basic_istream_wchar_sentry_destroy(this);
 
-    if(ch == WEOF)
-        basic_ios_wchar_setstate(base, IOSTATE_eofbit);
+    basic_ios_wchar_setstate(base, state);
     return this;
 }
 




More information about the wine-cvs mailing list