xnu_quick_test_entitled.c [plain text]
#include <darwintest.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/disk.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#if !(TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR)
#include <sys/csr.h>
#endif
T_GLOBAL_META(
T_META_NAMESPACE("xnu.quicktest"),
T_META_CHECK_LEAKS(false),
T_META_RUN_CONCURRENTLY(true)
);
T_DECL(ioctl, "Sanity check of ioctl by exercising DKIOCGETBLOCKCOUNT and DKIOCGETBLOCKSIZE",
T_META_ASROOT(true))
{
int my_err;
int my_fd = -1;
struct statfs * my_infop;
char * my_ptr;
int my_blksize;
long long my_block_count;
char my_name[MAXPATHLEN];
#if !(TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR)
if (csr_check( CSR_ALLOW_UNRESTRICTED_FS ) &&
csr_check( CSR_ALLOW_APPLE_INTERNAL )) {
T_SKIP("System Integrity Protection is enabled");
}
#endif
T_SETUPBEGIN;
T_WITH_ERRNO;
T_ASSERT_GT(getmntinfo( &my_infop, MNT_NOWAIT ), 0, "getmntinfo");
strlcpy( &my_name[0], &my_infop->f_mntfromname[0], sizeof(my_name));
if ((my_ptr = strrchr( &my_name[0], '/' )) != 0) {
if (my_ptr[1] != 'r') {
my_ptr[strlen( my_ptr )] = 0x00;
memmove( &my_ptr[2], &my_ptr[1], (strlen( &my_ptr[1] ) + 1));
my_ptr[1] = 'r';
}
}
T_ASSERT_POSIX_SUCCESS(my_fd = open( &my_name[0], O_RDONLY ), "open");
T_SETUPEND;
T_EXPECT_POSIX_SUCCESS(my_err = ioctl( my_fd, DKIOCGETBLOCKCOUNT, &my_block_count ),
"ioctl DKIOCGETBLOCKCOUNT");
T_EXPECT_POSIX_SUCCESS(my_err = ioctl( my_fd, DKIOCGETBLOCKSIZE, &my_blksize ),
"ioctl DKIOCGETBLOCKSIZE");
T_LOG( "my_block_count %qd my_blksize %d \n", my_block_count, my_blksize );
if (my_err != -1) {
T_EXPECT_GE(my_blksize, 0, NULL);
T_EXPECT_LE(my_blksize, 1024 * 1000, NULL);
}
close( my_fd );
}