18#ifndef _BOILERPLATE_ANCILLARIES_H
19#define _BOILERPLATE_ANCILLARIES_H
29#define ONE_BILLION 1000000000
31void __namecpy_requires_character_array_as_destination(
void);
33#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
35#define namecpy(__dst, __src) \
37 if (!__builtin_types_compatible_p(typeof(__dst), char[])) \
38 __namecpy_requires_character_array_as_destination(); \
39 strncpy((__dst), __src, sizeof(__dst)); \
40 __dst[sizeof(__dst) - 1] = '\0'; \
44#define early_panic(__fmt, __args...) \
45 __early_panic(__func__, __fmt, ##__args)
47#define panic(__fmt, __args...) \
48 __panic(__func__, __fmt, ##__args)
54void __printout(
const char *name,
56 const char *fmt, va_list ap);
58void __noreturn __early_panic(
const char *fn,
59 const char *fmt, ...);
61void __noreturn ___panic(
const char *fn,
63 const char *fmt, va_list ap);
65void __noreturn __panic(
const char *fn,
66 const char *fmt, ...);
68void __warning(
const char *name,
69 const char *fmt, va_list ap);
71void early_warning(
const char *fmt, ...);
73void warning(
const char *fmt, ...);
75void __notice(
const char *name,
76 const char *fmt, va_list ap);
78void early_notice(
const char *fmt, ...);
80void notice(
const char *fmt, ...);
82void __boilerplate_init(
void);
84const char *symerror(
int errnum);
86void error_hook(
struct error_frame *ef);
88int get_static_cpu_count(
void);
90int get_online_cpu_set(cpu_set_t *cpuset);
92int get_realtime_cpu_set(cpu_set_t *cpuset);
94int get_current_cpu(
void);
96pid_t get_thread_pid(
void);
98char *lookup_command(
const char *cmd);
100size_t get_mem_size(
const char *arg);
102extern const char *config_strings[];
104extern pthread_mutex_t __printlock;