This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
libstdc++/4433: strstream::{tellp,seekp} fail.
- To: gcc-gnats at gcc dot gnu dot org
- Subject: libstdc++/4433: strstream::{tellp,seekp} fail.
- From: ymedini at iil dot intel dot com
- Date: 1 Oct 2001 12:12:46 -0000
- Cc: yotam_medini at yahoo dot com
- Reply-To: ymedini at iil dot intel dot com
>Number: 4433
>Category: libstdc++
>Synopsis: strstream::{tellp,seekp} fail.
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Oct 01 05:16:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Yotam Medini
>Release: 3.0.1 (also 2.95.2 )
>Organization:
>Environment:
Linux
>Description:
Writing strstream.
Then two after 3 ::seeks(...)
then ::tellp() returns wrong position.
>How-To-Repeat:
just compile and run.
In case Netscape failed to unload, here is seektell.cc:
#include <iostream>
#include <strstream>
namespace std {}; using namespace std;
static bool chekpos(const char* msg, std::iostream& strm, int expectedPos)
{
int pos = strm.tellp();
bool ok = (pos == expectedPos);
if (!ok)
{
cerr << msg << " pos=" << pos <<
" != " << expectedPos << " [expected]" << endl;
}
return ok;
}
int main(int argc, int argv)
{
bool ok = true;
std::strstream strm;
const unsigned l1 = 10;
char* data = new char[l1];
for(unsigned i=0; i<l1; i++) data[i] = 'a'+i;
strm.write((const char*)data, l1);
// delete [] data;
strm.seekp(0, std::ios::end);
ok = chekpos("check1: seek(0, end)", strm, l1) && ok;
strm.seekp(-4, std::ios::cur);
ok = chekpos("check2: seek(-4, cur)", strm, l1-4) && ok;
strm.seekp(0, std::ios::end);
ok = chekpos("check3: seek(0, end)", strm, l1) && ok;
cout << "ok=" << ok << endl;
return !ok;
} // main
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="seektell.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="seektell.cc"
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3Ryc3RyZWFtPgoKbmFtZXNwYWNlIHN0ZCB7
fTsgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0YXRpYyBib29sIGNoZWtwb3MoY29uc3QgY2hhciog
bXNnLCBzdGQ6Omlvc3RyZWFtJiBzdHJtLCBpbnQgZXhwZWN0ZWRQb3MpCnsKICAgaW50ICBwb3Mg
PSBzdHJtLnRlbGxwKCk7CiAgIGJvb2wgIG9rID0gKHBvcyA9PSBleHBlY3RlZFBvcyk7CiAgIGlm
ICghb2spCiAgIHsKICAgICAgY2VyciA8PCBtc2cgPDwgIiBwb3M9IiA8PCBwb3MgPDwgCiAgICAg
ICAgICAgICAgIiAhPSAiIDw8IGV4cGVjdGVkUG9zIDw8ICIgW2V4cGVjdGVkXSIgPDwgZW5kbDsK
ICAgfQogICByZXR1cm4gb2s7Cn0KCmludCBtYWluKGludCBhcmdjLCBpbnQgYXJndikKewogICBi
b29sICAgICAgICAgICAgb2sgPSB0cnVlOwogICBzdGQ6OnN0cnN0cmVhbSAgc3RybTsKICAgY29u
c3QgdW5zaWduZWQgIGwxID0gMTA7CiAgIGNoYXIqICAgICAgICAgICBkYXRhID0gbmV3IGNoYXJb
bDFdOwogICBmb3IodW5zaWduZWQgaT0wOyBpPGwxOyBpKyspIGRhdGFbaV0gPSAnYScraTsKICAg
c3RybS53cml0ZSgoY29uc3QgY2hhciopZGF0YSwgbDEpOwogICAvLyBkZWxldGUgW10gZGF0YTsK
CiAgIHN0cm0uc2Vla3AoMCwgc3RkOjppb3M6OmVuZCk7CiAgIG9rID0gY2hla3BvcygiY2hlY2sx
OiBzZWVrKDAsIGVuZCkiLCBzdHJtLCBsMSkgJiYgb2s7CgogICBzdHJtLnNlZWtwKC00LCBzdGQ6
Omlvczo6Y3VyKTsKICAgb2sgPSBjaGVrcG9zKCJjaGVjazI6IHNlZWsoLTQsIGN1cikiLCBzdHJt
LCBsMS00KSAmJiBvazsKCiAgIHN0cm0uc2Vla3AoMCwgc3RkOjppb3M6OmVuZCk7CiAgIG9rID0g
Y2hla3BvcygiY2hlY2szOiBzZWVrKDAsIGVuZCkiLCBzdHJtLCBsMSkgJiYgb2s7CgogICBjb3V0
IDw8ICJvaz0iIDw8IG9rIDw8IGVuZGw7CiAgIHJldHVybiAhb2s7Cn0gLy8gbWFpbgo=