tests: extend test coverage of mincore syscall
* tests/mincore.c (print_mincore): New function.
(test_mincore): Use it. Check mincore with invalid vec address.
Check mincore with length argument not a multiple of the page size.
(main): Check with DEFAULT_STRLEN pages.
diff --git a/tests/mincore.c b/tests/mincore.c
index d9cbbd4..ff2922a 100644
--- a/tests/mincore.c
+++ b/tests/mincore.c
@@ -32,15 +32,14 @@
#define DEFAULT_STRLEN 32
static void
-test_mincore(const unsigned int pages)
+print_mincore(const unsigned int pages, void *const addr,
+ const size_t size, unsigned char *const vec)
{
- const size_t size = pages * get_page_size();
- char *addr = tail_alloc(size);
- unsigned char *vec = tail_alloc(pages);
unsigned int i;
if (mincore(addr, size, vec))
perror_msg_and_skip("mincore");
+
printf("mincore(%p, %zu, [", addr, size);
for (i = 0; i < pages; ++i) {
if (i >= DEFAULT_STRLEN) {
@@ -52,10 +51,28 @@
puts("]) = 0");
}
+static void
+test_mincore(const unsigned int pages)
+{
+ const size_t page_size = get_page_size();
+ const size_t size = pages * page_size;
+ void *const addr = tail_alloc(size);
+ unsigned char *const vec = tail_alloc(pages);
+
+ mincore(addr, size, NULL);
+ printf("mincore(%p, %zu, NULL) = -1 %s (%m)\n",
+ addr, size, errno2name());
+
+ print_mincore(pages, addr, size, vec);
+ if (size)
+ print_mincore(pages, addr, size - page_size + 1, vec);
+}
+
int main(void)
{
test_mincore(1);
test_mincore(2);
+ test_mincore(DEFAULT_STRLEN);
test_mincore(DEFAULT_STRLEN + 1);
puts("+++ exited with 0 +++");