2 ** Copyright 2002, Travis Geiselbrecht. All rights reserved.
3 ** Copyright 2002, Manuel J. Petit. All rights reserved.
4 ** Distributed under the terms of the NewOS License.
5 ** Modified by Justin Smith 2003/06/17. Changed FILE struct.
8 #ifndef __newos__libc_stdio__hh__
9 #define __newos__libc_stdio__hh__
12 #include <sys/types.h>
13 #include <sys/cdefs.h>
22 #define _STDIO_READ 0x0001
23 #define _STDIO_WRITE 0x0002
24 #define _STDIO_EOF 0x0004
25 #define _STDIO_ERROR 0x0008
26 #define _STDIO_UNGET 0x0010
35 int fd
; /* system file descriptor */
36 ptrdiff_t rpos
; /* The first unread buffer position */
37 ptrdiff_t buf_pos
; /* first unwritten buffer position */
38 unsigned char* buf
; /* buffer */
39 ptrdiff_t buf_size
; /* buffer size */
40 unsigned char unget
; /* for ungetc */
41 int flags
; /* for feof and ferror */
42 struct __FILE
* next
; /* for fflush */
43 sem_id sid
; /* semaphore */
45 typedef struct __FILE
FILE;
51 /* arguments to setvbuf */
52 #define _IOFBF 0 /* setvbuf should set fully buffered */
53 #define _IOLBF 1 /* setvbuf should set line buffered */
54 #define _IONBF 2 /* setvbuf should set unbuffered */
60 int printf(char const *format
, ...) __PRINTFLIKE(1,2);
61 int fprintf(FILE *stream
, char const *format
, ...) __PRINTFLIKE(2,3);
62 int sprintf(char *str
, char const *format
, ...) __PRINTFLIKE(2,3);
63 //int snprintf(char *str, size_t size, char const *format, ...) __PRINTFLIKE(3,4);
64 //int asprintf(char **ret, char const *format, ...) __PRINTFLIKE(2,3);
65 int vprintf(char const *format
, va_list ap
);
66 int vfprintf(FILE *stream
, char const *format
, va_list ap
);
67 int vsprintf(char *str
, char const *format
, va_list ap
);
68 //int vsnprintf(char *str, size_t size, char const *format, va_list ap);
69 //int vasprintf(char **ret, char const *format, va_list ap);
71 size_t fwrite(const void *ptr
, size_t size
, size_t nmemb
, FILE *stream
);
72 int putc(int ch
, FILE *stream
);
73 int fputc(int ch
, FILE *stream
);
76 int remove(const char *path
);
77 int rename(const char *from
, const char *to
);
78 void rewind(FILE *stream
);
81 char *tmpnam(char *str
);
82 char *tempnam(const char *tmpdir
, const char *prefix
);
84 FILE *fopen(char const *, char const *);
87 FILE *fdopen(int fildes
, const char *mode
);
88 FILE *freopen(const char *path
, const char *mode
, FILE *stream
);
90 long int ftell(FILE *stream
);
91 int fgetpos(FILE *stream
, fpos_t *pos
);
92 int fsetpos(FILE *stream
, const fpos_t *pos
);
94 int fseek(FILE *stream
, long int offset
, int whence
);
95 int fileno(FILE *stream
);
98 void clearerr(FILE *);
99 void perror(const char *string
);
101 int fputs(const char *str
, FILE *stream
);
102 int puts(const char *str
);
104 FILE *freopen(const char *filename
, const char *mode
, FILE *stream
);
105 char* fgets(char *, int, FILE *);
106 char *gets(char *str
);
107 size_t fread(void *ptr
, size_t size
, size_t nmemb
, FILE *stream
);
111 int ungetc(int c
, FILE *stream
);
113 void setbuf(FILE *stream
, char *buf
);
114 int setvbuf(FILE *stream
, char *buf
, int mode
, size_t size
);
115 void setbuffer(FILE *stream
, char *buf
, int size
);
116 int setlinebuf(FILE *stream
);
118 int scanf(char const *format
, ...);
119 int fscanf(FILE *stream
, char const *format
, ...);
120 int sscanf(char const *str
, char const *format
, ...);
121 //int vscanf(char const *format, va_list ap);
122 int vsscanf(char const *str
, char const *format
, va_list ap
);
123 int vfscanf(FILE *stream
, char const *format
, va_list ap
);
125 int _v_printf(int (*_write
)(void*, const void *, ssize_t
), void* arg
, const char *fmt
, va_list args
);
131 // getchar goes off in it's own little non-standard world
132 // This function will be removed soon
142 #if defined(__cplusplus) && !defined(_NEWOS_NO_LIBC_COMPAT)
150 using ::std::clearerr
;
156 using ::std::fgetpos
;
160 using ::std::freopen
;
161 using ::std::fprintf
;
165 using ::std::freopen
;
169 using ::std::fsetpos
;
173 using ::std::getchar
;
178 using ::std::putchar
;
185 using ::std::setvbuf
;
186 using ::std::sprintf
;
188 using ::std::tmpfile
;
190 using ::std::tempnam
;
192 using ::std::vfprintf
;
193 using ::std::vprintf
;
194 using ::std::vsprintf
;