Index: src/_stdio_file.h =================================================================== retrieving revision 1.1 diff -u -r1.1 _stdio_file.h --- src/_stdio_file.h 29 Mar 2004 08:00:51 -0000 1.1 +++ src/_stdio_file.h 13 Apr 2004 10:55:52 -0000 @@ -78,37 +78,11 @@ _STLP_BEGIN_NAMESPACE -#if !defined(_STLP_WINCE) //---------------------------------------------------------------------- // windows CE 4.2 implementation, based on hack into FILE structure see FILECE in stl_wince_4.h #if defined(_STLP_WCE_NET) typedef char* _File_ptr_type; inline int _FILE_fd(const FILE *__f) { return (int) ((const FILECE*)__f)->_file; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) ((const FILECE*)__f)->_base; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) ((const FILECE*)__f)->_ptr; } -inline char* _FILE_I_end(const FILE *__f) - { return (char*) ((const FILECE*)__f)->_ptr + ((const FILECE*)__f)->_cnt; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return ((const FILECE*)__f)->_cnt; } - -inline char& _FILE_I_preincr(FILE *__f) - { --((FILECE*)__f)->_cnt; return *(char*) (++((FILECE*)__f)->_ptr); } -inline char& _FILE_I_postincr(FILE *__f) - { --((FILECE*)__f)->_cnt; return *(char*) (((FILECE*)__f)->_ptr++); } -inline char& _FILE_I_predecr(FILE *__f) - { ++((FILECE*)__f)->_cnt; return *(char*) (--((FILECE*)__f)->_ptr); } -inline char& _FILE_I_postdecr(FILE *__f) - { ++((FILECE*)__f)->_cnt; return *(char*) (((FILECE*)__f)->_ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) - { ((FILECE*)__f)->_ptr += __n; ((FILECE*)__f)->_cnt -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { - ((FILECE*)__f)->_base = (_File_ptr_type) __begin; - ((FILECE*)__f)->_ptr = (_File_ptr_type) __next; - ((FILECE*)__f)->_cnt = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL 1 // Implementation for the IRIX C library. // Solaris interface looks to be identical. #elif !defined(_STLP_USE_GLIBC) && \ @@ -124,65 +98,10 @@ #endif inline int _FILE_fd(const FILE *__f) { return __f->_file; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->_base; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_ptr; } -inline char* _FILE_I_end(const FILE *__f) - { return (char*) __f->_ptr + __f->_cnt; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; } - -inline char& _FILE_I_preincr(FILE *__f) - { --__f->_cnt; return *(char*) (++__f->_ptr); } -inline char& _FILE_I_postincr(FILE *__f) - { --__f->_cnt; return *(char*) (__f->_ptr++); } -inline char& _FILE_I_predecr(FILE *__f) - { ++__f->_cnt; return *(char*) (--__f->_ptr); } -inline char& _FILE_I_postdecr(FILE *__f) - { ++__f->_cnt; return *(char*) (__f->_ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) - { __f->_ptr += __n; __f->_cnt -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { - __f->_base = (_File_ptr_type) __begin; - __f->_ptr = (_File_ptr_type) __next; - __f->_cnt = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL 1 #elif defined(__EMX__) inline int _FILE_fd(const FILE* __f) { return __f->_handle; } -inline char* _FILE_I_begin(const FILE* __f) { return (char*) __f->_buffer; } -inline char* _FILE_I_next(const FILE* __f) { return (char*) __f->_ptr; } -inline char* _FILE_I_end(const FILE* __f) { return (char *) __f->_ptr + __f->_rcount; } -inline ptrdiff_t _FILE_I_avail(const FILE* __f) { return __f->_rcount; } -inline char& _FILE_I_preincr(FILE* __f) { --__f->_rcount; return *(char*) (++__f->_ptr); } -inline char& _FILE_I_postincr(FILE* __f) { --__f->_rcount; return *(char*) (__f->_ptr++); } -inline char& _FILE_I_predecr(FILE* __f) { ++__f->_rcount; return *(char*) (--__f->_ptr); } -inline char& _FILE_I_postdecr(FILE* __f) { ++__f->_rcount; return *(char*) (__f->_ptr--); } -inline void _FILE_I_bump(FILE* __f, int __n) { __f->_ptr += __n; __f->_rcount -= __n; } -inline void _FILE_I_set(FILE* __f, char* __begin, char* __next, char* __end) { - __f->_buffer = __begin; - __f->_ptr = __next; - __f->_rcount = __end - __next; -} - -inline char* _FILE_O_begin(const FILE* __f) { return (char*) __f->_buffer; } -inline char* _FILE_O_next(const FILE* __f) { return (char*) __f->_ptr; } -inline char* _FILE_O_end(const FILE* __f) { return (char*) __f->_ptr + __f->_wcount; } -inline ptrdiff_t _FILE_O_avail(const FILE* __f) { return __f->_wcount; } -inline char& _FILE_O_preincr(FILE* __f) { --__f->_wcount; return *(char*) (++__f->_ptr); } -inline char& _FILE_O_postincr(FILE* __f) { --__f->_wcount; return *(char*) (__f->_ptr++); } -inline char& _FILE_O_predecr(FILE* __f) { ++__f->_wcount; return *(char*) (--__f->_ptr); } -inline char& _FILE_O_postdecr(FILE* __f) { ++__f->_wcount; return *(char*) (__f->_ptr--); } -inline void _FILE_O_bump(FILE* __f, int __n) { __f->_ptr += __n; __f->_wcount -= __n; } -inline void _FILE_O_set(FILE* __f, char* __begin, char* __next, char* __end) { - __f->_buffer = __begin; - __f->_ptr = __next; - __f->_wcount = __end - __next; -} - # undef _STLP_FILE_I_O_IDENTICAL @@ -191,164 +110,20 @@ typedef unsigned char* _File_ptr_type; inline int _FILE_fd(const FILE *__f) { return __f->__file; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->__base; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->__ptr; } -inline char* _FILE_I_end(const FILE *__f) - { return (char*) __f->__ptr + __f->__cnt; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->__cnt; } - -inline char& _FILE_I_preincr(FILE *__f) - { --__f->__cnt; return *(char*) (++__f->__ptr); } -inline char& _FILE_I_postincr(FILE *__f) - { --__f->__cnt; return *(char*) (__f->__ptr++); } -inline char& _FILE_I_predecr(FILE *__f) - { ++__f->__cnt; return *(char*) (--__f->__ptr); } -inline char& _FILE_I_postdecr(FILE *__f) - { ++__f->__cnt; return *(char*) (__f->__ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) - { __f->__ptr += __n; __f->__cnt -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { - __f->__base = (_File_ptr_type) __begin; - __f->__ptr = (_File_ptr_type) __next; - __f->__cnt = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL 1 - # elif defined(__sun) && defined( _LP64) typedef long _File_ptr_type; inline int _FILE_fd(const FILE *__f) { return (int) __f->__pad[2]; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) -__f->__pad[1]; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) -__f->__pad[0]; } -inline char* _FILE_I_end(const FILE *__f) -{ return (char*) __f->__pad[0] + __f->__pad[3]; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->__pad[3]; } - -inline char& _FILE_I_preincr(FILE *__f) -{ --__f->__pad[3]; return *(char*) (++__f->__pad[0]); } -inline char& _FILE_I_postincr(FILE *__f) -{ --__f->__pad[3]; return *(char*) (__f->__pad[0]++); } -inline char& _FILE_I_predecr(FILE *__f) -{ ++__f->__pad[3]; return *(char*) (--__f->__pad[0]); } -inline char& _FILE_I_postdecr(FILE *__f) -{ ++__f->__pad[3]; return *(char*) (__f->__pad[0]--); } -inline void _FILE_I_bump(FILE *__f, long __n) -{ __f->__pad[0] += __n; __f->__pad[3] -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* -__end) { -__f->__pad[1] = (_File_ptr_type) __begin; -__f->__pad[0] = (_File_ptr_type) __next; -__f->__pad[3] = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL #elif defined (__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) \ || defined(__amigaos__) || ( defined(__GNUC__) && defined(__APPLE__) ) inline int _FILE_fd(const FILE *__f) { return __f->_file; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) - __f->_bf._base; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_p; } -inline char* _FILE_I_end(const FILE *__f) -{ return (char*) __f->_p + __f->_r; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_r; } - -inline char& _FILE_I_preincr(FILE *__f) -{ --__f->_r; --__f->_bf._size; return *(char*) (++__f->_p); } -inline char& _FILE_I_postincr(FILE *__f) -{ --__f->_r; --__f->_bf._size; return *(char*) (__f->_p++); } -inline char& _FILE_I_predecr(FILE *__f) -{ ++__f->_r; ++ __f->_bf._size; return *(char*) (--__f->_p); } -inline char& _FILE_I_postdecr(FILE *__f) -{ ++__f->_r; ++__f->_bf._size; return *(char*) (__f->_p--); } -inline void _FILE_I_bump(FILE *__f, int __n) -{ __f->_p += __n; __f->_bf._size+=__n; __f->_r -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* - __end) { - __f->_bf._base = (unsigned char*) __begin; - __f->_p = (unsigned char*) __next; - __f->_r = __f->_bf._size = __end - __next; -} -inline char* _FILE_O_begin(const FILE *__f) { return (char*) - __f->_bf._base; } -inline char* _FILE_O_next(const FILE *__f) { return (char*) __f->_p; } -inline char* _FILE_O_end(const FILE *__f) -{ return (char*) __f->_p + __f->_w; } - -inline ptrdiff_t _FILE_O_avail(const FILE *__f) { return __f->_w; } - -inline char& _FILE_O_preincr(FILE *__f) -{ --__f->_w; --__f->_bf._size; return *(char*) (++__f->_p); } -inline char& _FILE_O_postincr(FILE *__f) -{ --__f->_w; --__f->_bf._size; return *(char*) (__f->_p++); } -inline char& _FILE_O_predecr(FILE *__f) -{ ++__f->_w; ++__f->_bf._size; return *(char*) (--__f->_p); } -inline char& _FILE_O_postdecr(FILE *__f) -{ ++__f->_w; ++__f->_bf._size; return *(char*) (__f->_p--); } -inline void _FILE_O_bump(FILE *__f, int __n) -{ __f->_p += __n; __f->_bf._size+=__n; __f->_w -= __n; } - -inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* - __end) { - __f->_bf._base = (unsigned char*) __begin; - __f->_p = (unsigned char*) __next; - __f->_w = __f->_bf._size = __end - __next; -} - -# undef _STLP_FILE_I_O_IDENTICAL #elif defined(_STLP_USE_GLIBC) inline int _FILE_fd(const FILE *__f) { return __f->_fileno; } -inline char* _FILE_I_begin(const FILE *__f) { return __f->_IO_read_base; } -inline char* _FILE_I_next(const FILE *__f) { return __f->_IO_read_ptr; } -inline char* _FILE_I_end(const FILE *__f) { return __f->_IO_read_end; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) - { return __f->_IO_read_end - __f->_IO_read_ptr; } - -inline char& _FILE_I_preincr(FILE *__f) { return *++__f->_IO_read_ptr; } -inline char& _FILE_I_postincr(FILE *__f) { return *__f->_IO_read_ptr++; } -inline char& _FILE_I_predecr(FILE *__f) { return *--__f->_IO_read_ptr; } -inline char& _FILE_I_postdecr(FILE *__f) { return *__f->_IO_read_ptr--; } -inline void _FILE_I_bump(FILE *__f, int __n) { __f->_IO_read_ptr += __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { - __f->_IO_read_base = __begin; - __f->_IO_read_ptr = __next; - __f->_IO_read_end = __end; -} - -inline char* _FILE_O_begin(const FILE *__f) { return __f->_IO_write_base; } -inline char* _FILE_O_next(const FILE *__f) { return __f->_IO_write_ptr; } -inline char* _FILE_O_end(const FILE *__f) { return __f->_IO_write_end; } - -inline ptrdiff_t _FILE_O_avail(const FILE *__f) - { return __f->_IO_write_end - __f->_IO_write_ptr; } - -inline char& _FILE_O_preincr(FILE *__f) { return *++__f->_IO_write_ptr; } -inline char& _FILE_O_postincr(FILE *__f) { return *__f->_IO_write_ptr++; } -inline char& _FILE_O_predecr(FILE *__f) { return *--__f->_IO_write_ptr; } -inline char& _FILE_O_postdecr(FILE *__f) { return *__f->_IO_write_ptr--; } -inline void _FILE_O_bump(FILE *__f, int __n) { __f->_IO_write_ptr += __n; } - -inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* __end) { - __f->_IO_write_base = __begin; - __f->_IO_write_ptr = __next; - __f->_IO_write_end = __end; - -} #elif defined(__hpux) /* && defined(__hppa) && defined(__HP_aCC)) */ @@ -370,66 +145,12 @@ #endif inline int _FILE_fd(const FILE *__f) { return fileno(__CONST_CAST(FILE *,__f)); } -inline char* _FILE_I_begin(const FILE *__f) { return (__REINTERPRET_CAST(char*, __f->__base)); } -inline char* _FILE_I_next(const FILE *__f) { return (__REINTERPRET_CAST(char*, __f->__ptr)); } -inline char* _FILE_I_end(const FILE *__f) { return (__REINTERPRET_CAST(char*, __f->__ptr +__f->__cnt)); } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->__cnt; } - -inline char& _FILE_I_preincr(FILE *__f) { --__f->__cnt; return *__REINTERPRET_CAST(char*, ++__f->__ptr); } -inline char& _FILE_I_postincr(FILE *__f) { --__f->__cnt; return *__REINTERPRET_CAST(char*, __f->__ptr++); } -inline char& _FILE_I_predecr(FILE *__f) { ++__f->__cnt; return *__REINTERPRET_CAST(char*,--__f->__ptr); } -inline char& _FILE_I_postdecr(FILE *__f) { ++__f->__cnt; return *__REINTERPRET_CAST(char*,__f->__ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) { __f->__cnt -= __n; __f->__ptr += __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { -# if defined(__hpux) - if( (unsigned long) (__f - &__iob[0]) > _NFILE) - __f->__flag |= _IOEXT; // used by stdio's _bufend macro and goodness knows what else... -# endif - __f->__cnt = __end - __next; - __f->__base = __REINTERPRET_CAST(unsigned char*, __begin); - __f->__ptr = __REINTERPRET_CAST(unsigned char*, __next); - _bufend(__f) = __REINTERPRET_CAST(unsigned char*, __end); -} - -// For HPUX stdio, input and output FILE manipulation is identical. - -# define _STLP_FILE_I_O_IDENTICAL #elif defined (__BORLANDC__) typedef unsigned char* _File_ptr_type; inline int _FILE_fd(const FILE *__f) { return __f->fd; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->buffer; -} -inline char* _FILE_I_next(const FILE *__f) -{ return (char*)__f->curp; } -inline char* _FILE_I_end(const FILE *__f) -{ return (char*) __f->curp + __f->level; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->level; } - -inline char& _FILE_I_preincr(FILE *__f) -{ --__f->level; return *(char*) (++__f->curp); } -inline char& _FILE_I_postincr(FILE *__f) -{ --__f->level; return *(char*) (__f->curp++); } -inline char& _FILE_I_predecr(FILE *__f) -{ ++__f->level; return *(char*) (--__f->curp); } -inline char& _FILE_I_postdecr(FILE *__f) -{ ++__f->level; return *(char*) (__f->curp--); } -inline void _FILE_I_bump(FILE *__f, int __n) -{ __f->curp += __n; __f->level -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* - __end) { - __f->buffer = (_File_ptr_type) __begin; - __f->curp = (_File_ptr_type) __next; - __f->level = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL #elif defined( __MWERKS__ ) @@ -442,140 +163,15 @@ inline int _FILE_fd(const FILE *__f) { return ::_fileno(__CONST_CAST(FILE*, __f)); } # endif -// Returns a pointer to the beginning of the buffer. -inline char* _FILE_I_begin(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->buffer); } -// Returns the current read/write position within the buffer. -inline char* _FILE_I_next(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->buffer_ptr); } - -// Returns a pointer immediately past the end of the buffer. -inline char* _FILE_I_end(const FILE *__f) { return __REINTERPRET_CAST(char*, __f->buffer_ptr + __f->buffer_len); } - -// Returns the number of characters remaining in the buffer, i.e. -// _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f). -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->buffer_len; } - -// Increments the current read/write position by 1, returning the -// character at the old position. -inline char& _FILE_I_preincr(FILE *__f) - { --__f->buffer_len; return *(char*) (++__f->buffer_ptr); } -inline char& _FILE_I_postincr(FILE *__f) - { --__f->buffer_len; return *(char*) (__f->buffer_ptr++); } -inline char& _FILE_I_predecr(FILE *__f) - { ++__f->buffer_len; return *(char*) (--__f->buffer_ptr); } -inline char& _FILE_I_postdecr(FILE *__f) - { ++__f->buffer_len; return *(char*) (__f->buffer_ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) - { __f->buffer_ptr += __n; __f->buffer_len -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { - __f->buffer = __REINTERPRET_CAST(unsigned char*, __begin); - __f->buffer_ptr = __REINTERPRET_CAST(unsigned char*, __next); - __f->buffer_len = __end - __next; - __f->buffer_size = __end - __begin; -} - -# define _STLP_FILE_I_O_IDENTICAL - #elif defined(__DMC__) inline int _FILE_fd(const FILE *__f) { return __f->_file; } -// Returns a pointer to the beginning of the buffer. -inline char* _FILE_I_begin(const FILE *__f) { return __f->_base; } - -// Returns the current read/write position within the buffer. -inline char* _FILE_I_next(const FILE *__f) { return __f->_ptr; } - -// Returns a pointer immediately past the end of the buffer. -inline char* _FILE_I_end(const FILE *__f) { return __f->_ptr + __f->_cnt; } - -// Returns the number of characters remaining in the buffer, i.e. -// _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f). -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; } - -// Increments the current read/write position by 1, returning the -// character at the NEW position. -inline char& _FILE_I_preincr(FILE *__f) { --__f->_cnt; return *(++__f->_ptr); } - - -// Increments the current read/write position by 1, returning the -// character at the old position. -inline char& _FILE_I_postincr(FILE *__f) { --__f->_cnt; return *(__f->_ptr++); } - -// Decrements the current read/write position by 1, returning the -// character at the NEW position. -inline char& _FILE_I_predecr(FILE *__f) { ++__f->_cnt; return *(--__f->_ptr); } - -// Decrements the current read/write position by 1, returning the -// character at the old position. -inline char& _FILE_I_postdecr(FILE *__f) { ++__f->_cnt; return *(__f->_ptr--); } - -// Increments the current read/write position by __n. -inline void _FILE_I_bump(FILE *__f, int __n) { __f->_cnt -= __n; __f->_ptr += __n; } - -// Sets the beginning of the bufer to __begin, the current read/write -// position to __next, and the buffer's past-the-end pointer to __end. -// If any of those pointers is null, then all of them must be null. -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) -{ - __f->_base = __begin; - __f->_ptr = __next; - __f->_cnt = __end - __next; - __f->_bufsiz = __end - __begin; -} - -# define _STLP_FILE_I_O_IDENTICAL #elif defined(__MRC__) || defined(__SC__) //*TY 02/24/2000 - added support for MPW inline int _FILE_fd(const FILE *__f) { return __f->_file; } -// Returns a pointer to the beginning of the buffer. -inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->_base; } - -// Returns the current read/write position within the buffer. -inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_ptr; } - -// Returns a pointer immediately past the end of the buffer. -inline char* _FILE_I_end(const FILE *__f) { return (char*)__f->_end; } - -// Returns the number of characters remaining in the buffer, i.e. -// _FILE_[IO]_end(__f) - _FILE_[IO]_next(__f). -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; } - -// Increments the current read/write position by 1, returning the -// character at the NEW position. -inline char& _FILE_I_preincr(FILE *__f) { --__f->_cnt; return*(char*) (++__f->_ptr); } - - -// Increments the current read/write position by 1, returning the -// character at the old position. -inline char& _FILE_I_postincr(FILE *__f) { --__f->_cnt; return*(char*) (__f->_ptr++); } - -// Decrements the current read/write position by 1, returning the -// character at the NEW position. -inline char& _FILE_I_predecr(FILE *__f) { ++__f->_cnt; return*(char*) (--__f->_ptr); } - -// Decrements the current read/write position by 1, returning the -// character at the old position. -inline char& _FILE_I_postdecr(FILE *__f) { ++__f->_cnt; return*(char*) (__f->_ptr--); } - -// Increments the current read/write position by __n. -inline void _FILE_I_bump(FILE *__f, int __n) { __f->_cnt -= __n; __f->_ptr += __n; } - -// Sets the beginning of the bufer to __begin, the current read/write -// position to __next, and the buffer's past-the-end pointer to __end. -// If any of those pointers is null, then all of them must be null. -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) -{ - __f->_base = (unsigned char*)__begin; - __f->_ptr = (unsigned char*)__next; - __f->_end = (unsigned char*)__end; - __f->_cnt = __end - __next; - __f->_size = __end - __begin; -} - -# define _STLP_FILE_I_O_IDENTICAL #elif defined (__MVS__) @@ -583,200 +179,29 @@ inline int _FILE_fd(const FILE *__f) { return fileno(__CONST_CAST(FILE *,__f)); } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) - __f->__fp->__bufPtr; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) - __f->__fp->__bufPtr; } -inline char* _FILE_I_end(const FILE *__f) -{ return (char*) __f->__fp->__bufPtr + __f->__fp->__countIn; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return - __f->__fp->__countIn; } - -inline char& _FILE_I_preincr(FILE *__f) -{ --__f->__fp->__countIn; return *(char*) (++__f->__fp->__bufPtr); } -inline char& _FILE_I_postincr(FILE *__f) -{ --__f->__fp->__countIn; return *(char*) (__f->__fp->__bufPtr++); } -inline char& _FILE_I_predecr(FILE *__f) -{ ++__f->__fp->__countIn; return *(char*) (--__f->__fp->__bufPtr); } -inline char& _FILE_I_postdecr(FILE *__f) -{ ++__f->__fp->__countIn; return *(char*) (__f->__fp->__bufPtr--); } -inline void _FILE_I_bump(FILE *__f, int __n) -{ __f->__fp->__bufPtr += __n; __f->__fp->__countIn -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* - __end) { - // __f->_base = (_File_ptr_type) __begin; - if(__f->__fp) { - __f->__fp->__bufPtr = (_File_ptr_type) __next; - __f->__fp->__countIn = __end - __next; - } -} - -inline char* _FILE_O_begin(const FILE *__f) { return (char*)__f->__fp->__bufPtr;} -inline char* _FILE_O_next(const FILE *__f) { return (char*) __f->__fp->__bufPtr;} -inline char* _FILE_O_end(const FILE *__f) { return (char*) __f->__fp->__bufPtr + __f->__fp->__countOut; } -inline ptrdiff_t _FILE_O_avail(const FILE *__f) { return __f->__fp->__countOut; } - -inline char& _FILE_O_preincr(FILE *__f) -{ --__f->__fp->__countOut; return *(char*) (++__f->__fp->__bufPtr); } -inline char& _FILE_O_postincr(FILE *__f) -{ --__f->__fp->__countOut; return *(char*) (__f->__fp->__bufPtr++); } -inline char& _FILE_O_predecr(FILE *__f) -{ ++__f->__fp->__countOut; return *(char*) (--__f->__fp->__bufPtr); } -inline char& _FILE_O_postdecr(FILE *__f) -{ ++__f->__fp->__countOut; return *(char*) (__f->__fp->__bufPtr--); } -inline void _FILE_O_bump(FILE *__f, int __n) -{ __f->__fp->__bufPtr += __n; __f->__fp->__countOut -= __n; } - -inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* - __end) { - // __f->_base = (_File_ptr_type) __begin; - if(__f->__fp) { - __f->__fp->__bufPtr = (_File_ptr_type) __next; - __f->__fp->__countOut = __end - __next; - } -} #elif defined(__QNXNTO__) inline int _FILE_fd(const FILE *__f) { return __f->_handle; } -inline char* _FILE_I_begin(const FILE *__f) { return - (char*) __f->_base; } -inline char* _FILE_I_next(const FILE *__f) { return - (char*) __f->_ptr; } -inline char* _FILE_I_end(const FILE *__f) -{ return (char*) __f->_ptr + __f->_cnt; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return - __f->_cnt; } - -inline char& _FILE_I_preincr(FILE *__f) -{ --__f->_cnt; return *(char*) (++__f->_ptr); } -inline char& _FILE_I_postincr(FILE *__f) -{ --__f->_cnt; return *(char*) (__f->_ptr++); } -inline char& _FILE_I_predecr(FILE *__f) -{ ++__f->_cnt; return *(char*) (--__f->_ptr); } -inline char& _FILE_I_postdecr(FILE *__f) -{ ++__f->_cnt; return *(char*) (__f->_ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) -{ __f->_ptr += __n; __f->_cnt -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* - __next, char* - __end) { - __f->_base = (unsigned char*) __begin; - __f->_ptr = (unsigned char*) __next; - __f->_cnt = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL #elif defined(__WATCOMC__) // Nikolaev inline int _FILE_fd (const FILE *__f) { return __f->_handle;} -inline char* _FILE_I_begin (const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_link); } -inline char* _FILE_I_next (const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_ptr); } -inline char* _FILE_I_end (const FILE *__f) { return __REINTERPRET_CAST(char*, __f->_ptr + __f->_cnt); } -inline ptrdiff_t _FILE_I_avail (const FILE *__f) { return __f->_cnt; } - -inline char& _FILE_I_preincr(FILE *__f) -{ - --__f->_cnt; - return *__REINTERPRET_CAST(char*, ++__f->_ptr); -} - -inline char& _FILE_I_postincr(FILE *__f) -{ - --__f->_cnt; - return *__REINTERPRET_CAST(char*, __f->_ptr++); -} - -inline char& _FILE_I_predecr(FILE *__f) -{ - ++__f->_cnt; - return *__REINTERPRET_CAST(char*, --__f->_ptr); -} - -inline char& _FILE_I_postdecr(FILE *__f) -{ - ++__f->_cnt; - return *__REINTERPRET_CAST(char*, __f->_ptr--); -} - -inline void _FILE_I_bump(FILE *__f, int __n) -{ - __f->_ptr += __n; - __f->_cnt -= __n; -} - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) -{ - __f->_link = __REINTERPRET_CAST(__stream_link*, __begin); - __f->_ptr = __REINTERPRET_CAST(unsigned char*, __next); - __f->_cnt = __end - __next; -} - -# define _STLP_FILE_I_O_IDENTICAL #elif defined (__Lynx__) // the prototypes are taken from LynxOS patch for STLport 4.0 inline int _FILE_fd(const FILE *__f) { return __f->_fd; } -inline char* _FILE_I_begin(const FILE *__f) { return (char*) __f->_base; } -inline char* _FILE_I_next(const FILE *__f) { return (char*) __f->_ptr; } -inline char* _FILE_I_end(const FILE *__f) - { return (char*) __f->_ptr + __f->_cnt; } - -inline ptrdiff_t _FILE_I_avail(const FILE *__f) { return __f->_cnt; } - -inline char& _FILE_I_preincr(FILE *__f) - { --__f->_cnt; return *(char*) (++__f->_ptr); } -inline char& _FILE_I_postincr(FILE *__f) - { --__f->_cnt; return *(char*) (__f->_ptr++); } -inline char& _FILE_I_predecr(FILE *__f) - { ++__f->_cnt; return *(char*) (--__f->_ptr); } -inline char& _FILE_I_postdecr(FILE *__f) - { ++__f->_cnt; return *(char*) (__f->_ptr--); } -inline void _FILE_I_bump(FILE *__f, int __n) - { __f->_ptr += __n; __f->_cnt -= __n; } - -inline void _FILE_I_set(FILE *__f, char* __begin, char* __next, char* __end) { - __f->_base = __begin; - __f->_ptr = __next; - __f->_cnt = __end - __next; -} -# define _STLP_FILE_I_O_IDENTICAL #else /* A C library that we don't have an implementation for. */ -# error The C++ I/O library is not configured for this compiler +// use stdio +inline int _FILE_fd(FILE * __f) { return ::fileno(__f); } #endif -// For most stdio's , input and output FILE manipulation is identical. -# ifdef _STLP_FILE_I_O_IDENTICAL -inline char* _FILE_O_begin(const FILE *__f) { return _FILE_I_begin(__f); } -inline char* _FILE_O_next(const FILE *__f) { return _FILE_I_next(__f); } -inline char* _FILE_O_end(const FILE *__f) { return _FILE_I_end(__f); } - -inline ptrdiff_t _FILE_O_avail(const FILE *__f) { return _FILE_I_avail(__f); } - -inline char& _FILE_O_preincr(FILE *__f) { return _FILE_I_preincr(__f); } -inline char& _FILE_O_postincr(FILE *__f) { return _FILE_I_postincr(__f); } -inline char& _FILE_O_predecr(FILE *__f) { return _FILE_I_predecr(__f); } -inline char& _FILE_O_postdecr(FILE *__f) { return _FILE_I_postdecr(__f); } - -inline void _FILE_O_bump(FILE *__f, int __n) { _FILE_I_bump(__f, __n); } -inline void _FILE_O_set(FILE *__f, char* __begin, char* __next, char* __end) - { _FILE_I_set(__f, __begin, __next, __end); } -# endif - -#else -inline int _FILE_fd(const FILE *__f) { return (int)::_fileno(__CONST_CAST(FILE *, __f)); } -#endif /* _STLP_WINCE */ _STLP_END_NAMESPACE Index: src/fstream.cpp =================================================================== retrieving revision 1.20 diff -u -r1.20 fstream.cpp --- src/fstream.cpp 3 Feb 2004 21:19:00 -0000 1.20 +++ src/fstream.cpp 13 Apr 2004 10:55:54 -0000 @@ -164,7 +164,7 @@ __SGI_BEGIN_NAMESPACE -#if !defined(__MSL__) && !defined(__MRC__) && !defined(__SC__) && !defined(_STLP_WINCE) && !defined(_STLP_WCE_NET) //*TY 04/15/2000 - exclude mpw compilers also +#if !defined(__MSL__) && !defined(__MRC__) && !defined(__SC__) && !defined(_STLP_WINCE) && !defined(_STLP_WCE_NET) && !defined(__ECOS__) //*TY 04/15/2000 - exclude mpw compilers also ios_base::openmode flag_to_openmode(int mode) { ios_base::openmode ret; @@ -209,7 +209,7 @@ #pragma unused(fd) return true; // each file is a regular file under mac os, isn't it? (we don't have fstat()) -#elif defined(_STLP_USE_UNIX_EMULATION_IO) || defined (_STLP_USE_STDIO_IO) +#elif (defined(_STLP_USE_UNIX_EMULATION_IO) || defined (_STLP_USE_STDIO_IO)) && ! defined(__ECOS__) struct stat buf; return fstat(fd, &buf) == 0 && (buf.st_mode & _S_IFREG) != 0 ; @@ -239,7 +239,7 @@ #pragma unused(fd) -#elif defined(_STLP_USE_UNIX_EMULATION_IO) || defined (_STLP_USE_STDIO_IO) +#elif (defined(_STLP_USE_UNIX_EMULATION_IO) || defined (_STLP_USE_STDIO_IO)) && ! defined(__ECOS__) struct stat buf; if(fstat(fd, &buf) == 0 && (buf.st_mode & _S_IFREG) != 0) @@ -705,7 +705,7 @@ return false; } -# elif defined (_STLP_USE_UNIX_EMULATION_IO) || defined (_STLP_USE_STDIO_IO) +# elif (defined(_STLP_USE_UNIX_EMULATION_IO) || defined (_STLP_USE_STDIO_IO)) && ! defined(__ECOS__) (void)init_mode; // dwa 4/27/00 - suppress unused parameter warning int mode ; struct stat buf; Index: src/num_put_float.cpp =================================================================== retrieving revision 1.14 diff -u -r1.14 num_put_float.cpp --- src/num_put_float.cpp 29 Jan 2004 21:19:10 -0000 1.14 +++ src/num_put_float.cpp 13 Apr 2004 10:55:57 -0000 @@ -54,7 +54,7 @@ # include # endif -# if defined (__QNXNTO__) || ( defined(__GNUC__) && defined(__APPLE__) ) +# if defined(__ECOS__) || defined (__QNXNTO__) || ( defined(__GNUC__) && defined(__APPLE__) ) # define USE_SPRINTF_INSTEAD # endif @@ -81,13 +81,14 @@ #include -#if defined( __MSL__ ) +#if defined( __MSL__ ) || defined(__ECOS__) # include // for atoi # include // for snprintf # include # include #endif + #if defined (__ISCPP__) # include #endif @@ -281,7 +282,9 @@ #endif + # ifndef USE_SPRINTF_INSTEAD + // Reentrant versions of floating-point conversion functions. The argument // lists look slightly different on different operating systems, so we're // encapsulating the differences here. Index: stlport/cstdio =================================================================== retrieving revision 1.9 diff -u -r1.9 cstdio --- stlport/cstdio 15 Nov 2003 14:15:33 -0000 1.9 +++ stlport/cstdio 13 Apr 2004 10:56:01 -0000 @@ -96,16 +96,20 @@ using _STLP_VENDOR_CSTD::perror; using _STLP_VENDOR_CSTD::printf; using _STLP_VENDOR_CSTD::puts; +#if !defined(__ECOS__) using _STLP_VENDOR_CSTD::remove; using _STLP_VENDOR_CSTD::rename; +#endif using _STLP_VENDOR_CSTD::rewind; using _STLP_VENDOR_CSTD::scanf; using _STLP_VENDOR_CSTD::setbuf; using _STLP_VENDOR_CSTD::setvbuf; using _STLP_VENDOR_CSTD::sprintf; using _STLP_VENDOR_CSTD::sscanf; +#if !defined(__ECOS__) using _STLP_VENDOR_CSTD::tmpfile; using _STLP_VENDOR_CSTD::tmpnam; +#endif using _STLP_VENDOR_CSTD::ungetc; using _STLP_VENDOR_CSTD::vfprintf; using _STLP_VENDOR_CSTD::vprintf; Index: stlport/stl_user_config.h =================================================================== retrieving revision 1.21 diff -u -r1.21 stl_user_config.h --- stlport/stl_user_config.h 11 Apr 2004 17:04:02 -0000 1.21 +++ stlport/stl_user_config.h 13 Apr 2004 10:56:01 -0000 @@ -268,14 +268,29 @@ */ // #define _STLP_USE_BOOST_TYPE_TRAITS 1 -/* - * MS VC compilers has ability to define required library at compile time - * via #pragma comment(lib,libname) - * uncomment this, if you want turn off this mechanism: - */ -// #define _STLP_DONT_FORCE_MSVC_LIB_NAME //========================================================== + + +#if defined(__ECOS__) +// Some sensible adjustment of defaults for eCos +// +// Add to g++ command line: +// +// -D__ECOS__=1 -I../STLport-5.0-0125/stlport +// -I/xxx/gnutools/arm-elf/arm-elf/include/arm-elf +#define _STLP_HAS_NO_NEW_C_HEADERS +//#define _STLP_USE_NEW_C_HEADERS +//#define _STLP_NO_OWN_NAMESPACE +//#define _STLP_NO_THREADS +//#define _NOTHREADS +//#define _STLP_NO_IOSTREAMS 1 +#define _STLP_NO_CUSTOM_IO +#define _STLP_USE_MALLOC 1 +#define _STLP_NO_WCHAR_T 1 +#define _STLP_NO_ANACHRONISMS +#define _STLP_USE_STDIO_FOR_STREAMS +#endif // Local Variables: // mode: C++ Index: stlport/config/stl_gcc.h =================================================================== retrieving revision 1.36 diff -u -r1.36 stl_gcc.h --- stlport/config/stl_gcc.h 29 Mar 2004 08:25:43 -0000 1.36 +++ stlport/config/stl_gcc.h 13 Apr 2004 10:56:04 -0000 @@ -7,6 +7,10 @@ # define _STLP_USE_GLIBC #endif +#if defined(__ECOS__) +# define _STLP_USE_STDIO_IO 1 +#endif + #define _STLP_NO_MEMBER_TEMPLATE_KEYWORD #if defined (__hpux) || defined(__amigaos__) || ( defined(__OS2__) && defined(__EMX__) ) @@ -287,7 +291,9 @@ # define _STLP_REDEFINE_STD 1 # endif -# if ((__GNUC_MINOR__ == 0) || (__APPLE__)) +# if defined(__ECOS__) +# define _STLP_NATIVE_INCLUDE_PATH ../include +# elif ((__GNUC_MINOR__ == 0) || defined(__APPLE__) ) # define _STLP_NATIVE_INCLUDE_PATH ../g++-v3 # else # if defined(__GNUC_PATCHLEVEL__) && (__GNUC_PATCHLEVEL__ > 0) Index: stlport/stl/_fstream.h =================================================================== retrieving revision 1.14 diff -u -r1.14 _fstream.h --- stlport/stl/_fstream.h 29 Mar 2004 08:12:03 -0000 1.14 +++ stlport/stl/_fstream.h 13 Apr 2004 10:56:07 -0000 @@ -38,9 +38,8 @@ #include #endif -//#ifndef _STLP_STDIO_FILE_H -//#include -//#endif +// FILE definition from platform +#include #if !defined (_STLP_USE_UNIX_IO) && !defined(_STLP_USE_WIN32_IO) \ && ! defined (_STLP_USE_UNIX_EMULATION_IO) && !defined (_STLP_USE_STDIO_IO) @@ -117,7 +116,7 @@ // Returns true if we're in binary mode or if we're using an OS or file // system where there is no distinction between text and binary mode. bool _M_in_binary_mode() const { -# if defined (_STLP_UNIX) || defined (_STLP_MAC) || defined(__BEOS__) || defined (__amigaos__) +# if defined (_STLP_UNIX) || defined (_STLP_MAC) || defined(__BEOS__) || defined (__amigaos__) || defined(__ECOS__) return true; # elif defined (_STLP_WIN32) || defined (_STLP_WIN16) || defined (_STLP_DOS) || defined (_STLP_VM) || defined (__EMX__) return (_M_openmode & ios_base::binary) != 0; Index: stlport/stl/c_locale.h =================================================================== retrieving revision 1.7 diff -u -r1.7 c_locale.h --- stlport/stl/c_locale.h 29 Nov 2003 20:24:51 -0000 1.7 +++ stlport/stl/c_locale.h 13 Apr 2004 10:56:09 -0000 @@ -180,7 +180,7 @@ #if defined(__GNUC__) || defined (__BORLANDC__) || defined (__COMO__) -# if defined (__CYGWIN__) +# if defined (__CYGWIN__) || defined (__ECOS__) # define _Locale_CNTRL 040 # define _Locale_UPPER 02 Index: src/gcc-ecos.mak =================================================================== RCS file: src/gcc-ecos.mak diff -N src/gcc-ecos.mak --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/gcc-ecos.mak 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,59 @@ +# To compile: +# +# make -f gcc-ecos.mak INSTALL_DIR=/ecosdir/install ECOSTOOLS=../../ecos-install/ecos/gnutools/arm-elf/arm-elf/include/arm-elf +# + +include $(INSTALL_DIR)/include/pkgconf/ecos.mak + +# +# compiler +# +CC = $(ECOS_COMMAND_PREFIX)gcc +CXX = $(ECOS_COMMAND_PREFIX)g++ + +# +# Basename for libraries +# +LIB_BASENAME = libstlport_ecos + +# +# guts for common stuff +# +# +LINK=$(ECOS_COMMAND_PREFIX)ar crv + +OBJEXT=o +STEXT=a +RM=rm -rf +PATH_SEP=/ +MKDIR=mkdir -p +COMP=ecos +INSTALL_STEP = + +all: all_static + +include common_macros.mak + +WARNING_FLAGS= -W -Wno-sign-compare -Wno-unused -Wno-uninitialized + +CXXFLAGS_COMMON = -I${STLPORT_DIR} -I${INSTALL_DIR}/include ${WARNING_FLAGS} +CXXFLAGS_COMMON += $(ECOS_GLOBAL_CFLAGS) -D__ECOS__=1 +CXXFLAGS_COMMON += -fno-vtable-gc -fexceptions -frtti +CXXFLAGS_COMMON += -I$(ECOSTOOLS) + +CXXFLAGS_RELEASE_static = $(CXXFLAGS_COMMON) -O0 -g + +CXXFLAGS_DEBUG_static = $(CXXFLAGS_COMMON) -O0 -g + +CXXFLAGS_STLDEBUG_static = $(CXXFLAGS_COMMON) -g -O0 -D_STLP_DEBUG + + + +LDFLAGS_RELEASE_static = + +LDFLAGS_DEBUG_static = + +LDFLAGS_STLDEBUG_static = + +include common_percent_rules.mak +include common_rules.mak