1*e3723e1fSApple OSS Distributions #include <darwintest.h> 2*e3723e1fSApple OSS Distributions #include <mach/mach.h> 3*e3723e1fSApple OSS Distributions #include <mach/mach_types.h> 4*e3723e1fSApple OSS Distributions #include <unistd.h> 5*e3723e1fSApple OSS Distributions #include <sys/types.h> 6*e3723e1fSApple OSS Distributions #include <sys/wait.h> 7*e3723e1fSApple OSS Distributions #include <stdlib.h> 8*e3723e1fSApple OSS Distributions 9*e3723e1fSApple OSS Distributions #include <stdio.h> 10*e3723e1fSApple OSS Distributions #include <assert.h> 11*e3723e1fSApple OSS Distributions #include <err.h> 12*e3723e1fSApple OSS Distributions #include <libproc.h> 13*e3723e1fSApple OSS Distributions 14*e3723e1fSApple OSS Distributions T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true)); 15*e3723e1fSApple OSS Distributions 16*e3723e1fSApple OSS Distributions T_DECL(proc_info_44873309, "ensure new proc_pidinfo flavor returns correct table sizes", 17*e3723e1fSApple OSS Distributions T_META_CHECK_LEAKS(false), T_META_ASROOT(true)) 18*e3723e1fSApple OSS Distributions { 19*e3723e1fSApple OSS Distributions mach_port_t port; 20*e3723e1fSApple OSS Distributions int retval; 21*e3723e1fSApple OSS Distributions 22*e3723e1fSApple OSS Distributions pid_t pid = getpid(); 23*e3723e1fSApple OSS Distributions struct proc_ipctableinfo table_info = {}; 24*e3723e1fSApple OSS Distributions retval = proc_pidinfo(pid, PROC_PIDIPCTABLEINFO, 0, (void *)&table_info, (uint32_t)sizeof(table_info)); 25*e3723e1fSApple OSS Distributions T_WITH_ERRNO; T_EXPECT_GT(retval, 0, "proc_pidinfo(PROC_PIDIPCTABLEINFO) returned %d", retval); 26*e3723e1fSApple OSS Distributions T_EXPECT_EQ(retval, (int)sizeof(table_info), "proc_pidinfo(PROC_PIDIPCTABLEINFO) table_size = %u, table_free = %u", 27*e3723e1fSApple OSS Distributions table_info.table_size, table_info.table_free); 28*e3723e1fSApple OSS Distributions 29*e3723e1fSApple OSS Distributions kern_return_t ret = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &port); 30*e3723e1fSApple OSS Distributions T_ASSERT_MACH_SUCCESS(ret, "mach_port_allocate MACH_PORT_RIGHT_RECEIVE"); 31*e3723e1fSApple OSS Distributions 32*e3723e1fSApple OSS Distributions struct proc_ipctableinfo table_info2 = {}; 33*e3723e1fSApple OSS Distributions retval = proc_pidinfo(pid, PROC_PIDIPCTABLEINFO, 0, (void *)&table_info2, (uint32_t)sizeof(table_info2)); 34*e3723e1fSApple OSS Distributions T_WITH_ERRNO; T_EXPECT_GT(retval, 0, "proc_pidinfo(PROC_PIDIPCTABLEINFO) returned %d", retval); 35*e3723e1fSApple OSS Distributions T_EXPECT_EQ(retval, (int)sizeof(table_info2), "proc_pidinfo(PROC_PIDIPCTABLEINFO) table_size2 = %u, table_free2 = %u", 36*e3723e1fSApple OSS Distributions table_info2.table_size, table_info2.table_free); 37*e3723e1fSApple OSS Distributions 38*e3723e1fSApple OSS Distributions T_EXPECT_EQ(table_info.table_free, table_info2.table_free + 1, "Comparing the table_free values"); 39*e3723e1fSApple OSS Distributions } 40