github.com/afumu/libc@v0.0.6/musl/src/internal/stdio_impl.h (about)

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