summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhkag <[email protected]>2023-09-08 18:15:03 +0800
committerGitHub <[email protected]>2023-09-08 18:15:03 +0800
commit0b9a808ccacfd900c3cfc3a69cce7688b3bcaeb8 (patch)
tree4b2a6a28f79d69f54ba058c4f151a025ca28ee4b
parentdfc8994ea2aa3fb4c13e59fcbf005983fc6fe03e (diff)
[posix]修复消息队列返回长度异常 (#8014)
-rw-r--r--components/libc/posix/ipc/mqueue.c4
-rw-r--r--examples/utest/testcases/kernel/messagequeue_tc.c2
-rw-r--r--include/rtthread.h12
-rw-r--r--src/ipc.c12
4 files changed, 15 insertions, 15 deletions
diff --git a/components/libc/posix/ipc/mqueue.c b/components/libc/posix/ipc/mqueue.c
index 45a1382313..a452092875 100644
--- a/components/libc/posix/ipc/mqueue.c
+++ b/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);
if (result >= 0)
- return rt_strlen(msg_ptr);
+ return result;
rt_set_errno(EBADF);
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);
if (result >= 0)
- return rt_strlen(msg_ptr);
+ return result;
if (result == -RT_ETIMEOUT)
rt_set_errno(ETIMEDOUT);
diff --git a/examples/utest/testcases/kernel/messagequeue_tc.c b/examples/utest/testcases/kernel/messagequeue_tc.c
index 6d44c0042b..8c44db4c67 100644
--- a/examples/utest/testcases/kernel/messagequeue_tc.c
+++ b/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)
{
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)
{
diff --git a/include/rtthread.h b/include/rtthread.h
index 4c23e43e2a..d4fea8fe7a 100644
--- a/include/rtthread.h
+++ b/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 timeout,
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 */
diff --git a/src/ipc.c b/src/ipc.c
index 3d760de2c5..4c74ab4877 100644
--- a/src/ipc.c
+++ b/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);
}
-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);
}