aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--misc/tst-preadvwritev2-common.c48
-rw-r--r--misc/tst-preadvwritev2.c3
-rw-r--r--misc/tst-preadvwritev64v2.c3
4 files changed, 60 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7371bcbd83..3c9d6ba461 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2017-06-21 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ * misc/tst-preadvwritev2-common.c: New file.
+ * misc/tst-preadvwritev2.c (do_test): Add test for invalid flag.
+ * misc/tst-preadvwritev64v2.c (do_test): Likewise.
+
2017-06-21 Szabolcs Nagy <szabolcs.nagy@arm.com>
* sysdeps/aarch64/dl-machine.h (RTLD_START_1): Change _dl_argv to the
diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c
new file mode 100644
index 0000000000..4c53d567b5
--- /dev/null
+++ b/misc/tst-preadvwritev2-common.c
@@ -0,0 +1,48 @@
+/* Common function for preadv2 and pwritev2 tests.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <support/check.h>
+
+static void
+do_test_with_invalid_flags (void)
+{
+ int invalid_flag = 0x1;
+#ifdef RWF_HIPRI
+ invalid_flag <<= 1;
+#endif
+#ifdef RWF_DSYNC
+ invalid_flag <<= 1;
+#endif
+#ifdef RWF_SYNC
+ invalid_flag <<= 1;
+#endif
+
+ char buf[32];
+ const struct iovec vec = { .iov_base = buf, .iov_len = sizeof (buf) };
+ if (preadv2 (temp_fd, &vec, 1, 0, invalid_flag) != -1)
+ FAIL_EXIT1 ("preadv2 did not fail with an invalid flag");
+ if (errno != ENOTSUP)
+ FAIL_EXIT1 ("preadv2 failure did not set errno to ENOTSUP (%d)", errno);
+
+ /* This might fail for compat syscall (32 bits running on 64 bits kernel)
+ due a kernel issue. */
+ if (pwritev2 (temp_fd, &vec, 1, 0, invalid_flag) != -1)
+ FAIL_EXIT1 ("pwritev2 did not fail with an invalid flag");
+ if (errno != ENOTSUP)
+ FAIL_EXIT1 ("pwritev2 failure did not set errno to ENOTSUP (%d)", errno);
+}
diff --git a/misc/tst-preadvwritev2.c b/misc/tst-preadvwritev2.c
index cf36272dd3..682c7579da 100644
--- a/misc/tst-preadvwritev2.c
+++ b/misc/tst-preadvwritev2.c
@@ -23,9 +23,12 @@
pwritev2 (__fd, __iov, __iovcnt, __offset, 0)
#include "tst-preadvwritev-common.c"
+#include "tst-preadvwritev2-common.c"
static int
do_test (void)
{
+ do_test_with_invalid_flags ();
+
return do_test_with_offset (0);
}
diff --git a/misc/tst-preadvwritev64v2.c b/misc/tst-preadvwritev64v2.c
index 8d0c48ea78..9ddc7625f0 100644
--- a/misc/tst-preadvwritev64v2.c
+++ b/misc/tst-preadvwritev64v2.c
@@ -25,9 +25,12 @@
pwritev2 (__fd, __iov, __iovcnt, __offset, 0)
#include "tst-preadvwritev-common.c"
+#include "tst-preadvwritev2-common.c"
static int
do_test (void)
{
+ do_test_with_invalid_flags ();
+
return do_test_with_offset (0);
}