diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2016-06-28 21:30:42 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2016-06-28 21:30:42 +0000 |
commit | d937202a3b23e6908c2109d5a96da237ee9cbba8 (patch) | |
tree | d22e7c16bf737670ad0d31ebe566d04a489ff9c6 | |
parent | 0380bb5f26d3df1d6d2933da1c8ced11fe0ef38f (diff) | |
parent | c1eb02e560462434f96139e6d9d3398112ac8203 (diff) | |
download | extras-d937202a3b23e6908c2109d5a96da237ee9cbba8.tar.gz |
Merge "pagingtest: fix large read errors"
-rw-r--r-- | tests/pagingtest/pagingtest.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/tests/pagingtest/pagingtest.c b/tests/pagingtest/pagingtest.c index 17a4ad4c..158d8a36 100644 --- a/tests/pagingtest/pagingtest.c +++ b/tests/pagingtest/pagingtest.c @@ -4,6 +4,7 @@ #include <fcntl.h> #include <stdbool.h> #include <stdio.h> +#include <stdint.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> @@ -17,6 +18,8 @@ int create_tmp_file(char *filename, off_t size) { void *buf; + uint8_t *tmp_buf; + off_t tmp_size; ssize_t rc; int fd; int urandom; @@ -49,17 +52,19 @@ int create_tmp_file(char *filename, off_t size) { goto err_mmap; } - rc = read(urandom, buf, size); + tmp_buf = buf; + tmp_size = size; + do { + rc = read(urandom, tmp_buf, tmp_size); - if (rc < 0) { - fprintf(stderr, "write random data failed: %s\n", strerror(errno)); - goto err; - } + if (rc < 0) { + fprintf(stderr, "write random data failed: %s\n", strerror(errno)); + goto err; + } - if (rc != size) { - fprintf(stderr, "write random data incomplete: received %zd, expected %jd\n", rc, (intmax_t)size); - goto err; - } + tmp_buf += rc; + tmp_size -= rc; + } while (tmp_size > 0); if (madvise(buf, size, MADV_DONTNEED)) { fprintf(stderr, "madvise DONTNEED failed: %s\n", strerror(errno)); |