FxLibcTest/src/stdio/files.c

72 lines
1.7 KiB
C

#include <ft/test.h>
#include <ft/all-tests.h>
#include <ft/util.h>
#include <gint/gint.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include "util.h"
static void _stdio_open_switch(ft_test *t)
{
int fd, rc;
FILE *fp;
/* Create a basic file */
DO_E(fd, creat("ft_stdio.txt", 0755), t, "%d");
ft_assert(t, fd >= 0);
DO_E(rc, write(fd, "Hello, stdio!\n", 14), t, "%d");
ft_assert(t, rc == 14);
DO_E(rc, close(fd), t, "%d");
ft_assert(t, rc == 0);
/* Try to open it with <stdio.h> */
DO_E(fp, fopen("ft_stdio.txt", "r"), t, "%p");
ft_assert(t, fp != NULL);
ft_log_FILE(t, "", fp);
/* Change buffer settings a couple times */
DO_E(rc, setvbuf(fp, NULL, _IONBF, 0), t, "%d");
ft_assert(t, rc == 0);
ft_log_FILE(t, "", fp);
DO_E(rc, setvbuf(fp, NULL, _IOLBF, 1024), t, "%d");
ft_assert(t, rc == 0);
ft_log_FILE(t, "", fp);
DO_E(rc, setvbuf(fp, NULL, _IOFBF, BUFSIZ), t, "%d");
ft_assert(t, rc == 0);
ft_log_FILE(t, "", fp);
/* Reopen with different permissions */
DO_E(fp, freopen("ft_stdio.txt", "w+", fp), t, "%p");
ft_assert(t, fp != NULL);
ft_log_FILE(t, "", fp);
DO_E(fp, freopen("ft_stdio.txt", "rb+", fp), t, "%p");
ft_assert(t, fp != NULL);
ft_log_FILE(t, "", fp);
DO_E(fp, freopen("ft_stdio.txt", "ab", fp), t, "%p");
ft_assert(t, fp != NULL);
ft_log_FILE(t, "", fp);
DO_E(fp, freopen("ft_stdio.txt", "w", fp), t, "%p");
ft_assert(t, fp != NULL);
ft_log_FILE(t, "", fp);
DO_E(rc, fclose(fp), t, "%d");
ft_assert(t, rc == 0);
}
static void _stdio_open(ft_test *t)
{
gint_world_switch(GINT_CALL(_stdio_open_switch, (void *)t));
}
ft_test ft_stdio_open = {
.name = "Opening files",
.function = _stdio_open,
};