From 1869c543a60b7d05df4dd69d9eb08f6df6ae3d2e Mon Sep 17 00:00:00 2001 From: zhuzhuzhu <945386260@qq.com> Date: Thu, 13 Jun 2024 08:54:02 +0800 Subject: [PATCH] [fix]fix tmpfs bug (#8970) * first * second * thrid * Update SConscript * tmpfs testcase default n * Update dfs_tmpfs.c * format document --------- Co-authored-by: zhujiale --- .../dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c | 9 ++- examples/utest/testcases/Kconfig | 2 +- examples/utest/testcases/tmpfs/Kconfig | 6 ++ examples/utest/testcases/tmpfs/SConscript | 13 ++++ examples/utest/testcases/tmpfs/tmpfs.c | 68 +++++++++++++++++++ 5 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 examples/utest/testcases/tmpfs/Kconfig create mode 100644 examples/utest/testcases/tmpfs/SConscript create mode 100644 examples/utest/testcases/tmpfs/tmpfs.c diff --git a/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c b/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c index 8644f51c26..1c2a509475 100644 --- a/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c +++ b/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c @@ -294,18 +294,17 @@ find_subpath: static ssize_t dfs_tmpfs_read(struct dfs_file *file, void *buf, size_t count, off_t *pos) { - rt_size_t length; + ssize_t length; struct tmpfs_file *d_file; - d_file = (struct tmpfs_file *)file->vnode->data; RT_ASSERT(d_file != NULL); rt_mutex_take(&file->vnode->lock, RT_WAITING_FOREVER); - - if (count < file->vnode->size - *pos) + ssize_t size = (ssize_t)file->vnode->size; + if ((ssize_t)count < size - *pos) length = count; else - length = file->vnode->size - *pos; + length = size - *pos; if (length > 0) memcpy(buf, &(d_file->data[*pos]), length); diff --git a/examples/utest/testcases/Kconfig b/examples/utest/testcases/Kconfig index 248dbd8d3c..a0c068edf5 100644 --- a/examples/utest/testcases/Kconfig +++ b/examples/utest/testcases/Kconfig @@ -14,7 +14,7 @@ source "$RTT_DIR/examples/utest/testcases/drivers/serial_v2/Kconfig" source "$RTT_DIR/examples/utest/testcases/drivers/ipc/Kconfig" source "$RTT_DIR/examples/utest/testcases/posix/Kconfig" source "$RTT_DIR/examples/utest/testcases/mm/Kconfig" - +source "$RTT_DIR/examples/utest/testcases/tmpfs/Kconfig" endif endmenu diff --git a/examples/utest/testcases/tmpfs/Kconfig b/examples/utest/testcases/tmpfs/Kconfig new file mode 100644 index 0000000000..b3a0637950 --- /dev/null +++ b/examples/utest/testcases/tmpfs/Kconfig @@ -0,0 +1,6 @@ +menu "Tmpfs Testcase" + +config UTEST_TMPFS_CP + bool "tmpfs cp test" + default n +endmenu diff --git a/examples/utest/testcases/tmpfs/SConscript b/examples/utest/testcases/tmpfs/SConscript new file mode 100644 index 0000000000..1467931a76 --- /dev/null +++ b/examples/utest/testcases/tmpfs/SConscript @@ -0,0 +1,13 @@ +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +CPPPATH = [cwd] + +if GetDepend(['RT_USING_SMART','UTEST_TMPFS_CP']): + src += ['tmpfs.c'] + +group = DefineGroup('utestcases', src, depend = ['RT_USING_UTESTCASES'], CPPPATH = CPPPATH) + +Return('group') diff --git a/examples/utest/testcases/tmpfs/tmpfs.c b/examples/utest/testcases/tmpfs/tmpfs.c new file mode 100644 index 0000000000..6eaa973907 --- /dev/null +++ b/examples/utest/testcases/tmpfs/tmpfs.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2006-2019, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-5-20 Zhujiale the first version + */ +#include +#include +#include +#include "utest.h" +#include "utest_assert.h" +#include "common.h" + +void run_copy() +{ + int ret = 0; + ret = msh_exec("cd /tmp", 7); + if (ret != 0) + { + LOG_E("errno=%d, ret=%d\n", errno, ret); + LOG_E("cd /tmp error"); + uassert_false(1); + } + uassert_true(1); + ret = msh_exec("touch test", 10); + if (ret != 0) + { + LOG_E("errno=%d, ret=%d\n", errno, ret); + LOG_E("touch test error"); + uassert_false(1); + } + uassert_true(1); + ret = msh_exec("echo this_is_a_test_file test", 29); + if (ret != 0) + { + LOG_E("errno=%d, ret=%d\n", errno, ret); + LOG_E("echo this_is_a_test_file test error"); + uassert_false(1); + } + uassert_true(1); + ret = msh_exec("cp test test1", 13); + if (ret != 0) + { + LOG_E("errno=%d, ret=%d\n", errno, ret); + LOG_E("cp test test1 error"); + uassert_false(1); + } + + uassert_true(1); +} + +static rt_err_t utest_tc_init(void) +{ + return RT_EOK; +} + +static rt_err_t utest_tc_cleanup(void) +{ + return RT_EOK; +} +static void testcase(void) +{ + UTEST_UNIT_RUN(run_copy); +} +UTEST_TC_EXPORT(testcase, "testcase.tfs.tmpfs", utest_tc_init, utest_tc_cleanup, 10);