]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix mq_receive, mq_send mq_timed* namespace (bug 18545).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 17 Jun 2015 20:19:04 +0000 (20:19 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 17 Jun 2015 20:19:04 +0000 (20:19 +0000)
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).

[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.

ChangeLog
NEWS
conform/Makefile
include/mqueue.h
rt/mq_timedreceive.c
rt/mq_timedsend.c
sysdeps/unix/sysv/linux/mq_receive.c
sysdeps/unix/sysv/linux/mq_send.c
sysdeps/unix/sysv/linux/syscalls.list

index 2ec139f1a465b4631bb7f2d0a8a8c78171468115..9e45c2eb3c1c9c442c87fcc4339c9ea301646d3d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
 2015-06-17  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.
+
        * sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Use
        hidden_def and hidden_weak instead of libc_hidden_def and
        libc_hidden_weak.
diff --git a/NEWS b/NEWS
index 59586d41df49f9a27b102e40c73df65244c26969..004d769b790f1de592da27830e65bb2299f56a53 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,7 @@ Version 2.22
   18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434,
   18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498,
   18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532,
-  18533, 18534, 18536, 18539, 18540, 18542, 18544.
+  18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
index 0b061037cd2ead0122cbaae813f9b42391800a0c..fa25aa810526a867cb07616fb9b2e5123ea23593 100644 (file)
@@ -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
index eb47b9b34e17605d6f163f07d972a21081c6892d..3c66f1711e3713516794a4636baa2c50c7e30f81 100644 (file)
@@ -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
index b6c1d2a5e128b6cdb2cc233ee6c448a74e4ddc64..c476c686968f17252c130fe8a9245b40ab848c69 100644 (file)
 /* 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)
index ce76e0fd41b8332b5aba231370ac71c3bdc866dc..30caaf13cb6225cf33ac6e859c66feeaf6d4ee3f 100644 (file)
 /* 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)
index 3c41ecf411dec12f18ecd28f2d593793faa91114..ff73d0a1381d0efba5d4a11d7219cfcf07f0a2ad 100644 (file)
@@ -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
index 4022cf1fee050f6e31c7bbccaabe4643c96e4e77..9013657aa0313edb0c5c1beb77a89a5f99e7b7cb 100644 (file)
@@ -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
index 09dd10d1ab6d5cd11bc6c0ac90d2bd933fc819f5..ed5d38f62271b3bcc7461ae45518267fc790e32c 100644 (file)
@@ -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