Module Name: src Committed By: martin Date: Tue Feb 1 18:27:24 UTC 2022
Modified Files: src/tests/fs/vfs: t_vnops.c Log Message: Test mkdir(2) with one or more trailing slashes - this currently fails for v7fs. To generate a diff of this commit: cvs rdiff -u -r1.61 -r1.62 src/tests/fs/vfs/t_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/fs/vfs/t_vnops.c diff -u src/tests/fs/vfs/t_vnops.c:1.61 src/tests/fs/vfs/t_vnops.c:1.62 --- src/tests/fs/vfs/t_vnops.c:1.61 Thu Sep 16 21:29:42 2021 +++ src/tests/fs/vfs/t_vnops.c Tue Feb 1 18:27:24 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: t_vnops.c,v 1.61 2021/09/16 21:29:42 andvar Exp $ */ +/* $NetBSD: t_vnops.c,v 1.62 2022/02/01 18:27:24 martin Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -175,6 +175,45 @@ dir_simple(const atf_tc_t *tc, const cha } static void +do_dir_slash(const atf_tc_t *tc, const char *mountpath, const char *addend) +{ + char plain[MAXPATHLEN], with_slash[MAXPATHLEN]; + struct stat sb; + + USES_DIRS; + + /* check we can create directories with one or more / appended */ + snprintf(plain, sizeof(plain), "%s/dir%s", mountpath, addend); + snprintf(with_slash, sizeof(with_slash), "%s/dir/", mountpath); + if (rump_sys_mkdir(with_slash, 0777) == -1) + atf_tc_fail_errno("mkdir"); + if (rump_sys_stat(plain, &sb) == -1) + atf_tc_fail_errno("stat new directory"); + if (rump_sys_rmdir(plain) == -1) + atf_tc_fail_errno("rmdir"); + if (rump_sys_stat(with_slash, &sb) != -1 || errno != ENOENT) + atf_tc_fail("ENOENT expected from stat"); +} + +static void +dir_slash(const atf_tc_t *tc, const char *mountpath) +{ + do_dir_slash(tc, mountpath, "/"); +} + +static void +dir_2slash(const atf_tc_t *tc, const char *mountpath) +{ + do_dir_slash(tc, mountpath, "//"); +} + +static void +dir_3slash(const atf_tc_t *tc, const char *mountpath) +{ + do_dir_slash(tc, mountpath, "///"); +} + +static void dir_notempty(const atf_tc_t *tc, const char *mountpath) { char pb[MAXPATHLEN], pb2[MAXPATHLEN]; @@ -1026,6 +1065,9 @@ lstat_symlink(const atf_tc_t *tc, const ATF_TC_FSAPPLY(lookup_simple, "simple lookup (./.. on root)"); ATF_TC_FSAPPLY(lookup_complex, "lookup of non-dot entries"); ATF_TC_FSAPPLY(dir_simple, "mkdir/rmdir"); +ATF_TC_FSAPPLY(dir_slash, "mkdir with appended slash"); +ATF_TC_FSAPPLY(dir_2slash, "mkdir with two slashes appended"); +ATF_TC_FSAPPLY(dir_3slash, "mkdir with three slashes appended"); ATF_TC_FSAPPLY(dir_notempty, "non-empty directories cannot be removed"); ATF_TC_FSAPPLY(dir_rmdirdotdot, "remove .. and try to cd out (PR kern/44657)"); ATF_TC_FSAPPLY(rename_dir, "exercise various directory renaming ops " @@ -1058,6 +1100,9 @@ ATF_TP_ADD_TCS(tp) ATF_TP_FSAPPLY(dir_simple); ATF_TP_FSAPPLY(dir_notempty); ATF_TP_FSAPPLY(dir_rmdirdotdot); + ATF_TP_FSAPPLY(dir_slash); + ATF_TP_FSAPPLY(dir_2slash); + ATF_TP_FSAPPLY(dir_3slash); ATF_TP_FSAPPLY(rename_dir); ATF_TP_FSAPPLY(rename_dotdot); ATF_TP_FSAPPLY(rename_reg_nodir);