1*053f45beSAndroid Build Coastguard Worker #pragma once 2*053f45beSAndroid Build Coastguard Worker #undef NDEBUG 3*053f45beSAndroid Build Coastguard Worker #include <assert.h> 4*053f45beSAndroid Build Coastguard Worker #include <dirent.h> 5*053f45beSAndroid Build Coastguard Worker #include <errno.h> 6*053f45beSAndroid Build Coastguard Worker #include <stdbool.h> 7*053f45beSAndroid Build Coastguard Worker #include <stdlib.h> 8*053f45beSAndroid Build Coastguard Worker #include <string.h> 9*053f45beSAndroid Build Coastguard Worker #include <unistd.h> 10*053f45beSAndroid Build Coastguard Worker #include <sys/syscall.h> 11*053f45beSAndroid Build Coastguard Worker sys_getpid(void)12*053f45beSAndroid Build Coastguard Workerstatic inline pid_t sys_getpid(void) 13*053f45beSAndroid Build Coastguard Worker { 14*053f45beSAndroid Build Coastguard Worker return syscall(SYS_getpid); 15*053f45beSAndroid Build Coastguard Worker } 16*053f45beSAndroid Build Coastguard Worker sys_gettid(void)17*053f45beSAndroid Build Coastguard Workerstatic inline pid_t sys_gettid(void) 18*053f45beSAndroid Build Coastguard Worker { 19*053f45beSAndroid Build Coastguard Worker return syscall(SYS_gettid); 20*053f45beSAndroid Build Coastguard Worker } 21*053f45beSAndroid Build Coastguard Worker streq(const char * s1,const char * s2)22*053f45beSAndroid Build Coastguard Workerstatic inline bool streq(const char *s1, const char *s2) 23*053f45beSAndroid Build Coastguard Worker { 24*053f45beSAndroid Build Coastguard Worker return strcmp(s1, s2) == 0; 25*053f45beSAndroid Build Coastguard Worker } 26*053f45beSAndroid Build Coastguard Worker xstrtoull(const char * p,char ** end)27*053f45beSAndroid Build Coastguard Workerstatic unsigned long long xstrtoull(const char *p, char **end) 28*053f45beSAndroid Build Coastguard Worker { 29*053f45beSAndroid Build Coastguard Worker if (*p == '0') { 30*053f45beSAndroid Build Coastguard Worker *end = (char *)p + 1; 31*053f45beSAndroid Build Coastguard Worker return 0; 32*053f45beSAndroid Build Coastguard Worker } else if ('1' <= *p && *p <= '9') { 33*053f45beSAndroid Build Coastguard Worker unsigned long long val; 34*053f45beSAndroid Build Coastguard Worker 35*053f45beSAndroid Build Coastguard Worker errno = 0; 36*053f45beSAndroid Build Coastguard Worker val = strtoull(p, end, 10); 37*053f45beSAndroid Build Coastguard Worker assert(errno == 0); 38*053f45beSAndroid Build Coastguard Worker return val; 39*053f45beSAndroid Build Coastguard Worker } else 40*053f45beSAndroid Build Coastguard Worker assert(0); 41*053f45beSAndroid Build Coastguard Worker } 42*053f45beSAndroid Build Coastguard Worker xreaddir(DIR * d)43*053f45beSAndroid Build Coastguard Workerstatic struct dirent *xreaddir(DIR *d) 44*053f45beSAndroid Build Coastguard Worker { 45*053f45beSAndroid Build Coastguard Worker struct dirent *de; 46*053f45beSAndroid Build Coastguard Worker 47*053f45beSAndroid Build Coastguard Worker errno = 0; 48*053f45beSAndroid Build Coastguard Worker de = readdir(d); 49*053f45beSAndroid Build Coastguard Worker assert(de || errno == 0); 50*053f45beSAndroid Build Coastguard Worker return de; 51*053f45beSAndroid Build Coastguard Worker } 52