LexLeo 0.0.0-dev+f8e5087-dirty
Technical documentation
Loading...
Searching...
No Matches
osal_stdio.c
Go to the documentation of this file.
1// osal_stdio.c
2
4
7
12
13static struct OSAL_STDIO g_stdin = { .fp = NULL };
14static struct OSAL_STDIO g_stdout = { .fp = NULL };
15static struct OSAL_STDIO g_stderr = { .fp = NULL };
16
18{
19 if (!g_stdin.fp) g_stdin.fp = stdin;
20 return &g_stdin;
21}
22
24{
25 if (!g_stdout.fp) g_stdout.fp = stdout;
26 return &g_stdout;
27}
28
30{
31 if (!g_stderr.fp) g_stderr.fp = stderr;
32 return &g_stderr;
33}
34
35static size_t osal_stdio_read(
36 void *ptr,
37 size_t size,
38 size_t nmemb,
39 OSAL_STDIO *stdio)
40{
41 LEXLEO_ASSERT(stdio);
42 return fread(ptr, size, nmemb, stdio->fp);
43}
44
46 const void *ptr,
47 size_t size,
48 size_t nmemb,
49 OSAL_STDIO *stdio)
50{
51 LEXLEO_ASSERT(stdio);
52 return fwrite(ptr, size, nmemb, stdio->fp);
53}
54
56{
57 LEXLEO_ASSERT(stdio);
58 return fflush(stdio->fp);
59}
60
61static int osal_stdio_error(OSAL_STDIO *stdio)
62{
63 LEXLEO_ASSERT(stdio);
64 return ferror(stdio->fp);
65}
66
67static int osal_stdio_eof(OSAL_STDIO *stdio)
68{
69 LEXLEO_ASSERT(stdio);
70 return feof(stdio->fp);
71}
72
74{
75 LEXLEO_ASSERT(stdio);
76 clearerr(stdio->fp);
77}
78
80{
81 static const osal_stdio_ops_t OPS = {
83 .stdout = osal_stdio_stdout,
84 .stderr = osal_stdio_stderr,
85 .read = osal_stdio_read,
86 .write = osal_stdio_write,
87 .flush = osal_stdio_flush,
88 .error = osal_stdio_error,
89 .eof = osal_stdio_eof,
90 .clearerr = osal_stdio_clearerr,
91 };
92 return &OPS;
93}
94
96 char *buf,
97 size_t size,
98 const char *fmt,
99 ...)
100{
101 int ret;
102 va_list ap;
103
104 va_start(ap, fmt);
105 ret = vsnprintf(buf, size, fmt, ap);
106 va_end(ap);
107
108 return ret;
109}
#define LEXLEO_ASSERT(expr)
int osal_snprintf(char *buf, size_t size, const char *fmt,...)
Definition osal_stdio.c:95
const osal_stdio_ops_t * osal_stdio_default_ops(void)
Definition osal_stdio.c:79
int osal_stdio_flush(OSAL_STDIO *stdio)
Definition osal_stdio.c:55
static struct OSAL_STDIO g_stderr
Definition osal_stdio.c:15
size_t osal_stdio_write(const void *ptr, size_t size, size_t nmemb, OSAL_STDIO *stdio)
Definition osal_stdio.c:45
static void osal_stdio_clearerr(OSAL_STDIO *stdio)
Definition osal_stdio.c:73
static struct OSAL_STDIO g_stdout
Definition osal_stdio.c:14
static int osal_stdio_error(OSAL_STDIO *stdio)
Definition osal_stdio.c:61
static OSAL_STDIO * osal_stdio_stdin(void)
Definition osal_stdio.c:17
OSAL_STDIO * osal_stdio_stdout(void)
Definition osal_stdio.c:23
static int osal_stdio_eof(OSAL_STDIO *stdio)
Definition osal_stdio.c:67
OSAL_STDIO * osal_stdio_stderr(void)
Definition osal_stdio.c:29
static size_t osal_stdio_read(void *ptr, size_t size, size_t nmemb, OSAL_STDIO *stdio)
Definition osal_stdio.c:35
static struct OSAL_STDIO g_stdin
Definition osal_stdio.c:13
OSAL_STDIO *(* stdin)(void)