xref: /relibc/src/c/stdio.c (revision ed19381547d66b76981ea1e4ff942c5a4da45ab7)
1 #include <stdarg.h>
2 #include <stddef.h>
3 
4 typedef struct FILE FILE;
5 
6 // TODO: Can be implemented in rust when cbindgen supports "..." syntax
7 
8 int vasprintf(char ** strp, const char * fmt, va_list ap);
9 
10 int asprintf(char ** strp, const char * fmt, ...) {
11     int ret;
12     va_list ap;
13     va_start(ap, fmt);
14     ret = vasprintf(strp, fmt, ap);
15     va_end(ap);
16     return ret;
17 }
18 
19 int vfprintf(FILE * stream, const char * fmt, va_list ap);
20 
21 int fprintf(FILE * stream, const char * fmt, ...) {
22     int ret;
23     va_list ap;
24     va_start(ap, fmt);
25     ret = vfprintf(stream, fmt, ap);
26     va_end(ap);
27     return ret;
28 }
29 
30 int vprintf(const char * fmt, va_list ap);
31 
32 int printf(const char * fmt, ...) {
33     int ret;
34     va_list ap;
35     va_start(ap, fmt);
36     ret = vprintf(fmt, ap);
37     va_end(ap);
38     return ret;
39 }
40 
41 int vsnprintf(char * s, size_t n, const char * fmt, va_list ap);
42 
43 int snprintf(char * s, size_t n, const char * fmt, ...) {
44     int ret;
45     va_list ap;
46     va_start(ap, fmt);
47     ret = vsnprintf(s, n, fmt, ap);
48     va_end(ap);
49     return ret;
50 }
51 
52 int vsprintf(char * s, const char * fmt, va_list ap);
53 
54 int sprintf(char *s, const char * fmt, ...) {
55     int ret;
56     va_list ap;
57     va_start(ap, fmt);
58     ret = vsprintf(s, fmt, ap);
59     va_end(ap);
60     return ret;
61 }
62 
63 int vfscanf(FILE * stream, const char * fmt, va_list ap);
64 
65 int fscanf(FILE * stream, const char * fmt, ...) {
66     int ret;
67     va_list ap;
68     va_start(ap, fmt);
69     ret = vfscanf(stream, fmt, ap);
70     va_end(ap);
71     return ret;
72 }
73 
74 int vscanf(const char * fmt, va_list ap);
75 
76 int scanf(const char * fmt, ...) {
77     int ret;
78     va_list ap;
79     va_start(ap, fmt);
80     ret = vscanf(fmt, ap);
81     va_end(ap);
82     return ret;
83 }
84 
85 int vsscanf(const char * input, const char * fmt, va_list ap);
86 
87 int sscanf(const char * input, const char * fmt, ...) {
88     int ret;
89     va_list ap;
90     va_start(ap, fmt);
91     ret = vsscanf(input, fmt, ap);
92     va_end(ap);
93     return ret;
94 }
95