#include /* Include the C files directly. */ #include #include #include #include #include #include int main(void) { struct rbuf in; char buf[4096]; char *lines[100], *p; int i, fd = open("test/run.c", O_RDONLY), len; /* This is how many tests you plan to run */ plan_tests(144); /* Grab ourselves for comparison. */ len = read(fd, buf, sizeof(buf)); buf[len] = '\0'; lseek(fd, SEEK_SET, 0); for (i = 0, p = buf; *p; i++) { lines[i] = p; p = strchr(p, '\n'); *p = '\0'; p++; } lines[i] = NULL; rbuf_init(&in, fd, malloc(31), 31); ok1(in.fd == fd); ok1(in.buf_end - in.buf == 31); p = rbuf_read_str(&in, '\n', NULL); ok1(p); ok1(strcmp(p, lines[0]) == 0); p = rbuf_read_str(&in, '\n', realloc); ok1(p); ok1(strcmp(p, lines[1]) == 0); for (i = 2; lines[i]; i++) { ok1(p = rbuf_read_str(&in, '\n', realloc)); ok1(strcmp(p, lines[i]) == 0); } p = rbuf_read_str(&in, '\n', realloc); ok1(errno == 0); ok1(p == NULL); free(in.buf); /* Another way of reading the entire (text) file. */ lseek(fd, SEEK_SET, 0); rbuf_init(&in, fd, NULL, 0); p = rbuf_read_str(&in, 0, realloc); ok1(p); ok1(strlen(p) == len); close(fd); p = rbuf_read_str(&in, 0, realloc); ok1(errno == EBADF); ok1(!p); free(in.buf); return exit_status(); }