This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

libstdc++/4433: strstream::{tellp,seekp} fail.



>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=


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]