diff options
Diffstat (limited to 'winsup/testsuite/winsup.api/devzero.c')
-rw-r--r-- | winsup/testsuite/winsup.api/devzero.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/winsup/testsuite/winsup.api/devzero.c b/winsup/testsuite/winsup.api/devzero.c new file mode 100644 index 0000000..85a2615 --- /dev/null +++ b/winsup/testsuite/winsup.api/devzero.c @@ -0,0 +1,113 @@ +#include <stdio.h> +#include <unistd.h> +#include <sys/types.h> +#include <fcntl.h> +#include <sys/mman.h> + +main() +{ + int fd, r, w, l; + char buf[1024]; + char *v; + + fd = open("/dev/zero", O_RDONLY); + if (fd < 0) + { + fprintf(stderr, "Unable to open /dev/zero for reading\n"); + perror("The error was"); + exit(1); + } + + l = read(fd, buf, 1024); + if (l != 1024) + { + fprintf(stderr, "Asked to read 1024 bytes, got %d\n", l); + exit(1); + } + + for (r=0; r<1024; r++) + if (buf[r] != 0) + { + fprintf(stderr, "/dev/zero returned a byte of %02x at offset %d\n", + buf[r], r); + exit(1); + } + + l = lseek(fd, 4096, 0); + if (l != 0) + { + fprintf(stderr, "l == %d\n", l); + exit(1); + } + + l = close(fd); + if (l != 0) + { + fprintf(stderr, "close: returned %d\n", l); + perror("The error was"); + exit(1); + } + + fd = open("/dev/zero", O_WRONLY); + if (fd < 0) + { + fprintf(stderr, "Unable to open /dev/zero for writing\n"); + perror("The error was"); + exit(1); + } + + l = write(fd, buf, 1024); + if (l != 1024) + { + fprintf(stderr, "Asked to write 1024 bytes, got %d\n", l); + exit(1); + } + + l = close(fd); + if (l != 0) + { + fprintf(stderr, "close: returned %d\n", l); + perror("The error was"); + exit(1); + } + + fd = open("/dev/zero", O_RDWR); + v = (char *)mmap(0, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); + if (v == (char *)-1) + { + fprintf(stderr, "mmap r/w /dev/zero failed\n"); + perror("The error was"); + exit(1); + } + + for (r=0; r<65536; r++) + if (v[r] != 0) + { + fprintf(stderr, "mmap'd r/w /dev/zero has byte %d at offset %d\n", + v[r], r); + exit(1); + } + munmap(v, 65536); + close(fd); + + fd = open("/dev/zero", O_RDONLY); + v = (char *)mmap(0, 65536, PROT_READ, MAP_SHARED, fd, 0); + if (v == (char *)-1) + { + fprintf(stderr, "mmap /dev/zero r/o failed\n"); + perror("The error was"); + exit(1); + } + + for (r=0; r<65536; r++) + if (v[r] != 0) + { + fprintf(stderr, "mmap'd r/o /dev/zero has byte %d at offset %d\n", + v[r], r); + exit(1); + } + munmap(v, 65536); + close(fd); + + exit(0); +} |