浏览代码

[posix]修复消息队列返回长度异常 (#8014)

zhkag 1 年之前
父节点
当前提交
0b9a808cca
共有 4 个文件被更改,包括 15 次插入15 次删除
  1. 2 2
      components/libc/posix/ipc/mqueue.c
  2. 1 1
      examples/utest/testcases/kernel/messagequeue_tc.c
  3. 6 6
      include/rtthread.h
  4. 6 6
      src/ipc.c

+ 2 - 2
components/libc/posix/ipc/mqueue.c

@@ -130,7 +130,7 @@ ssize_t mq_receive(mqd_t id, char *msg_ptr, size_t msg_len, unsigned *msg_prio)
 
 
     result = rt_mq_recv_prio(mq, msg_ptr, msg_len, (rt_int32_t *)msg_prio, RT_WAITING_FOREVER, RT_UNINTERRUPTIBLE);
     result = rt_mq_recv_prio(mq, msg_ptr, msg_len, (rt_int32_t *)msg_prio, RT_WAITING_FOREVER, RT_UNINTERRUPTIBLE);
     if (result >= 0)
     if (result >= 0)
-        return rt_strlen(msg_ptr);
+        return result;
 
 
     rt_set_errno(EBADF);
     rt_set_errno(EBADF);
     return -1;
     return -1;
@@ -186,7 +186,7 @@ ssize_t mq_timedreceive(mqd_t                  id,
     result = rt_mq_recv_prio(mq, msg_ptr, msg_len, (rt_int32_t *)msg_prio, tick, RT_UNINTERRUPTIBLE);
     result = rt_mq_recv_prio(mq, msg_ptr, msg_len, (rt_int32_t *)msg_prio, tick, RT_UNINTERRUPTIBLE);
 
 
     if (result >= 0)
     if (result >= 0)
-        return rt_strlen(msg_ptr);
+        return result;
 
 
     if (result == -RT_ETIMEOUT)
     if (result == -RT_ETIMEOUT)
         rt_set_errno(ETIMEDOUT);
         rt_set_errno(ETIMEDOUT);

+ 1 - 1
examples/utest/testcases/kernel/messagequeue_tc.c

@@ -125,7 +125,7 @@ static void mq_send_entry(void *param)
 static void mq_recv_case(rt_mq_t testmq)
 static void mq_recv_case(rt_mq_t testmq)
 {
 {
     rt_uint32_t recv_buf[MAX_MSGS+1] = {0};
     rt_uint32_t recv_buf[MAX_MSGS+1] = {0};
-    rt_err_t ret = RT_EOK;
+    rt_ssize_t ret = RT_EOK;
 
 
     for (int var = 0; var < MAX_MSGS + 1; ++var)
     for (int var = 0; var < MAX_MSGS + 1; ++var)
     {
     {

+ 6 - 6
include/rtthread.h

@@ -517,12 +517,12 @@ rt_err_t rt_mq_send_wait_prio(rt_mq_t mq,
                               rt_int32_t prio,
                               rt_int32_t prio,
                               rt_int32_t timeout,
                               rt_int32_t timeout,
                               int suspend_flag);
                               int suspend_flag);
-rt_err_t rt_mq_recv_prio(rt_mq_t mq,
-                         void *buffer,
-                         rt_size_t size,
-                         rt_int32_t *prio,
-                         rt_int32_t timeout,
-                         int suspend_flag);
+rt_ssize_t rt_mq_recv_prio(rt_mq_t mq,
+                           void *buffer,
+                           rt_size_t size,
+                           rt_int32_t *prio,
+                           rt_int32_t timeout,
+                           int suspend_flag);
 #endif /* RT_USING_MESSAGEQUEUE_PRIORITY */
 #endif /* RT_USING_MESSAGEQUEUE_PRIORITY */
 #endif /* RT_USING_MESSAGEQUEUE */
 #endif /* RT_USING_MESSAGEQUEUE */
 
 

+ 6 - 6
src/ipc.c

@@ -3805,12 +3805,12 @@ rt_err_t rt_mq_send_wait_prio(rt_mq_t mq,
 {
 {
     return _rt_mq_send_wait(mq, buffer, size, prio, timeout, suspend_flag);
     return _rt_mq_send_wait(mq, buffer, size, prio, timeout, suspend_flag);
 }
 }
-rt_err_t rt_mq_recv_prio(rt_mq_t mq,
-                         void *buffer,
-                         rt_size_t size,
-                         rt_int32_t *prio,
-                         rt_int32_t timeout,
-                         int suspend_flag)
+rt_ssize_t rt_mq_recv_prio(rt_mq_t mq,
+                           void *buffer,
+                           rt_size_t size,
+                           rt_int32_t *prio,
+                           rt_int32_t timeout,
+                           int suspend_flag)
 {
 {
     return _rt_mq_recv(mq, buffer, size, prio, timeout, suspend_flag);
     return _rt_mq_recv(mq, buffer, size, prio, timeout, suspend_flag);
 }
 }