diff options
author | Ian Moffett <ian@osmora.org> | 2024-03-07 17:28:00 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-03-07 17:28:32 -0500 |
commit | bd5969fc876a10b18613302db7087ef3c40f18e1 (patch) | |
tree | 7c2b8619afe902abf99570df2873fbdf40a4d1a1 /lib/mlibc/tests/posix/fopencookie.c | |
parent | a95b38b1b92b172e6cc4e8e56a88a30cc65907b0 (diff) |
lib: Add mlibc
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'lib/mlibc/tests/posix/fopencookie.c')
-rw-r--r-- | lib/mlibc/tests/posix/fopencookie.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/mlibc/tests/posix/fopencookie.c b/lib/mlibc/tests/posix/fopencookie.c new file mode 100644 index 0000000..4325038 --- /dev/null +++ b/lib/mlibc/tests/posix/fopencookie.c @@ -0,0 +1,69 @@ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include <assert.h> +#include <stdbool.h> +#include <stdio.h> + +struct testcookie { + bool read; + bool write; + bool seek; + bool close; +}; + +ssize_t cookie_read(void *c, char *buf, size_t size) { + (void) buf; + struct testcookie *cookie = c; + cookie->read = true; + return size; +} + +ssize_t cookie_write(void *c, const char *buf, size_t size) { + (void) buf; + struct testcookie *cookie = c; + cookie->write = true; + return size; +} + +int cookie_seek(void *c, off64_t *offset, int whence) { + (void) offset; + (void) whence; + struct testcookie *cookie = c; + cookie->seek = true; + return 0; +} + +int cookie_close(void *c) { + struct testcookie *cookie = c; + cookie->close = true; + return 0; +} + +int main() { + struct testcookie cookie = { false, false, false, false }; + + cookie_io_functions_t funcs = { + .read = cookie_read, + .write = cookie_write, + .seek = cookie_seek, + .close = cookie_close, + }; + + FILE *stream = fopencookie(&cookie, "w+", funcs); + assert(stream); + + unsigned char buf[1]; + int ret = fread(buf, 1, 1, stream); + assert(ret == 1); + ret = fwrite(buf, 1, 1, stream); + assert(ret == 1); + ret = fseek(stream, 0, SEEK_SET); + assert(!ret); + + ret = fclose(stream); + assert(!ret); + + assert(cookie.read && cookie.write && cookie.seek && cookie.close); +} |