|  | #pragma once | 
|  | #undef NDEBUG | 
|  | #include <assert.h> | 
|  | #include <dirent.h> | 
|  | #include <errno.h> | 
|  | #include <stdbool.h> | 
|  | #include <stdlib.h> | 
|  | #include <string.h> | 
|  | #include <unistd.h> | 
|  | #include <sys/syscall.h> | 
|  |  | 
|  | static inline pid_t sys_getpid(void) | 
|  | { | 
|  | return syscall(SYS_getpid); | 
|  | } | 
|  |  | 
|  | static inline pid_t sys_gettid(void) | 
|  | { | 
|  | return syscall(SYS_gettid); | 
|  | } | 
|  |  | 
|  | static inline bool streq(const char *s1, const char *s2) | 
|  | { | 
|  | return strcmp(s1, s2) == 0; | 
|  | } | 
|  |  | 
|  | static unsigned long long xstrtoull(const char *p, char **end) | 
|  | { | 
|  | if (*p == '0') { | 
|  | *end = (char *)p + 1; | 
|  | return 0; | 
|  | } else if ('1' <= *p && *p <= '9') { | 
|  | unsigned long long val; | 
|  |  | 
|  | errno = 0; | 
|  | val = strtoull(p, end, 10); | 
|  | assert(errno == 0); | 
|  | return val; | 
|  | } else | 
|  | assert(0); | 
|  | } | 
|  |  | 
|  | static struct dirent *xreaddir(DIR *d) | 
|  | { | 
|  | struct dirent *de; | 
|  |  | 
|  | errno = 0; | 
|  | de = readdir(d); | 
|  | assert(de || errno == 0); | 
|  | return de; | 
|  | } |