27 #define foreach_arg(_arg, _addr, _len, _first_addr, _first_len) \
28 for (_addr = (_first_addr), _len = (_first_len); \
30 _addr = va_arg(_arg, void **), _len = _addr ? va_arg(_arg, size_t) : 0)
32 #define C_PTR_ALIGN (sizeof(size_t))
33 #define C_PTR_MASK (-C_PTR_ALIGN)
51 ptr = calloc(1, alloc_len);
59 *cur_addr = &ptr[alloc_len];
67 #ifdef LIBUBOX_COMPAT_CLOCK_GETTIME
68 #include <mach/mach_host.h>
69 #include <mach/mach_port.h>
70 #include <mach/mach_init.h>
71 #include <mach/clock.h>
73 static clock_serv_t clock_realtime;
74 static clock_serv_t clock_monotonic;
78 mach_port_t host_self = mach_host_self();
80 host_get_clock_service(host_self, CLOCK_REALTIME, &clock_realtime);
81 host_get_clock_service(host_self, CLOCK_MONOTONIC, &clock_monotonic);
86 mach_port_t
self = mach_task_self();
88 mach_port_deallocate(
self, clock_realtime);
89 mach_port_deallocate(
self, clock_monotonic);
92 int clock_gettime(
int type,
struct timespec *tv)
99 retval = clock_get_time(clock_realtime, &mts);
101 case CLOCK_MONOTONIC:
102 retval = clock_get_time(clock_monotonic, &mts);
108 tv->tv_sec = mts.tv_sec;
109 tv->tv_nsec = mts.tv_nsec;
118 char path[] =
"/tmp/cbuf-XXXXXX";
133 #ifndef MAP_ANONYMOUS
134 #define MAP_ANONYMOUS MAP_ANON
137 ret = mmap(NULL, size * 2, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0);
138 if (ret == MAP_FAILED) {
143 if (mmap(ret, size, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED,
145 mmap(ret + size, size, PROT_READ | PROT_WRITE,
146 MAP_FIXED | MAP_SHARED,
fd, 0) != ret + size) {
147 munmap(ret, size * 2);
166 ret = mkdir(dir, mask);
167 if (!ret || errno == EEXIST)
170 if (ret && (errno != ENOENT))
173 l = strrchr(dir,
'/');
184 ret = mkdir(dir, mask);
185 if (!ret || errno == EEXIST)
void * __calloc_a(size_t len,...)
int mkdir_p(char *dir, mode_t mask)
void * cbuf_alloc(unsigned int order)
#define foreach_arg(_arg, _addr, _len, _first_addr, _first_len)
void cbuf_free(void *ptr, unsigned int order)
static unsigned long cbuf_size(int order)