feat: 增加mount的MS_RDONLY标志的支持
增加mount的MS_RDONLY标志的支持,并修改vfs主要接口相关支持。 1. fatfs lseek接口在分区以MS_RDONLY方式和文件以只读打开时不再能够扩大文件的大小。 2. 直接在镜像中创建storage目录,而不是在挂载根文件系统时创建storage目录。 3. 增加了MS_RDONLY的测试用例。 Close #I3Z1W6 Signed-off-by: Far <yesiyuan2@huawei.com>
This commit is contained in:
@@ -790,6 +790,9 @@ sources_full = [
|
||||
"jffs/full/It_vfs_test_symlink_002.cpp",
|
||||
"jffs/full/It_vfs_test_symlink_003.cpp",
|
||||
"jffs/full/It_vfs_test_symlinkat_001.cpp",
|
||||
"jffs/full/It_vfs_test_mount_rdonly_001.cpp",
|
||||
"jffs/full/It_vfs_test_mount_rdonly_002.cpp",
|
||||
"jffs/full/It_vfs_test_mount_rdonly_003.cpp",
|
||||
]
|
||||
|
||||
if (LOSCFG_USER_TEST_LEVEL >= TEST_LEVEL_LOW) {
|
||||
|
||||
@@ -962,6 +962,9 @@ VOID ItFsTestSymlink001(VOID);
|
||||
VOID ItFsTestSymlink002(VOID);
|
||||
VOID ItFsTestSymlink003(VOID);
|
||||
VOID ItFsTestSymlinkat001(VOID);
|
||||
VOID ItFsTestMountRdonly001(VOID);
|
||||
VOID ItFsTestMountRdonly002(VOID);
|
||||
VOID ItFsTestMountRdonly003(VOID);
|
||||
#endif
|
||||
|
||||
#if defined(LOSCFG_USER_TESTSUIT_SHELL)
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "It_vfs_jffs.h"
|
||||
|
||||
static UINT32 testcase(VOID)
|
||||
{
|
||||
INT32 fd = -1;
|
||||
INT32 ret;
|
||||
CHAR pathname1[JFFS_STANDARD_NAME_LENGTH] = { JFFS_PATH_NAME0 };
|
||||
CHAR pathname2[JFFS_STANDARD_NAME_LENGTH] = { JFFS_PATH_NAME01 };
|
||||
|
||||
fd = creat(pathname1, 0777);
|
||||
ICUNIT_GOTO_NOT_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT);
|
||||
|
||||
ret = close(fd);
|
||||
ICUNIT_GOTO_EQUAL(ret, JFFS_NO_ERROR, ret, EXIT4);
|
||||
|
||||
ret = umount(JFFS_MAIN_DIR0);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT3);
|
||||
|
||||
ret = mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, MS_RDONLY, NULL);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT2);
|
||||
|
||||
fd = open(pathname1, O_RDWR);
|
||||
ICUNIT_GOTO_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT4);
|
||||
|
||||
ret = symlink(pathname1, pathname2);
|
||||
ICUNIT_GOTO_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT5);
|
||||
|
||||
ret = rename(pathname1, pathname2);
|
||||
ICUNIT_GOTO_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT5);
|
||||
|
||||
ret = unlink(pathname1);
|
||||
ICUNIT_GOTO_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT3);
|
||||
|
||||
ret = umount(JFFS_MAIN_DIR0);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT3);
|
||||
|
||||
ret = mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, 0, NULL);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT2);
|
||||
|
||||
ret = unlink(pathname1);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT1);
|
||||
|
||||
return JFFS_NO_ERROR;
|
||||
|
||||
EXIT5:
|
||||
unlink(pathname2);
|
||||
goto EXIT3;
|
||||
EXIT4:
|
||||
close(fd);
|
||||
EXIT3:
|
||||
umount(JFFS_MAIN_DIR0);
|
||||
EXIT2:
|
||||
mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, 0, NULL);
|
||||
EXIT1:
|
||||
unlink(pathname1);
|
||||
EXIT:
|
||||
return JFFS_NO_ERROR;
|
||||
}
|
||||
|
||||
VOID ItFsTestMountRdonly001(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("IT_FS_TEST_MOUNT_RDONLY_001", testcase, TEST_VFS, TEST_JFFS, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "It_vfs_jffs.h"
|
||||
|
||||
static UINT32 testcase(VOID)
|
||||
{
|
||||
INT32 fd = -1;
|
||||
INT32 ret;
|
||||
CHAR pathname1[JFFS_STANDARD_NAME_LENGTH] = { JFFS_PATH_NAME0 };
|
||||
|
||||
ret = umount(JFFS_MAIN_DIR0);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT);
|
||||
|
||||
ret = mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, MS_RDONLY, NULL);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT1);
|
||||
|
||||
fd = creat(pathname1, 0755);
|
||||
ICUNIT_GOTO_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT3);
|
||||
|
||||
fd = open(pathname1, O_CREAT | O_RDONLY, 0755);
|
||||
ICUNIT_GOTO_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT3);
|
||||
|
||||
fd = open(pathname1, O_CREAT | O_RDWR, 0755);
|
||||
ICUNIT_GOTO_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT3);
|
||||
|
||||
ret = mkdir(pathname1, 0755);
|
||||
ICUNIT_GOTO_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT2);
|
||||
|
||||
ret = umount(JFFS_MAIN_DIR0);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT1);
|
||||
|
||||
ret = mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, 0, NULL);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT1);
|
||||
|
||||
return JFFS_NO_ERROR;
|
||||
|
||||
EXIT3:
|
||||
close(fd);
|
||||
EXIT2:
|
||||
remove(pathname1);
|
||||
EXIT1:
|
||||
umount(JFFS_MAIN_DIR0);
|
||||
mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, 0, NULL);
|
||||
EXIT:
|
||||
return JFFS_NO_ERROR;
|
||||
}
|
||||
|
||||
VOID ItFsTestMountRdonly002(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("IT_FS_TEST_MOUNT_RDONLY_002", testcase, TEST_VFS, TEST_JFFS, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "It_vfs_jffs.h"
|
||||
|
||||
static UINT32 testcase(VOID)
|
||||
{
|
||||
INT32 fd = -1;
|
||||
INT32 ret;
|
||||
CHAR readbuf[JFFS_STANDARD_NAME_LENGTH] = {0};
|
||||
const CHAR writebuf[JFFS_STANDARD_NAME_LENGTH] = "0123456789";
|
||||
CHAR pathname1[JFFS_STANDARD_NAME_LENGTH] = { JFFS_PATH_NAME0 };
|
||||
|
||||
fd = creat(pathname1, 0777);
|
||||
ICUNIT_GOTO_NOT_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT);
|
||||
|
||||
ret = write(fd, writebuf, strlen(writebuf));
|
||||
ICUNIT_GOTO_EQUAL(ret, strlen(writebuf), ret, EXIT4);
|
||||
|
||||
ret = close(fd);
|
||||
ICUNIT_GOTO_EQUAL(ret, JFFS_NO_ERROR, ret, EXIT4);
|
||||
|
||||
ret = umount(JFFS_MAIN_DIR0);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT3);
|
||||
|
||||
ret = mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, MS_RDONLY, NULL);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT2);
|
||||
|
||||
fd = open(pathname1, O_RDWR);
|
||||
ICUNIT_GOTO_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT4);
|
||||
|
||||
fd = open(pathname1, O_RDONLY);
|
||||
ICUNIT_GOTO_NOT_EQUAL(fd, JFFS_IS_ERROR, fd, EXIT4);
|
||||
|
||||
ret = read(fd, readbuf, strlen(writebuf));
|
||||
ICUNIT_GOTO_EQUAL(ret, strlen(writebuf), ret, EXIT4);
|
||||
ICUNIT_GOTO_STRING_EQUAL(readbuf, writebuf, readbuf, EXIT4);
|
||||
|
||||
ret = close(fd);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT4);
|
||||
|
||||
ret = umount(JFFS_MAIN_DIR0);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT3);
|
||||
|
||||
ret = mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, 0, NULL);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT2);
|
||||
|
||||
ret = unlink(pathname1);
|
||||
ICUNIT_GOTO_NOT_EQUAL(ret, JFFS_IS_ERROR, ret, EXIT1);
|
||||
|
||||
return JFFS_NO_ERROR;
|
||||
|
||||
EXIT4:
|
||||
close(fd);
|
||||
EXIT3:
|
||||
umount(JFFS_MAIN_DIR0);
|
||||
EXIT2:
|
||||
mount(JFFS_DEV_PATH0, JFFS_MAIN_DIR0, JFFS_FILESYS_TYPE, 0, NULL);
|
||||
EXIT1:
|
||||
unlink(pathname1);
|
||||
EXIT:
|
||||
return JFFS_NO_ERROR;
|
||||
}
|
||||
|
||||
VOID ItFsTestMountRdonly003(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("IT_FS_TEST_MOUNT_RDONLY_003", testcase, TEST_VFS, TEST_JFFS, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
||||
@@ -6885,6 +6885,21 @@ HWTEST_F(VfsJffsTest, ItFsTestSymlinkat001, TestSize.Level0)
|
||||
ItFsTestSymlinkat001();
|
||||
}
|
||||
|
||||
HWTEST_F(VfsJffsTest, ItFsTestMountRdonly001, TestSize.Level0)
|
||||
{
|
||||
ItFsTestMountRdonly001();
|
||||
}
|
||||
|
||||
HWTEST_F(VfsJffsTest, ItFsTestMountRdonly002, TestSize.Level0)
|
||||
{
|
||||
ItFsTestMountRdonly002();
|
||||
}
|
||||
|
||||
HWTEST_F(VfsJffsTest, ItFsTestMountRdonly003, TestSize.Level0)
|
||||
{
|
||||
ItFsTestMountRdonly003();
|
||||
}
|
||||
|
||||
#endif
|
||||
#if defined(LOSCFG_USER_TEST_SMOKE)
|
||||
/* *
|
||||
|
||||
Reference in New Issue
Block a user