ATF_TC_BODY(mkdtemp_ok, tc) { atf_fs_path_t p1, p2; atf_fs_stat_t s1, s2; RE(atf_fs_path_init_fmt(&p1, "testdir.XXXXXX")); RE(atf_fs_path_init_fmt(&p2, "testdir.XXXXXX")); RE(atf_fs_mkdtemp(&p1)); RE(atf_fs_mkdtemp(&p2)); ATF_REQUIRE(!atf_equal_fs_path_fs_path(&p1, &p2)); ATF_REQUIRE(exists(&p1)); ATF_REQUIRE(exists(&p2)); RE(atf_fs_stat_init(&s1, &p1)); ATF_REQUIRE_EQ(atf_fs_stat_get_type(&s1), atf_fs_stat_dir_type); ATF_REQUIRE( atf_fs_stat_is_owner_readable(&s1)); ATF_REQUIRE( atf_fs_stat_is_owner_writable(&s1)); ATF_REQUIRE( atf_fs_stat_is_owner_executable(&s1)); ATF_REQUIRE(!atf_fs_stat_is_group_readable(&s1)); ATF_REQUIRE(!atf_fs_stat_is_group_writable(&s1)); ATF_REQUIRE(!atf_fs_stat_is_group_executable(&s1)); ATF_REQUIRE(!atf_fs_stat_is_other_readable(&s1)); ATF_REQUIRE(!atf_fs_stat_is_other_writable(&s1)); ATF_REQUIRE(!atf_fs_stat_is_other_executable(&s1)); RE(atf_fs_stat_init(&s2, &p2)); ATF_REQUIRE_EQ(atf_fs_stat_get_type(&s2), atf_fs_stat_dir_type); ATF_REQUIRE( atf_fs_stat_is_owner_readable(&s2)); ATF_REQUIRE( atf_fs_stat_is_owner_writable(&s2)); ATF_REQUIRE( atf_fs_stat_is_owner_executable(&s2)); ATF_REQUIRE(!atf_fs_stat_is_group_readable(&s2)); ATF_REQUIRE(!atf_fs_stat_is_group_writable(&s2)); ATF_REQUIRE(!atf_fs_stat_is_group_executable(&s2)); ATF_REQUIRE(!atf_fs_stat_is_other_readable(&s2)); ATF_REQUIRE(!atf_fs_stat_is_other_writable(&s2)); ATF_REQUIRE(!atf_fs_stat_is_other_executable(&s2)); atf_fs_stat_fini(&s2); atf_fs_stat_fini(&s1); atf_fs_path_fini(&p2); atf_fs_path_fini(&p1); }
ATF_TC_BODY(mkdtemp_err, tc) { atf_error_t err; atf_fs_path_t p; ATF_REQUIRE(mkdir("dir", 0555) != -1); RE(atf_fs_path_init_fmt(&p, "dir/testdir.XXXXXX")); err = atf_fs_mkdtemp(&p); ATF_REQUIRE(atf_is_error(err)); ATF_REQUIRE(atf_error_is(err, "libc")); ATF_CHECK_EQ(atf_libc_error_code(err), EACCES); atf_error_free(err); ATF_CHECK(!exists(&p)); ATF_CHECK(strcmp(atf_fs_path_cstring(&p), "dir/testdir.XXXXXX") == 0); atf_fs_path_fini(&p); }
static atf_error_t create_tmpdir(atf_fs_path_t *dir) { atf_error_t err; err = atf_fs_path_init_fmt(dir, "%s/check.XXXXXX", atf_env_get_with_default("TMPDIR", "/tmp")); if (atf_is_error(err)) goto out; err = atf_fs_mkdtemp(dir); if (atf_is_error(err)) { atf_fs_path_fini(dir); goto out; } INV(!atf_is_error(err)); out: return err; }