]> git.ozlabs.org Git - ccan/blobdiff - ccan/io/test/run-45-eof.c
io: don't leave errno as a random value when we hit EOF.
[ccan] / ccan / io / test / run-45-eof.c
diff --git a/ccan/io/test/run-45-eof.c b/ccan/io/test/run-45-eof.c
new file mode 100644 (file)
index 0000000..6a7f992
--- /dev/null
@@ -0,0 +1,45 @@
+#include <ccan/io/io.h>
+/* Include the C files directly. */
+#include <ccan/io/poll.c>
+#include <ccan/io/io.c>
+#include <ccan/tap/tap.h>
+#include <sys/wait.h>
+#include <stdio.h>
+
+static size_t len;
+
+static void finished_read(struct io_conn *conn, int *expect)
+{
+       ok1(errno == *expect);
+}
+
+static struct io_plan *init_conn_read(struct io_conn *conn, int *expect)
+{
+       io_set_finish(conn, finished_read, expect);
+       return io_read(conn, &expect, sizeof(expect), io_never, expect);
+}
+
+static struct io_plan *init_conn_read_partial(struct io_conn *conn, int *expect)
+{
+       io_set_finish(conn, finished_read, expect);
+       return io_read_partial(conn, &expect, sizeof(expect), &len,
+                              io_never, expect);
+}
+
+int main(void)
+{
+       int fd, expect_errno = 0;
+
+       /* This is how many tests you plan to run */
+       plan_tests(2);
+       fd = open("/dev/null", O_RDONLY);
+       io_new_conn(NULL, fd, init_conn_read, &expect_errno);
+
+       fd = open("/dev/null", O_RDONLY);
+       io_new_conn(NULL, fd, init_conn_read_partial, &expect_errno);
+
+       io_loop(NULL, NULL);
+
+       /* This exits depending on whether all tests passed */
+       return exit_status();
+}