#include #include #include #include #include #include #include #include static void _ft_unistd_simple_write_switch(ft_test *t) { int fd, rc; errno = 0; DO_E(fd, open("ft_write.txt", O_WRONLY | O_CREAT), t, "%d"); ft_assert(t, fd >= 0); if(fd >= 0) { DO_E(rc, write(fd, "write\n", 6), t, "%d"); ft_assert(t, rc == 6); DO_E(rc, write(fd, "line #2\n", 8), t, "%d"); ft_assert(t, rc == 8); DO_E(rc, write(fd, "line #3\n", 8), t, "%d"); ft_assert(t, rc == 8); } close(fd); } static void _ft_unistd_simple_write(ft_test *t) { gint_world_switch(GINT_CALL(_ft_unistd_simple_write_switch,(void *)t)); } ft_test ft_unistd_simple_write = { .name = "Write simple file", .function = _ft_unistd_simple_write, }; static void _ft_unistd_write_odd_switch_1(ft_test *t) { int fd, rc; errno = 0; DO_E(fd, open("ft_odd1.txt", O_WRONLY | O_CREAT), t, "%d"); ft_assert(t, fd >= 0); if(fd >= 0) { DO_E(rc, write(fd, "write odd byte count\n", 21), t, "%d"); ft_assert(t, rc == 21); DO_E(rc, write(fd, "again, cancelling it\n", 21), t, "%d"); ft_assert(t, rc == 21); } close(fd); } static void _ft_unistd_write_odd_switch_2(ft_test *t) { int fd, rc; errno = 0; DO_E(fd, open("ft_odd2.txt", O_WRONLY | O_CREAT), t, "%d"); ft_assert(t, fd >= 0); if(fd >= 0) { DO_E(rc, write(fd, "write odd byte count\n", 21), t, "%d"); ft_assert(t, rc == 21); DO_E(rc, write(fd, "then even, keeping it\n", 22), t, "%d"); ft_assert(t, rc == 22); } close(fd); } static void _ft_unistd_write_odd(ft_test *t) { gint_world_switch(GINT_CALL(_ft_unistd_write_odd_switch_1, (void *)t)); gint_world_switch(GINT_CALL(_ft_unistd_write_odd_switch_2, (void *)t)); } ft_test ft_unistd_write_odd = { .name = "Odd-length writes", .function = _ft_unistd_write_odd, };