2004-09-14 Nathan Myers <ncm@cantrip.org>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Sep 2004 19:11:46 +0000 (19:11 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Sep 2004 19:11:46 +0000 (19:11 +0000)
* include/bits/fstream.tcc (xsgetn): Slightly tweak the recent fix
for 11722: copy can replace move; the common case is __avail == 0.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87501 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/fstream.tcc

index 7991951..8b52da2 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-14  Nathan Myers  <ncm@cantrip.org>
+
+       * include/bits/fstream.tcc (xsgetn): Slightly tweak the recent fix
+       for 11722: copy can replace move; the common case is __avail == 0.
+
 2004-09-14  Paolo Carlini  <pcarlini@suse.de>
 
        * include/bits/cpp_type_traits.h: Rename __is_trivially_copyable
index 542dc6e..c24d4ca 100644 (file)
@@ -524,14 +524,17 @@ namespace std
         {
           // First, copy the chars already present in the buffer.
           const streamsize __avail = this->egptr() - this->gptr();
-          if (__avail == 1)
-            *__s = *this->gptr();
-          else if (__avail > 1)
-            traits_type::move(__s, this->gptr(), __avail);
-          __s += __avail;
-          this->gbump(__avail);
-          __ret += __avail;
-          __n -= __avail;
+          if (__avail != 0)
+            {
+              if (__avail == 1)
+                *__s = *this->gptr();
+              else if (__avail > 1)
+                traits_type::copy(__s, this->gptr(), __avail);
+              __s += __avail;
+              this->gbump(__avail);
+              __ret += __avail;
+              __n -= __avail;
+            }
 
           const streamsize __len = _M_file.xsgetn(reinterpret_cast<char*>(__s),
                                                   __n);