Explorar el Código

- disentangle REALTIME from ADVANCED_REALTIME (Peter S. Mazinger)

Bernhard Reutner-Fischer hace 17 años
padre
commit
c0adda8b79
Se han modificado 3 ficheros con 46 adiciones y 31 borrados
  1. 0 2
      extra/Configs/Config.in
  2. 23 15
      librt/mq_receive.c
  3. 23 14
      librt/mq_send.c

+ 0 - 2
extra/Configs/Config.in

@@ -802,8 +802,6 @@ config UCLIBC_SV4_DEPRECATED
 config UCLIBC_HAS_REALTIME
 config UCLIBC_HAS_REALTIME
 	bool "Realtime-related family of SUSv functions"
 	bool "Realtime-related family of SUSv functions"
 	default y
 	default y
-	# glitch in mq_{send,receive} currently forces this on
-	select UCLIBC_HAS_ADVANCED_REALTIME
 	help
 	help
 	  These functions are part of the Timers option and need not
 	  These functions are part of the Timers option and need not
 	  be available on all implementations.
 	  be available on all implementations.

+ 23 - 15
librt/mq_receive.c

@@ -6,16 +6,13 @@
 #include <stddef.h>
 #include <stddef.h>
 #include <sys/syscall.h>
 #include <sys/syscall.h>
 #include <mqueue.h>
 #include <mqueue.h>
-#warning FIXME: hard dependency on ADVANCED REALTIME feature
 
 
-librt_hidden_proto(mq_timedreceive)
 #ifdef __NR_mq_timedreceive
 #ifdef __NR_mq_timedreceive
 #define __NR___syscall_mq_timedreceive __NR_mq_timedreceive
 #define __NR___syscall_mq_timedreceive __NR_mq_timedreceive
-static __inline__ _syscall5(int, __syscall_mq_timedreceive, int, mqdes,
-			char *, msg_ptr, size_t, msg_len, unsigned int *,
-			msg_prio, const void *, abs_timeout);
-#endif
-
+static _syscall5(int, __syscall_mq_timedreceive, int, mqdes,
+		 char *, msg_ptr, size_t, msg_len, unsigned int *,
+		 msg_prio, const void *, abs_timeout)
+# if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
 /*
 /*
  * Receive the oldest from highest priority messages.
  * Receive the oldest from highest priority messages.
  * Stop waiting if abs_timeout expires.
  * Stop waiting if abs_timeout expires.
@@ -24,20 +21,31 @@ ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len,
 			unsigned int *msg_prio,
 			unsigned int *msg_prio,
 			const struct timespec *abs_timeout)
 			const struct timespec *abs_timeout)
 {
 {
-#ifdef __NR_mq_timedreceive
 	return __syscall_mq_timedreceive(mqdes, msg_ptr, msg_len, msg_prio,
 	return __syscall_mq_timedreceive(mqdes, msg_ptr, msg_len, msg_prio,
 					 abs_timeout);
 					 abs_timeout);
-#else
-	errno = ENOSYS;
-	return -1;
-#endif
 }
 }
-
-librt_hidden_def(mq_timedreceive)
+# endif
 
 
 /* Receive the oldest from highest priority messages */
 /* Receive the oldest from highest priority messages */
 ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len,
 ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len,
 		   unsigned int *msg_prio)
 		   unsigned int *msg_prio)
 {
 {
-	return mq_timedreceive(mqdes, msg_ptr, msg_len, msg_prio, NULL);
+	return __syscall_mq_timedreceive(mqdes, msg_ptr, msg_len, msg_prio, NULL);
 }
 }
+#elif defined __UCLIBC_HAS_STUBS__
+# if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
+ssize_t mq_timedreceive(mqd_t mqdes attribute_unused, char *msg_ptr attribute_unused,
+			size_t msg_len attribute_unused, unsigned int *msg_prio attribute_unused,
+			const struct timespec *abs_timeout attribute_unused)
+{
+	__set_errno(ENOSYS);
+	return -1;
+}
+# endif
+ssize_t mq_receive(mqd_t mqdes attribute_unused, char *msg_ptr attribute_unused,
+		   size_t msg_len attribute_unused, unsigned int *msg_prio attribute_unused)
+{
+	__set_errno(ENOSYS);
+	return -1;
+}
+#endif

+ 23 - 14
librt/mq_send.c

@@ -6,16 +6,14 @@
 #include <stddef.h>
 #include <stddef.h>
 #include <sys/syscall.h>
 #include <sys/syscall.h>
 #include <mqueue.h>
 #include <mqueue.h>
-#warning FIXME: hard dependency on ADVANCED REALTIME feature
 
 
-librt_hidden_proto(mq_timedsend)
 #ifdef __NR_mq_timedsend
 #ifdef __NR_mq_timedsend
 #define __NR___syscall_mq_timedsend __NR_mq_timedsend
 #define __NR___syscall_mq_timedsend __NR_mq_timedsend
-static __inline__ _syscall5(int, __syscall_mq_timedsend, int, mqdes,
-			const char *, msg_ptr, size_t, msg_len, unsigned int,
-			msg_prio, const void *, abs_timeout);
-#endif
+static _syscall5(int, __syscall_mq_timedsend, int, mqdes,
+		 const char *, msg_ptr, size_t, msg_len, unsigned int,
+		 msg_prio, const void *, abs_timeout);
 
 
+# if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
 /*
 /*
  * Add a message to queue. If O_NONBLOCK is set and queue is full, wait
  * Add a message to queue. If O_NONBLOCK is set and queue is full, wait
  * for sufficient room in the queue until abs_timeout expires.
  * for sufficient room in the queue until abs_timeout expires.
@@ -23,20 +21,31 @@ static __inline__ _syscall5(int, __syscall_mq_timedsend, int, mqdes,
 int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
 int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
 		 unsigned int msg_prio, const struct timespec *abs_timeout)
 		 unsigned int msg_prio, const struct timespec *abs_timeout)
 {
 {
-#ifdef __NR_mq_timedsend
 	return __syscall_mq_timedsend(mqdes, msg_ptr, msg_len, msg_prio,
 	return __syscall_mq_timedsend(mqdes, msg_ptr, msg_len, msg_prio,
 				      abs_timeout);
 				      abs_timeout);
-#else
-	errno = ENOSYS;
-	return -1;
-#endif
 }
 }
-
-librt_hidden_def(mq_timedsend)
+# endif
 
 
 /* Add a message to queue */
 /* Add a message to queue */
 int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
 int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
 	    unsigned int msg_prio)
 	    unsigned int msg_prio)
 {
 {
-	return mq_timedsend(mqdes, msg_ptr, msg_len, msg_prio, NULL);
+	return __syscall_mq_timedsend(mqdes, msg_ptr, msg_len, msg_prio, NULL);
+}
+#elif defined __UCLIBC_HAS_STUBS__
+# if defined __USE_XOPEN2K && defined __UCLIBC_HAS_ADVANCED_REALTIME__
+int mq_timedsend(mqd_t mqdes attribute_unused, const char *msg_ptr attribute_unused,
+		 size_t msg_len attribute_unused, unsigned int msg_prio attribute_unused,
+		 const struct timespec *abs_timeout attribute_unused)
+{
+	__set_errno(ENOSYS);
+	return -1;
+}
+# endif
+int mq_send(mqd_t mqdes attribute_unused, const char *msg_ptr attribute_unused,
+	    size_t msg_len attribute_unused, unsigned int msg_prio attribute_unused)
+{
+	__set_errno(ENOSYS);
+	return -1;
 }
 }
+#endif