c++/3206: missing when mangling name for ofsteram constructor

sektor@kis.p.lodz.pl sektor@kis.p.lodz.pl
Sat Jun 16 09:46:00 GMT 2001


>Number:         3206
>Category:       c++
>Synopsis:       missing when mangling name for ofsteram constructor
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 16 09:46:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Sektor
>Release:        unknown-1.0
>Organization:
>Environment:
Linux x86 (2.4.4) g++ 2.96
>Description:
I have made my own streambuf.h, iostream.h and fstream.h files to make enum's real enums not integers. There are some little changes, mostly parameter types and there are defined bitwise operators for ios:: flags. Everything is in order except one thing: when I call a constructor declared as ostream( const char*, ios::openmode, int ), the linker looks for ostream( int, const char*, ios::openmode, int ).

I tried the newest version with on-line compilation. There, if the class failure was declared after these enums, there was a parse error. When I moved it to a different place, the compilation had timeout. For details, look into append.ii .
>How-To-Repeat:
?
>Fix:
please ;)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="append.ii"
Content-Disposition: inline; filename="append.ii"

# 1 "append.cc"

# 28 "fstream.h" 1
#pragma interface
# 28 "fstream.h"



# 27 "iostream.h" 1
#pragma interface
# 27 "iostream.h"





# 28 "streambuf.h" 1
#pragma interface
# 28 "streambuf.h"







extern "C" {

# 31 "/usr/include/libio.h" 1 3
# 10 "/usr/include/_G_config.h" 1 3
# 27 "/usr/include/bits/types.h" 1 3
# 283 "/usr/include/features.h" 1 3
# 311 "/usr/include/features.h" 3
# 27 "/usr/include/bits/types.h" 2 3



# 199 "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h" 1 3
typedef unsigned int size_t;
# 30 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;

__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 49 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __loff_t;
typedef int __pid_t;
typedef int __ssize_t;
typedef __u_long __rlim_t;
typedef __u_quad_t __rlim64_t;
typedef __u_int __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __swblk_t;

typedef long int __clock_t;


typedef int __clockid_t;


typedef int __timer_t;



typedef unsigned long int __fd_mask;


# 109 "/usr/include/bits/types.h" 3
typedef struct
  {






    __fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];


  } __fd_set;


typedef int __key_t;


typedef unsigned short int __ipc_pid_t;



typedef long int __blksize_t;




typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;


typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;


typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;


typedef __u_quad_t __ino64_t;


typedef __loff_t __off64_t;


typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;


typedef int __intptr_t;


typedef unsigned int __socklen_t;





# 24 "/usr/include/bits/pthreadtypes.h" 1 3
# 68 "/usr/include/bits/sched.h" 1 3
struct __sched_param
  {
    int sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;



typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;


# 140 "/usr/include/bits/pthreadtypes.h" 3
typedef unsigned long int pthread_t;

# 166 "/usr/include/bits/types.h" 2 3
# 10 "/usr/include/_G_config.h" 2 3





# 312 "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h" 1 3
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3
# 25 "/usr/include/_G_config.h" 3
# 46 "/usr/include/wchar.h" 1 3
# 62 "/usr/include/wchar.h" 3
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 45 "/usr/include/_G_config.h" 3
# 29 "/usr/include/gconv.h" 1 3
# 46 "/usr/include/wchar.h" 1 3
# 29 "/usr/include/gconv.h" 2 3







enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
                            __const unsigned char **, __const unsigned char *,
                            unsigned char **, size_t *, int, int);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
                                  struct __gconv_step_data *, void *,
                                  __const unsigned char *,
                                  __const unsigned char **,
                                  __const unsigned char *, unsigned char **,
                                  size_t *);


typedef int (*__gconv_trans_context_fct) (struct __gconv_trans_data *,
                                          __const unsigned char *,
                                          __const unsigned char *,
                                          unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
                                        size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  __const char *__from_name;
  __const char *__to_name;

  __gconv_fct __fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data[0];
} *__gconv_t;

# 45 "/usr/include/_G_config.h" 2 3
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));

# 31 "/usr/include/libio.h" 2 3
# 52 "/usr/include/libio.h" 3
# 43 "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h" 1 3
typedef __builtin_va_list __gnuc_va_list;
# 52 "/usr/include/libio.h" 2 3
# 157 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;









typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 190 "/usr/include/libio.h" 3
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};

# 262 "/usr/include/libio.h" 3
struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _blksize;
  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 306 "/usr/include/libio.h" 3
  __off64_t _offset;





  void *__pad1;
  void *__pad2;

  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};





struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 345 "/usr/include/libio.h" 3
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
                                 size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);


# 394 "/usr/include/libio.h" 3
extern "C" {


extern int __underflow (_IO_FILE *) throw ();
extern int __uflow (_IO_FILE *) throw ();
extern int __overflow (_IO_FILE *, int) throw ();
extern wint_t __wunderflow (_IO_FILE *) throw ();
extern wint_t __wuflow (_IO_FILE *) throw ();
extern wint_t __woverflow (_IO_FILE *, wint_t) throw ();

# 427 "/usr/include/libio.h" 3
extern int _IO_getc (_IO_FILE *__fp) throw ();
extern int _IO_putc (int __c, _IO_FILE *__fp) throw ();
extern int _IO_feof (_IO_FILE *__fp) throw ();
extern int _IO_ferror (_IO_FILE *__fp) throw ();

extern int _IO_peekc_locked (_IO_FILE *__fp) throw ();





extern void _IO_flockfile (_IO_FILE *) throw ();
extern void _IO_funlockfile (_IO_FILE *) throw ();
extern int _IO_ftrylockfile (_IO_FILE *) throw ();

# 453 "/usr/include/libio.h" 3
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                        __gnuc_va_list, int *__restrict) throw ();
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                         __gnuc_va_list) throw ();
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) throw ();
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) throw ();

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) throw ();
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) throw ();

extern void _IO_free_backup_area (_IO_FILE *) throw ();

# 495 "/usr/include/libio.h" 3
}
# 37 "streambuf.h" 2
}



# 110 "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h" 1 3
typedef __gnuc_va_list va_list;
# 41 "streambuf.h" 2






# 33 "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/exception" 1 3
#pragma interface "exception"
# 33 "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/exception" 3


extern "C++" {

namespace std {

class exception {
public:
  exception () { }
  virtual ~exception () { }
  virtual const char* what () const;
};

class bad_exception : public exception {
public:
  bad_exception () { }
  virtual ~bad_exception () { }
};

typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();

terminate_handler set_terminate (terminate_handler);
void terminate () __attribute__ ((__noreturn__));
unexpected_handler set_unexpected (unexpected_handler);
void unexpected () __attribute__ ((__noreturn__));
bool uncaught_exception ();

}

}

# 47 "streambuf.h" 2
# 67 "streambuf.h"
extern "C++" {

class istream;
class ostream;
class streambuf;






typedef __off64_t streamoff;
typedef __off64_t streampos;




typedef __ssize_t streamsize;

typedef unsigned long __fmtflags;
typedef unsigned char __iostate;

struct _ios_fields
{
    streambuf *_strbuf;
    ostream* _tie;
    int _width;
    __fmtflags _flags;
    wchar_t _fill;
    __iostate _state;
    __iostate _exceptions;
    int _precision;

    void *_arrays;
};

# 130 "streambuf.h"
template < typename tT > static tT operator|( tT t1, tT t2 )
{ return tT( int( t1 ) | int( t2 ) ); }

template < typename tT > static tT operator&( tT t1, tT t2 )
{ return tT( int( t1 ) & int( t2 ) ); }

template < typename tT > static tT operator^( tT t1, tT t2 )
{ return tT( int( t1 ) ^ int( t2 ) ); }

template < typename tT > static tT operator~( tT t1 )
{ return tT( ~int( t1 ) ); }

class ios : public _ios_fields {
        ios& operator=(ios&);
        ios (const ios&);
        public:
        typedef int streamsize;

        enum iostate {
                goodbit = 0,
                eofbit = 1,
                failbit = 2,
                badbit = 4
        };
        enum openmode {
                in = 1,
                out = 2,
                ate = 4,
                app = 8,
                trunc = 16,
                nocreate = 32,
                noreplace = 64,
                bin = 128,
                binary = 128
        };
        enum seek_dir { beg, cur, end };


        enum fmtflags {
                skipws=01,
                dec=020, oct=040, hex=0100,
                scientific=04000, fixed=010000,
                left=02, right=04, internal=010,
                showbase=0200,
                showpoint=0400,
                uppercase=01000,
                showpos=02000,
                unitbuf=020000,
                stdio=040000,

                dont_close=0100000,

                basefield = dec+oct+hex,
                floatfield = scientific+fixed,
                adjustfield = left+right+internal
        };

        ostream* tie() const { return _tie; }
        ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }

        class failure : public exception {
                const ios* _stream;
                failure(const ios* stream) { _stream = stream; }
                friend class ios;
                public:
                const ios* rdios() const { return _stream; }
        };

    void _throw_failure() const { throw failure(this); }


        wchar_t fill() const { return _fill; }
        wchar_t fill(wchar_t newf)
        {wchar_t oldf = _fill; _fill = newf; return oldf;}
        fmtflags flags() const { return fmtflags( _flags ); }
        fmtflags flags(fmtflags new_val) {
                fmtflags old_val = fmtflags( _flags );
                _flags = new_val; return old_val;
        }
        int precision() const { return _precision; }
        int precision(int newp) {
                unsigned short oldp = _precision;
                _precision = (unsigned short)newp;
                return oldp;
        }
        fmtflags setf(fmtflags val)
        {
                fmtflags oldbits = fmtflags( _flags );
                _flags |= val; return oldbits;
        }
        fmtflags setf(fmtflags val, fmtflags mask)
        {
                fmtflags oldbits = fmtflags( _flags );
                _flags = (_flags & ~mask) | (val & mask); return oldbits;
        }
        fmtflags unsetf(fmtflags mask)
        {
                fmtflags oldbits = fmtflags( _flags );
                _flags &= ~mask; return oldbits;
        }
        int width() const { return _width; }
        int width(int val) { int save = _width; _width = val; return save; }

        void clear(iostate state = iostate( 0 ) )
        {
                _state = _strbuf ? state : state|badbit;
                if (_state & _exceptions)
                        _throw_failure();
        }
        void set(iostate flag)
        {
                _state |= flag;
                if (_state & _exceptions)
                        _throw_failure();
        }
        void setstate(iostate flag) { _state |= flag;
                if (_state & _exceptions) _throw_failure();
        }
        int good() const { return _state == 0; }
        int eof() const { return _state & ios::eofbit; }
        int fail() const { return _state & (ios::badbit|ios::failbit); }
        int bad() const { return _state & ios::badbit; }
        iostate rdstate() const { return iostate( _state ); }
        operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
        int operator!() const { return fail(); }
        iostate exceptions() const { return iostate( _exceptions ); }
        void exceptions(iostate enable)
        {
                _exceptions = enable;
                if (_state & _exceptions) _throw_failure();
        }

        streambuf* rdbuf() const { return _strbuf; }
        streambuf* rdbuf(streambuf *_s) {
                streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old;
        }

        static int sync_with_stdio(int on);
        static void sync_with_stdio() { sync_with_stdio(1); }
        static fmtflags bitalloc();
        static int xalloc();
        void*& pword(int);
        void* pword(int) const;
        long& iword(int);
        long iword(int) const;

        protected:
        inline ios(streambuf* sb = 0, ostream* tie_to = 0);
        inline virtual ~ios();
        inline void init(streambuf* sb, ostream* tie = 0);
};

typedef ios::seek_dir _seek_dir;
# 292 "streambuf.h"
class streammarker : private _IO_marker {
    friend class streambuf;
    void set_offset(int offset) { _pos = offset; }
  public:
    streammarker(streambuf *sb);
    ~streammarker();
    int saving() { return 1; }
    int delta(streammarker&);
    int delta();
};

struct streambuf : public _IO_FILE {
    friend class ios;
    friend class istream;
    friend class ostream;
    friend class streammarker;
    const void *&_vtable() { return *(const void**)((_IO_FILE*)this + 1); }
  protected:
    static streambuf* _list_all;
    _IO_FILE*& xchain() { return _chain; }
    void _un_link();
    void _link_in();
    char* gptr() const
      { return _flags & 0x100 ? _IO_save_base : _IO_read_ptr; }
    char* pptr() const { return _IO_write_ptr; }
    char* egptr() const
      { return _flags & 0x100 ? _IO_save_end : _IO_read_end; }
    char* epptr() const { return _IO_write_end; }
    char* pbase() const { return _IO_write_base; }
    char* eback() const
      { return _flags & 0x100 ? _IO_save_base : _IO_read_base;}
    char* base() const { return _IO_buf_base; }
    char* ebuf() const { return _IO_buf_end; }
    int blen() const { return _IO_buf_end - _IO_buf_base; }
    void xput_char(char c) { *_IO_write_ptr++ = c; }
    int xflags() { return _flags; }
    int xflags(int f) {int fl = _flags; _flags = f; return fl;}
    void xsetflags(int f) { _flags |= f; }
    void xsetflags(int f, int mask)
      { _flags = (_flags & ~mask) | (f & mask); }
    void gbump(int n)
      { _flags & 0x100 ? (_IO_save_base+=n):(_IO_read_ptr+=n);}
    void pbump(int n) { _IO_write_ptr += n; }
    void setb(char* b, char* eb, int a=0);
    void setp(char* p, char* ep)
      { _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
    void setg(char* eb, char* g, char *eg) {
      if (_flags & 0x100) _IO_free_backup_area(this);
      _IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
    char *shortbuf() { return _shortbuf; }

    int in_backup() { return _flags & 0x100; }

    char *Gbase() { return in_backup() ? _IO_save_base : _IO_read_base; }

    char *eGptr() { return in_backup() ? _IO_save_end : _IO_read_end; }

    char *Bbase() { return in_backup() ? _IO_read_base : _IO_save_base; }
    char *Bptr() { return _IO_backup_base; }

    char *eBptr() { return in_backup() ? _IO_read_end : _IO_save_end; }
    char *Nbase() { return _IO_save_base; }
    char *eNptr() { return _IO_save_end; }
    int have_backup() { return _IO_save_base != __null; }
    int have_markers() { return _markers != __null; }
    void free_backup_area();
    void unsave_markers();
    int put_mode() { return _flags & 0x800; }
    int switch_to_get_mode();

    streambuf(int flags=0);
  public:
    static int flush_all();
    static void flush_all_linebuffered();
    virtual ~streambuf();
    virtual int overflow(int c = (-1));
    virtual int underflow();
    virtual int uflow();
    virtual int pbackfail(int c);

    virtual streamsize xsputn(const char* s, streamsize n);
    virtual streamsize xsgetn(char* s, streamsize n);
    virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
    virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);

    streampos pubseekoff(streamoff o, _seek_dir d, int mode=ios::in|ios::out)
      { return _IO_seekoff (this, o, d, mode); }
    streampos pubseekpos(streampos pos, int mode = ios::in|ios::out)
      { return _IO_seekpos (this, pos, mode); }
    streampos sseekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
    streampos sseekpos(streampos pos, int mode = ios::in|ios::out);
    virtual streambuf* setbuf(char* p, int len);
    virtual int sync();
    virtual int doallocate();

    int seekmark(streammarker& mark, int delta = 0);
    int sputbackc(char c);
    int sungetc();
    int unbuffered() { return _flags & 2 ? 1 : 0; }
    int linebuffered() { return _flags & 0x200 ? 1 : 0; }
    void unbuffered(int i)
        { if (i) _flags |= 2; else _flags &= ~2; }
    void linebuffered(int i)
        { if (i) _flags |= 0x200; else _flags &= ~0x200; }
    int allocate() {
        if (base() || unbuffered()) return 0;
        else return doallocate(); }

    void allocbuf() { if (base() == __null) doallocbuf(); }
    void doallocbuf();
    int in_avail() { return _IO_read_end - _IO_read_ptr; }
    int out_waiting() { return _IO_write_ptr - _IO_write_base; }
    streamsize sputn(const char* s, streamsize n) { return xsputn(s, n); }
    streamsize padn(char pad, streamsize n) { return _IO_padn(this, pad, n); }
    streamsize sgetn(char* s, streamsize n) { return _IO_sgetn(this, s, n); }
    int ignore(int);
    int get_column();
    int set_column(int);
    long sgetline(char* buf, size_t n, char delim, int putback_delim);
    int sputc(int c) { return _IO_putc(c, this); }
    int sbumpc() { return _IO_getc(this); }
    int sgetc() { return ((this)->_IO_read_ptr >= (this)->_IO_read_end && __underflow (this) == (-1) ? (-1) : *(unsigned char *) (this)->_IO_read_ptr); }
    int snextc() {
        if (_IO_read_ptr >= _IO_read_end && __underflow(this) == (-1))
          return (-1);
        else return _IO_read_ptr++, sgetc(); }
    void stossc() { if (_IO_read_ptr < _IO_read_end) _IO_read_ptr++; }
    int vscan(char const *fmt0, __gnuc_va_list ap, ios* stream = __null);
    int scan(char const *fmt0 ...);
    int vform(char const *fmt0, __gnuc_va_list ap);
    int form(char const *fmt0 ...);




    virtual streamsize sys_read(char* buf, streamsize size);
    virtual streamsize sys_write(const char*, streamsize);
    virtual streampos sys_seek(streamoff, _seek_dir);
    virtual int sys_close();
    virtual int sys_stat(void*);

    virtual int showmanyc();
    virtual void imbue(void *);

};




class filebuf : public streambuf {
  protected:
    void init();
  public:
    static const int openprot;
    filebuf();
    filebuf(int fd);
    filebuf(int fd, char* p, int len);



    ~filebuf();
    filebuf* attach(int fd);
    filebuf* open(const char *filename, const char *mode);
    filebuf* open(const char *filename, ios::openmode mode, int prot = 0664);
    virtual int underflow();
    virtual int overflow(int c = (-1));
    int is_open() const { return _fileno >= 0; }
    int fd() const { return is_open() ? _fileno : (-1); }
    filebuf* close();
    virtual int doallocate();
    virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
    virtual streambuf* setbuf(char* p, int len);
    streamsize xsputn(const char* s, streamsize n);
    streamsize xsgetn(char* s, streamsize n);
    virtual int sync();
  protected:

    int is_reading() { return eback() != egptr(); }
    char* cur_ptr() { return is_reading() ? gptr() : pptr(); }

    char* file_ptr() { return eGptr(); }

    virtual streamsize sys_read(char* buf, streamsize size);
    virtual streampos sys_seek(streamoff, _seek_dir);
    virtual streamsize sys_write(const char*, streamsize);
    virtual int sys_stat(void*);
    virtual int sys_close();




};

inline void ios::init(streambuf* sb, ostream* tie_to) {
                _state = sb ? ios::goodbit : ios::badbit; _exceptions=0;
                _strbuf=sb; _tie = tie_to; _width=0; _fill=' ';

                _flags=ios::skipws|ios::dec;



                _precision=6; _arrays = 0; }

inline ios::ios(streambuf* sb, ostream* tie_to) { init(sb, tie_to); }

inline ios::~ios() {





    operator delete[] (_arrays);
}
}
# 32 "iostream.h" 2

extern "C++" {
class istream; class ostream;
typedef ios& (*__manip)(ios&);

typedef istream& __imanip(istream&);
typedef ostream& __omanip(ostream&);

extern istream& ws(istream& ins);
extern ostream& flush(ostream& outs);
extern ostream& endl(ostream& outs);
extern ostream& ends(ostream& outs);

class ostream : virtual public ios
{

    void do_osfx();
  public:
    ostream() { }
    ostream(streambuf* sb, ostream* tied=__null);
    int opfx() {
        if (!good()) return 0;
        else { if (_tie) _tie->flush();; return 1;} }
    void osfx() {;
                  if (flags() & (ios::unitbuf|ios::stdio))
                      do_osfx(); }
    ostream& flush();
    ostream& put(char c) { _strbuf->sputc(c); return *this; }





    ostream& write(const char *s, streamsize n);
    ostream& write(const unsigned char *s, streamsize n)
      { return write((const char*)s, n);}
    ostream& write(const signed char *s, streamsize n)
      { return write((const char*)s, n);}
    ostream& write(const void *s, streamsize n)
      { return write((const char*)s, n);}
    ostream& seekp(streampos);
    ostream& seekp(streamoff, _seek_dir);
    streampos tellp();
    ostream& form(const char *format ...);
    ostream& vform(const char *format, __gnuc_va_list args);

    ostream& operator<<(char c);
    ostream& operator<<(unsigned char c) { return (*this) << (char)c; }
    ostream& operator<<(signed char c) { return (*this) << (char)c; }
    ostream& operator<<(const char *s);
    ostream& operator<<(const unsigned char *s)
        { return (*this) << (const char*)s; }
    ostream& operator<<(const signed char *s)
        { return (*this) << (const char*)s; }
    ostream& operator<<(const void *p);
    ostream& operator<<(int n);
    ostream& operator<<(unsigned int n);
    ostream& operator<<(long n);
    ostream& operator<<(unsigned long n);

    __extension__ ostream& operator<<(long long n);
    __extension__ ostream& operator<<(unsigned long long n);

    ostream& operator<<(short n) {return operator<<((int)n);}
    ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);}

    ostream& operator<<(bool b) { return operator<<((int)b); }

    ostream& operator<<(double n);
    ostream& operator<<(float n) { return operator<<((double)n); }

    ostream& operator<<(long double n);



    ostream& operator<<(__omanip func) { return (*func)(*this); }
    ostream& operator<<(__manip func) {(*func)(*this); return *this;}
    ostream& operator<<(streambuf*);



};

class istream : virtual public ios
{

protected:
    size_t _gcount;

    int _skip_ws();
  public:
    istream(): _gcount (0) { }
    istream(streambuf* sb, ostream*tied=__null);
    istream& get(char* ptr, int len, char delim = '\n');
    istream& get(unsigned char* ptr, int len, char delim = '\n')
        { return get((char*)ptr, len, delim); }
    istream& get(char& c);
    istream& get(unsigned char& c) { return get((char&)c); }
    istream& getline(char* ptr, int len, char delim = '\n');
    istream& getline(unsigned char* ptr, int len, char delim = '\n')
        { return getline((char*)ptr, len, delim); }
    istream& get(signed char& c) { return get((char&)c); }
    istream& get(signed char* ptr, int len, char delim = '\n')
        { return get((char*)ptr, len, delim); }
    istream& getline(signed char* ptr, int len, char delim = '\n')
        { return getline((char*)ptr, len, delim); }
    istream& read(char *ptr, streamsize n);
    istream& read(unsigned char *ptr, streamsize n)
      { return read((char*)ptr, n); }
    istream& read(signed char *ptr, streamsize n)
      { return read((char*)ptr, n); }
    istream& read(void *ptr, streamsize n)
      { return read((char*)ptr, n); }
    istream& get(streambuf& sb, char delim = '\n');
    istream& gets(char **s, char delim = '\n');
    int ipfx(int need = 0) {
        if (!good()) { set(ios::failbit); return 0; }
        else {
;
          if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
          if (!need && (flags() & ios::skipws)) return _skip_ws();
          else return 1;
        }
    }
    int ipfx0() {
        if (!good()) { set(ios::failbit); return 0; }
        else {
;
          if (_tie) _tie->flush();
          if (flags() & ios::skipws) return _skip_ws();
          else return 1;
        }
    }
    int ipfx1() {
        if (!good()) { set(ios::failbit); return 0; }
        else {
;
          if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
          return 1;
        }
    }
    void isfx() {; }
    int get() { if (!ipfx1()) return (-1);
                else { int ch = _strbuf->sbumpc();
                       if (ch == (-1)) set(ios::eofbit);
                       isfx();
                       return ch;
                     } }
    int peek();
    size_t gcount() { return _gcount; }
    istream& ignore(int n=1, int delim = (-1));
    int sync ();
    istream& seekg(streampos);
    istream& seekg(streamoff, _seek_dir);
    streampos tellg();
    istream& putback(char ch) {
        if (good() && _strbuf->sputbackc(ch) == (-1)) clear(ios::badbit);
        return *this;}
    istream& unget() {
        if (good() && _strbuf->sungetc() == (-1)) clear(ios::badbit);
        return *this;}
    istream& scan(const char *format ...);
    istream& vscan(const char *format, __gnuc_va_list args);






    istream& operator>>(char*);
    istream& operator>>(unsigned char* p) { return operator>>((char*)p); }
    istream& operator>>(signed char*p) { return operator>>((char*)p); }
    istream& operator>>(char& c);
    istream& operator>>(unsigned char& c) {return operator>>((char&)c);}
    istream& operator>>(signed char& c) {return operator>>((char&)c);}
    istream& operator>>(int&);
    istream& operator>>(long&);

    __extension__ istream& operator>>(long long&);
    __extension__ istream& operator>>(unsigned long long&);

    istream& operator>>(short&);
    istream& operator>>(unsigned int&);
    istream& operator>>(unsigned long&);
    istream& operator>>(unsigned short&);

    istream& operator>>(bool&);

    istream& operator>>(float&);
    istream& operator>>(double&);
    istream& operator>>(long double&);
    istream& operator>>( __manip func) {(*func)(*this); return *this;}
    istream& operator>>(__imanip func) { return (*func)(*this); }
    istream& operator>>(streambuf*);
};

class iostream : public istream, public ostream
{
  public:
    iostream() { }
    iostream(streambuf* sb, ostream*tied=__null);
};

class _IO_istream_withassign : public istream {
public:
  _IO_istream_withassign& operator=(istream&);
  _IO_istream_withassign& operator=(_IO_istream_withassign& rhs)
    { return operator= (static_cast<istream&> (rhs)); }
};

class _IO_ostream_withassign : public ostream {
public:
  _IO_ostream_withassign& operator=(ostream&);
  _IO_ostream_withassign& operator=(_IO_ostream_withassign& rhs)
    { return operator= (static_cast<ostream&> (rhs)); }
};

extern _IO_istream_withassign cin;

extern _IO_ostream_withassign cout, cerr;

extern _IO_ostream_withassign clog



;

extern istream& lock(istream& ins);
extern istream& unlock(istream& ins);
extern ostream& lock(ostream& outs);
extern ostream& unlock(ostream& outs);

struct Iostream_init { } ;

inline ios& dec(ios& i)
{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
inline ios& hex(ios& i)
{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
inline ios& oct(ios& i)
{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
}

# 31 "fstream.h" 2

extern "C++" {
class fstreambase : virtual public ios {

    mutable filebuf __my_fb;

    void __fb_init ();
  public:
    fstreambase();
    fstreambase(int fd);
    fstreambase(int fd, char *p, int l);
    fstreambase(const char *name, int mode, int prot=0664);
    void close();

    filebuf* rdbuf() const { return &__my_fb; }



    void open(const char *name, int mode, int prot=0664);
    int is_open() const { return rdbuf()->is_open(); }
    void setbuf(char *ptr, int len) { rdbuf()->setbuf(ptr, len); }
    void attach(int fd);




};

class ifstream : public fstreambase, public istream {
  public:
    ifstream() : fstreambase() { }
    ifstream(int fd) : fstreambase(fd) { }
    ifstream(const char *name, ios::openmode mode=ios::in, int prot=0664)
        : fstreambase(name, int( mode ), prot) { }
    void open(const char *name, ios::openmode mode=ios::in, int prot=0664)
        { fstreambase::open(name, int( mode ), prot); }
};

class ofstream : public fstreambase, public ostream {
  public:
    ofstream() : fstreambase() { }
    ofstream(int fd) : fstreambase(fd) { }
    ofstream(const char *name, ios::openmode mode=ios::out, int prot=0664)
        : fstreambase(name, int( mode ), prot) { }
    void open(const char *name, ios::openmode mode=ios::out, int prot=0664)
        { fstreambase::open(name, int( mode ), prot); }
};

class fstream : public fstreambase, public iostream {
  public:
    fstream() : fstreambase() { }
    fstream(int fd) : fstreambase(fd) { }
    fstream(const char *name, ios::openmode mode, int prot=0664)
        : fstreambase(name, int( mode ), prot) { }
    void open(const char *name, ios::openmode mode, int prot=0664)
        { fstreambase::open(name, int( mode ), prot); }
};
}
# 2 "append.cc" 2

int main( int argc, char** argv )
{
        ofstream test( "test", ios::app, 0666 );

        long long pos = test.tellp();
        cout << "Length: " << pos << endl;
        test.write( "DUPA!\n", 6 );
        test.seekp( pos );
        test.write( "Dupa!\n", 6 );
        return 0;
}



More information about the Gcc-bugs mailing list