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 |
|
---|
22 | struct _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 |
|
---|
53 | size_t __stdio_read(FILE *, unsigned char *, size_t);
|
---|
54 | size_t __stdio_write(FILE *, const unsigned char *, size_t);
|
---|
55 | size_t __stdout_write(FILE *, const unsigned char *, size_t);
|
---|
56 | off_t __stdio_seek(FILE *, off_t, int);
|
---|
57 | int __stdio_close(FILE *);
|
---|
58 |
|
---|
59 | size_t __string_read(FILE *, unsigned char *, size_t);
|
---|
60 |
|
---|
61 | int __toread(FILE *);
|
---|
62 | int __towrite(FILE *);
|
---|
63 |
|
---|
64 | #if defined(__PIC__) && (100*__GNUC__+__GNUC_MINOR__ >= 303)
|
---|
65 | __attribute__((visibility("protected")))
|
---|
66 | #endif
|
---|
67 | int __overflow(FILE *, int), __uflow(FILE *);
|
---|
68 |
|
---|
69 | int __fseeko(FILE *, off_t, int);
|
---|
70 | int __fseeko_unlocked(FILE *, off_t, int);
|
---|
71 | off_t __ftello(FILE *);
|
---|
72 | off_t __ftello_unlocked(FILE *);
|
---|
73 | size_t __fwritex(const unsigned char *, size_t, FILE *);
|
---|
74 | int __putc_unlocked(int, FILE *);
|
---|
75 |
|
---|
76 | FILE *__fdopen(int, const char *);
|
---|
77 | int __fmodeflags(const char *);
|
---|
78 |
|
---|
79 | FILE *__ofl_add(FILE *f);
|
---|
80 | FILE **__ofl_lock(void);
|
---|
81 | void __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 */
|
---|
94 | FILE *__fopen_rb_ca(const char *, FILE *, unsigned char *, size_t);
|
---|
95 | int __fclose_ca(FILE *);
|
---|
96 |
|
---|
97 | #endif
|
---|