blob: a876f6c532d126285b249b67bb0a5938e9f1717b [file] [log] [blame]
Antonio Nino Diaz27989a82018-08-17 10:45:47 +01001/*
2 * Copyright (c) 2012-2017 Roberto E. Vargas Caballero
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _STDIO_H
8#define _STDIO_H
9
10#include <arch/stdio.h>
11
12#ifndef FOPEN_MAX
13#define FOPEN_MAX 12
14#endif
15
16#ifndef NULL
17#define NULL ((void *) 0)
18#endif
19
20#define EOF -1
21#define SEEK_CUR 0
22#define SEEK_END 1
23#define SEEK_SET 2
24
25
26#define _IOWRITE (1 << 0)
27#define _IOREAD (1 << 1)
28#define _IORW (1 << 2)
29#define _IOEOF (1 << 3)
30#define _IOERR (1 << 4)
31#define _IOSTRG (1 << 5)
32#define _IOTXT (1 << 6)
33#define _IOFBF (1 << 7)
34#define _IOLBF (1 << 8)
35#define _IONBF (1 << 9)
36#define _IOALLOC (1 <<10)
37
38typedef struct {
39 int fd; /* file descriptor */
40 unsigned char *buf; /* pointer to i/o buffer */
41 unsigned char *rp; /* read pointer */
42 unsigned char *wp; /* write pointer */
43 unsigned char *lp; /* write pointer used when line-buffering */
44 size_t len; /* actual length of buffer */
45 unsigned short flags;
46 unsigned char unbuf[1]; /* tiny buffer for unbuffered io */
47} FILE;
48
49extern FILE __iob[FOPEN_MAX];
50
51#define stdin (&__iob[0])
52#define stdout (&__iob[1])
53#define stderr (&__iob[2])
54
55extern int remove(const char *filename);
56extern int rename(const char *old, const char *new);
57extern FILE *tmpfile(void);
58extern char *tmpnam(char *s);
59extern int fclose(FILE *fp);
60extern int fflush(FILE *fp);
61extern FILE *fopen(const char * restrict fname, const char * restrict mode);
62extern FILE *freopen(const char * restrict fname, const char * restrict mode,
63 FILE * restrict fp);
64extern void setbuf(FILE * restrict fp, char * restrict buf);
65extern int setvbuf(FILE * restrict fp,
66 char * restrict buf, int mode, size_t size);
67extern int fprintf(FILE * restrict fp, const char * restrict fmt, ...);
68extern int fscanf(FILE * restrict fp, const char * restrict fmt, ...);
69extern int printf(const char * restrict fmt, ...);
70extern int scanf(const char * restrict fmt, ...);
71extern int snprintf(char * restrict s,
72 size_t n, const char * restrict fmt, ...);
73extern int sprintf(char * restrict s, const char * restrict fmt, ...);
74extern int sscanf(const char * restrict s, const char * restrict fmt, ...);
75
76#ifdef _STDARG_H
77extern int vfprintf(FILE * restrict fp,
78 const char * restrict fmt, va_list arg);
79extern int vfscanf(FILE * restrict fp,
80 const char * restrict fmt, va_list arg);
81extern int vprintf(const char * restrict fmt, va_list arg);
82extern int vscanf(const char * restrict fmt, va_list arg);
83extern int vsnprintf(char * restrict s, size_t n, const char * restrict fmt,
84 va_list arg);
85extern int vsprintf(char * restrict s,
86 const char * restrict fmt, va_list arg);
87extern int vsscanf(const char * restrict s,
88 const char * restrict fmt, va_list arg);
89#endif
90
91extern int fgetc(FILE *fp);
92extern char *fgets(char * restrict s, int n, FILE * restrict fp);
93extern int fputc(int c, FILE *fp);
94extern int fputs(const char * restrict s, FILE * restrict fp);
95extern int getc(FILE *fp);
96extern int getchar(void);
97extern char *gets(char *s);
98extern int putc(int c, FILE *fp);
99extern int putchar(int c);
100extern int puts(const char *s);
101extern int ungetc(int c, FILE *fp);
102extern size_t fread(void * restrict ptr, size_t size, size_t nmemb,
103 FILE * restrict fp);
104extern size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb,
105 FILE * restrict fp);
106extern int fgetpos(FILE * restrict fp, fpos_t * restrict pos);
107extern int fseek(FILE *fp, long int offset, int whence);
108extern int fsetpos(FILE *fp, const fpos_t *pos);
109extern long int ftell(FILE *fp);
110extern void rewind(FILE *fp);
111extern void clearerr(FILE *fp);
112extern int feof(FILE *fp);
113extern int ferror(FILE *fp);
114extern void perror(const char *s);
115
116extern int __getc(FILE *fp);
117extern int __putc(int, FILE *fp);
118
119#ifdef __USE_MACROS
120#ifdef __UNIX_FILES
121#define getc(fp) ((fp)->rp >= (fp)->wp ? __getc(fp) : *(fp)->rp++)
122#define putc(c, fp) ((fp)->wp >= (fp)->rp ? __putc(c,fp) : (*(fp)->wp++ = c))
123#endif
124
125#define ferror(fp) ((fp)->flags & _IOERR)
126#define feof(fp) ((fp)->flags & _IOEOF)
127#define clearerr(fp) (void) ((fp)->flags &= ~(_IOERR|_IOEOF))
128#define getchar() getc(stdin)
129#define putchar(c) putc((c), stdout)
130#define setbuf(fp, b) (void) setvbuf(fp, b, b ? _IOFBF:_IONBF, BUFSIZ)
131#endif
132
133#endif