This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Fix mq_receive, mq_send mq_timed* namespace (bug 18545)
- From: Joseph Myers <joseph at codesourcery dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Tue, 16 Jun 2015 17:02:14 +0000
- Subject: Fix mq_receive, mq_send mq_timed* namespace (bug 18545)
- Authentication-results: sourceware.org; auth=none
mq_receive calls mq_timedreceive, and mq_send calls mq_timedsend. But
mq_receive and mq_send were in POSIX by 1996, while mq_timed* were
added in the 2001 edition of POSIX. This patch fixes this by making
mq_timed* into weak aliases for __mq_timed* and calling the
__mq_timed* names.
Tested for x86_64 and x86 (testsuite, and that disassembly of
installed shared libraries is unchanged by the patch).
2015-06-16 Joseph Myers <joseph@codesourcery.com>
[BZ #18545]
* rt/mq_timedreceive.c (mq_timedreceive): Rename to
__mq_timedreceive and define as alias of __mq_timedreceive. Use
hidden_weak.
* rt/mq_timedsend.c (mq_timedsend): Rename to __mq_timedsend and
define as alias of __mq_timedsend. Use hidden_weak.
* sysdeps/unix/sysv/linux/syscalls.list (mq_timedsend): Use
__mq_timedsend as strong name.
(mq_timedreceive): Use __mq_timedreceive as strong name.
* include/mqueue.h (__mq_timedsend): Declare. Use hidden_proto.
(__mq_timedreceive): Likewise.
* sysdeps/unix/sysv/linux/mq_receive.c (mq_receive): Call
__mq_timedreceive instead of mq_timedreceive.
* sysdeps/unix/sysv/linux/mq_send.c (mq_send): Call __mq_timedsend
instead of mq_timedsend.
* conform/Makefile (test-xfail-UNIX98/mqueue.h/linknamespace):
Remove variable.
diff --git a/conform/Makefile b/conform/Makefile
index 0b06103..fa25aa8 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -347,4 +347,3 @@ test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes
test-xfail-XPG3/unistd.h/linknamespace = yes
test-xfail-XPG4/unistd.h/linknamespace = yes
test-xfail-POSIX/mqueue.h/linknamespace = yes
-test-xfail-UNIX98/mqueue.h/linknamespace = yes
diff --git a/include/mqueue.h b/include/mqueue.h
index eb47b9b..3c66f17 100644
--- a/include/mqueue.h
+++ b/include/mqueue.h
@@ -3,7 +3,11 @@
#ifndef _ISOMAC
# if IS_IN (librt)
hidden_proto (mq_timedsend)
+extern __typeof (mq_timedsend) __mq_timedsend __nonnull ((2, 5));
+hidden_proto (__mq_timedsend)
hidden_proto (mq_timedreceive)
+extern __typeof (mq_timedreceive) __mq_timedreceive __nonnull ((2, 5));
+hidden_proto (__mq_timedreceive)
hidden_proto (mq_setattr)
# endif
#endif
diff --git a/rt/mq_timedreceive.c b/rt/mq_timedreceive.c
index b6c1d2a..c476c68 100644
--- a/rt/mq_timedreceive.c
+++ b/rt/mq_timedreceive.c
@@ -21,12 +21,14 @@
/* Receive the oldest from highest priority messages in message queue
MQDES, stop waiting if ABS_TIMEOUT expires. */
ssize_t
-mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
+__mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
unsigned int *__restrict msg_prio,
const struct timespec *__restrict abs_timeout)
{
__set_errno (ENOSYS);
return -1;
}
-hidden_def (mq_timedreceive)
+hidden_def (__mq_timedreceive)
+weak_alias (__mq_timedreceive, mq_timedreceive)
+hidden_weak (mq_timedreceive)
stub_warning (mq_timedreceive)
diff --git a/rt/mq_timedsend.c b/rt/mq_timedsend.c
index ce76e0f..30caaf1 100644
--- a/rt/mq_timedsend.c
+++ b/rt/mq_timedsend.c
@@ -21,11 +21,13 @@
/* Add message pointed by MSG_PTR to message queue MQDES, stop blocking
on full message queue if ABS_TIMEOUT expires. */
int
-mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
+__mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
unsigned int msg_prio, const struct timespec *abs_timeout)
{
__set_errno (ENOSYS);
return -1;
}
-hidden_def (mq_timedsend)
+hidden_def (__mq_timedsend)
+weak_alias (__mq_timedsend, mq_timedsend)
+hidden_weak (mq_timedsend)
stub_warning (mq_timedsend)
diff --git a/sysdeps/unix/sysv/linux/mq_receive.c b/sysdeps/unix/sysv/linux/mq_receive.c
index 3c41ecf..ff73d0a 100644
--- a/sysdeps/unix/sysv/linux/mq_receive.c
+++ b/sysdeps/unix/sysv/linux/mq_receive.c
@@ -28,7 +28,7 @@ ssize_t
mq_receive (mqd_t mqdes, char *msg_ptr, size_t msg_len,
unsigned int *msg_prio)
{
- return mq_timedreceive (mqdes, msg_ptr, msg_len, msg_prio, NULL);
+ return __mq_timedreceive (mqdes, msg_ptr, msg_len, msg_prio, NULL);
}
#else
diff --git a/sysdeps/unix/sysv/linux/mq_send.c b/sysdeps/unix/sysv/linux/mq_send.c
index 4022cf1..9013657 100644
--- a/sysdeps/unix/sysv/linux/mq_send.c
+++ b/sysdeps/unix/sysv/linux/mq_send.c
@@ -27,7 +27,7 @@ int
mq_send (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
unsigned int msg_prio)
{
- return mq_timedsend (mqdes, msg_ptr, msg_len, msg_prio, NULL);
+ return __mq_timedsend (mqdes, msg_ptr, msg_len, msg_prio, NULL);
}
#else
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 09dd10d..ed5d38f 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -106,8 +106,8 @@ removexattr - removexattr i:ss removexattr
lremovexattr - lremovexattr i:ss lremovexattr
fremovexattr - fremovexattr i:is fremovexattr
-mq_timedsend - mq_timedsend Ci:ipiip mq_timedsend
-mq_timedreceive - mq_timedreceive Ci:ipipp mq_timedreceive
+mq_timedsend - mq_timedsend Ci:ipiip __mq_timedsend mq_timedsend
+mq_timedreceive - mq_timedreceive Ci:ipipp __mq_timedreceive mq_timedreceive
mq_setattr - mq_getsetattr i:ipp mq_setattr
timerfd_create EXTRA timerfd_create i:ii timerfd_create
--
Joseph S. Myers
joseph@codesourcery.com