1#ifndef _STDIO_IMPL_H 2#define _STDIO_IMPL_H 3 4#include <stdio.h> 5#include "syscall.h" 6#include "libc.h" 7 8#define UNGET 8 9 10#define FFINALLOCK(f) ((f)->lock>=0 ? __lockfile((f)) : 0) 11#define FLOCK(f) int __need_unlock = ((f)->lock>=0 ? __lockfile((f)) : 0) 12#define FUNLOCK(f) if (__need_unlock) __unlockfile((f)); else 13 14#define F_PERM 1 15#define F_NORD 4 16#define F_NOWR 8 17#define F_EOF 16 18#define F_ERR 32 19#define F_SVB 64 20#define F_APP 128 21 22struct _IO_FILE { 23 unsigned flags; 24 unsigned char *rpos, *rend; 25 int (*close)(FILE *); 26 unsigned char *wend, *wpos; 27 unsigned char *mustbezero_1; 28 unsigned char *wbase; 29 size_t (*read)(FILE *, unsigned char *, size_t); 30 size_t (*write)(FILE *, const unsigned char *, size_t); 31 off_t (*seek)(FILE *, off_t, int); 32 unsigned char *buf; 33 size_t buf_size; 34 FILE *prev, *next; 35 int fd; 36 int pipe_pid; 37 long lockcount; 38 short dummy3; 39 signed char mode; 40 signed char lbf; 41 volatile int lock; 42 volatile int waiters; 43 void *cookie; 44 off_t off; 45 char *getln_buf; 46 void *mustbezero_2; 47 unsigned char *shend; 48 off_t shlim, shcnt; 49 FILE *prev_locked, *next_locked; 50 struct __locale_struct *locale; 51}; 52 53size_t __stdio_read(FILE *, unsigned char *, size_t); 54size_t __stdio_write(FILE *, const unsigned char *, size_t); 55size_t __stdout_write(FILE *, const unsigned char *, size_t); 56off_t __stdio_seek(FILE *, off_t, int); 57int __stdio_close(FILE *); 58 59size_t __string_read(FILE *, unsigned char *, size_t); 60 61int __toread(FILE *); 62int __towrite(FILE *); 63 64#if defined(__PIC__) && (100*__GNUC__+__GNUC_MINOR__ >= 303) 65__attribute__((visibility("protected"))) 66#endif 67int __overflow(FILE *, int), __uflow(FILE *); 68 69int __fseeko(FILE *, off_t, int); 70int __fseeko_unlocked(FILE *, off_t, int); 71off_t __ftello(FILE *); 72off_t __ftello_unlocked(FILE *); 73size_t __fwritex(const unsigned char *, size_t, FILE *); 74int __putc_unlocked(int, FILE *); 75 76FILE *__fdopen(int, const char *); 77int __fmodeflags(const char *); 78 79FILE *__ofl_add(FILE *f); 80FILE **__ofl_lock(void); 81void __ofl_unlock(void); 82 83#define feof(f) ((f)->flags & F_EOF) 84#define ferror(f) ((f)->flags & F_ERR) 85 86#define getc_unlocked(f) \ 87 ( ((f)->rpos < (f)->rend) ? *(f)->rpos++ : __uflow((f)) ) 88 89#define putc_unlocked(c, f) \ 90 ( ((unsigned char)(c)!=(f)->lbf && (f)->wpos<(f)->wend) \ 91 ? *(f)->wpos++ = (c) : __overflow((f),(c)) ) 92 93/* Caller-allocated FILE * operations */ 94FILE *__fopen_rb_ca(const char *, FILE *, unsigned char *, size_t); 95int __fclose_ca(FILE *); 96 97#endif 98