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/>. */
23 #include <support/check.h>
24 #include <support/support.h>
25 #include <support/temp_file.h>
28 static char name
[sizeof "/tst-mqueue10-" + INT_BUFSIZE_BOUND (pid_t
)];
35 #define CLEANUP_HANDLER do_cleanup
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
);
72 #include <support/test-driver.c>