Uploaded image for project: 'C++ Standard Library'
  1. C++ Standard Library
  2. STDCXX-241

[LWG #136] std::istream::seekg problem

Add voteWatch issue
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 4.1.2, 4.1.3, 4.1.4, 4.2.0, 4.2.1
    • 4.3.0
    • 27. Input/Output
    • None
    • all

    • Incorrect Behavior

    Description

      Moved from the Rogue Wave bug tracking database:

      Class/File: 
      Fix Priority: Must Fix
      Long Description: 
        *** Nov 10 1999 9:33PM *** sebor ***
      
      Problem: seekg - problem
      
      see seek2.cpp:
      
      The ANSI/ISO-C++ document(ISO/IEC 14882:1998(E)) states about the effects of seekg:
      
      ANSI> Effects: If fail() != true, executes rdbuf()í>pubseekpos( pos).
      
      (The RW-Implementation instead executes rdbuf()->pubseekpos(pos, ios_base::in);)
      pubseekpos calls seekpos which is declared:
      
      pos_type seekpos(pos_type sp, ios_base::openmode which
                        = ios_base::in | ios_base::out);
      
      since the 2nd Argument (which) is not given in the above call of pubseekpos
      the value of the which-Argument is the default value ios_base::in | ios_base::out.
      seekpos should alter both the position in the input and the output sequence in this case.
      The RW-Implementation alters only the position in the input-sequence.
      
      Though the RW-implementation seems to be intuitivly right, it is formally
      not conforming.
      I think RogueWave should support the lwg issue No 136 described in
      http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-issues.html#136
      
      TEST CASE:
      
      #include <string>
      #include <sstream>
      #include <iostream>
      
      using namespace std;
      
      typedef basic_stringbuf<char, char_traits<char>, allocator<char> > buffer;
      typedef basic_istream<char, char_traits<char> > input_stream;
      typedef char_traits <char> traits;
      typedef char_traits<char>::pos_type pos_type;
      
      
      #define VERIFY(p1,p2) verify(p1,p2,__LINE__)
      
      template <class T> void verify (T p1, T p2, int line)
      {
        if(p1 != p2) {
          cerr << "line " << line << ": " << p1 << " should be " 
               << p2 << '\n';
        }
      }
      
      template <> void verify (string p1, string p2, int line)
      {
        if(p1 != p2) {
          cerr << "line " << line << ": \"" << p1 << "\" should be \"" 
               << p2 << "\" \n";
        }
      }
      
      
      
      int main()
      {
        const string expstr ("Rogue Wave");
        buffer  buf (expstr, ios_base::in | ios_base::out);
        typedef basic_iostream<char, char_traits<char> > iostrm; 
            
        iostrm  iostobj(&buf);
        char s[80];
       
        VERIFY ((void *)iostobj.rdbuf(),(void *)&buf);
        VERIFY (iostobj.gcount(),streamsize(0));
                
        iostobj >> s;
        VERIFY (string(s), string("Rogue"));
        iostobj.get (s, sizeof s);
        VERIFY (string(s), string(" Wave"));
        iostobj.clear ();
        iostobj.seekg (0, ios::end);
        iostobj.write (" Software", 9);
        iostobj.seekp (0);
        iostobj.get (s, sizeof s);
        iostobj.clear ();
        VERIFY (string(s), string("Rogue Wave Software"));
      }
      CC -c -mt -D_RWSTD_USE_CONFIG -I/amd/devco/sebor/dev/stdlib/include -I/build/seb
      or/sunpro-5.8.j1-12d/include -I/amd/devco/sebor/dev/stdlib/examples/include  -li
      brary=%none -O  +w  t.cpp
      CC t.o -o t -library=%none -L/build/sebor/sunpro-5.8.j1-12d/lib  -mt  -L/build/s
      ebor/sunpro-5.8.j1-12d/lib -lstd12d   -lm
      line 55: " Software" should be "Rogue Wave Software" 
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            sebor Martin Sebor

            Dates

              Created:
              Updated:

              Time Tracking

                Estimated:
                Original Estimate - 4h
                4h
                Remaining:
                Remaining Estimate - 4h
                4h
                Logged:
                Time Spent - Not Specified
                Not Specified

                Slack

                  Issue deployment