28 #define NEED_FPURGE_DECL 30 # define fpurge _bash_fpurge 35 # include <stdio_ext.h> 47 #if defined __NetBSD__ 49 # include <sys/param.h> 52 #if defined __sferror || defined __DragonFly__ 54 # if defined __DragonFly__ 56 # define fp_ ((struct { struct __FILE_public pub; \ 57 struct { unsigned char *_base; int _size; } _bf; \ 63 struct { unsigned char *_base; int _size; } _ub; \ 65 unsigned char _ubuf[3]; \ 66 unsigned char _nbuf[1]; \ 67 struct { unsigned char *_base; int _size; } _lb; \ 74 # define _flags pub._flags 81 # if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ 89 # define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub 91 # define fp_ub fp_->_ub 94 # define HASUB(fp) (fp_ub._base != NULL) 102 # if defined __sun && defined _LP64 103 # define fp_ ((struct { unsigned char *_ptr; \ 104 unsigned char *_base; \ 105 unsigned char *_end; \ 108 unsigned int _flag; \ 117 # define _base __base 118 # define _flag __flag 136 # if !HAVE_DECL_FPURGE 137 extern int fpurge (FILE *);
140 # if defined __sferror || defined __DragonFly__ 148 if ((fp_->_flags & __SRD) != 0)
158 # if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 159 fp->_IO_read_end = fp->_IO_read_ptr;
160 fp->_IO_write_ptr = fp->_IO_write_base;
162 if (fp->_IO_save_base !=
NULL)
164 free (fp->_IO_save_base);
165 fp->_IO_save_base =
NULL;
168 # elif defined __sferror || defined __DragonFly__ 169 fp_->_p = fp_->_bf._base;
171 fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0
175 if (fp_ub._base !=
NULL)
177 if (fp_ub._base != fp_->_ubuf)
182 # elif defined __EMX__ 183 fp->_ptr = fp->_buffer;
186 fp->_ungetc_count = 0;
188 # elif defined _IOERR || defined __TANDEM 189 fp->_ptr = fp->_base;
190 if (fp->_ptr !=
NULL)
193 # elif defined __UCLIBC__ 194 # ifdef __STDIO_BUFFERS 195 if (fp->__modeflags & __FLAG_WRITING)
196 fp->__bufpos = fp->__bufstart;
197 else if (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING))
198 fp->__bufpos = fp->__bufread;
201 # elif defined __QNX__ 202 fp->_Rback = fp->_Back +
sizeof (fp->_Back);
204 if (fp->_Mode & 0x2000 )
206 fp->_Next = fp->_Buf;
209 fp->_Rend = fp->_Next;
211 # elif defined __MINT__ 212 if (fp->__pushed_back)
214 fp->__bufp = fp->__pushback_bufp;
215 fp->__pushed_back = 0;
218 if (fp->__target != -1)
219 fp->__target += fp->__bufp - fp->__buffer;
220 fp->__bufp = fp->__buffer;
222 fp->__get_limit = fp->__bufp;
224 fp->__put_limit = fp->__buffer;
227 # warning "Please port gnulib fpurge.c to your platform! Look at the definitions of fflush, setvbuf and ungetc on your system, then report this to bug-gnulib." int fpurge __P((FILE *stream))