riscv: Build with -mno-relax if linker does not support R_RISCV_ALIGN
[glibc.git] / rt / tst-mqueue10.c
blob0bf64d7957498f040cb05a3311122cf3a63f7c57
1 /* Check for large timeout with mq_timedsend and mq_timedreceive.
2 Copyright (C) 2021 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
19 #include <errno.h>
20 #include <intprops.h>
21 #include <mqueue.h>
22 #include <stdio.h>
23 #include <support/check.h>
24 #include <support/support.h>
25 #include <support/temp_file.h>
26 #include <unistd.h>
28 static char name[sizeof "/tst-mqueue10-" + INT_BUFSIZE_BOUND (pid_t)];
30 static void
31 do_cleanup (void)
33 mq_unlink (name);
35 #define CLEANUP_HANDLER do_cleanup
37 static int
38 do_test (void)
40 snprintf (name, sizeof (name), "/tst-mqueue10-%u", getpid ());
42 char msg[8] = { 0x55 };
44 struct mq_attr attr = { .mq_maxmsg = 1, .mq_msgsize = sizeof (msg) };
45 mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
46 TEST_VERIFY_EXIT (q != (mqd_t) -1);
48 struct timespec ts = { TYPE_MAXIMUM (time_t), 0 };
51 timer_t timer = support_create_timer (0, 100000000, false, NULL);
52 TEST_COMPARE (mq_timedreceive (q, msg, sizeof (msg), NULL, &ts), -1);
53 TEST_VERIFY (errno == EINTR || errno == EOVERFLOW);
54 support_delete_timer (timer);
58 timer_t timer = support_create_timer (0, 100000000, false, NULL);
59 /* Fill the internal buffer first. */
60 TEST_COMPARE (mq_timedsend (q, msg, sizeof (msg), 0,
61 &(struct timespec) { 0, 0 }), 0);
62 TEST_COMPARE (mq_timedsend (q, msg, sizeof (msg), 0, &ts), -1);
63 TEST_VERIFY (errno == EINTR || errno == EOVERFLOW);
64 support_delete_timer (timer);
67 mq_unlink (name);
69 return 0;
72 #include <support/test-driver.c>