+2001-06-11 Benjamin Kosnik <bkoz@redhat.com>
+
+ libstdc++/3126
+ * include/bits/basic_string.h (string::compare): Adjust signatures
+ as per DR 5.
+ * include/bits/basic_string.tcc: And here.
+
+ libstdc++/2346
+ * config/c_io_stdio.h: Remove whitespace.
+ * testsuite/27_io/istream_seeks.cc (test03): Add regression.
+ (test02): Add regression.
+ * testsuite/27_io/istream_seeks-3.tst: New file.
+
2001-06-11 Phil Edwards <pme@sources.redhat.com>
* README: Update to reflect reality.
}
#endif // _CPP_IO_STDIO_H
-
-
-
-
-
-
-
-
-
-
int
compare(const _CharT* __s) const;
+#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
+// 5. String::compare specification questionable
+ int
+ compare(size_type __pos, size_type __n1, const _CharT* __s) const;
+
int
compare(size_type __pos, size_type __n1, const _CharT* __s,
- size_type __n2 = npos) const;
+ size_type __n2) const;
+#endif
};
}
+ template<typename _CharT, typename _Traits, typename _Alloc>
+ int
+ basic_string <_CharT,_Traits,_Alloc>::
+ compare(size_type __pos, size_type __n1, const _CharT* __s) const
+ {
+ size_type __size = this->size();
+ if (__pos > __size)
+ __throw_out_of_range("basic_string::compare");
+
+ size_type __osize = traits_type::length(__s);
+ size_type __rsize = min(__size - __pos, __n1);
+ size_type __len = min(__rsize, __osize);
+ int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+ if (!__r)
+ __r = __rsize - __osize;
+ return __r;
+ }
+
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string <_CharT,_Traits,_Alloc>::
_Traits::copy(__buf, __str.data(), __bytes);
__buf[__bytes] = _CharT();
}
+} // namespace std
-} // std::
-
-#endif /* _CPP_BITS_STRING_TCC */
+#endif
--- /dev/null
+0-0 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-1 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-2 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-3 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-4 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-5 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-6 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-7 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-8 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
+0-9 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
// 2000-06-29 bkoz
-// Copyright (C) 2000 Free Software Foundation
+// Copyright (C) 2000, 2001 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <fstream>
#include <debug_assert.h>
-
bool test01()
{
using namespace std;
return test;
}
+const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
+const int times = 10;
+
+void write_rewind(std::iostream& stream)
+{
+ for (int j = 0; j < times; j++)
+ {
+ bool test = true;
+ std::streampos begin = stream.tellg();
+
+ for (int i = 0; i < times; ++i)
+ stream << j << '-' << i << s << '\n';
+
+ stream.seekg(begin);
+ std::streampos end = stream.tellg();
+ std::streampos badpos = std::streampos(std::streambuf::off_type(-1));
+ }
+}
+
+void check_contents(std::iostream& stream)
+{
+ bool test = true;
+
+ stream.clear();
+ stream.seekg(0, std::ios::beg);
+ int i = 0;
+ int loop = times * times + 2;
+ while (i < loop)
+ {
+ stream.ignore(80, '\n');
+ if (stream.good())
+ ++i;
+ else
+ break;
+ }
+ VERIFY( i == times );
+}
+
+// fstream
+// libstdc++/2346
+void test02()
+{
+ std::fstream ofstrm;
+ ofstrm.open("istream_seeks-3.txt", std::ios::out);
+ if (!ofstrm)
+ abort();
+ write_rewind(ofstrm);
+ ofstrm.close();
+
+ std::fstream ifstrm;
+ ifstrm.open("istream_seeks-3.txt", std::ios::in);
+ check_contents(ifstrm);
+ ifstrm.close();
+}
+
+// stringstream
+// libstdc++/2346
+void test03()
+{
+ std::stringstream sstrm;
+
+ write_rewind(sstrm);
+ check_contents(sstrm);
+}
+
// fstreams
void test04(void)
{
int main()
{
test01();
+
+ test02();
+ test03();
+
test04();
test05();
return 0;
}
+
+