42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
#include <socks/init.h>
|
|
|
|
extern char __initcall0_start[];
|
|
extern char __initcall1_start[];
|
|
extern char __initcall2_start[];
|
|
extern char __initcall3_start[];
|
|
extern char __initcall4_start[];
|
|
extern char __initcall5_start[];
|
|
extern char __initcall6_start[];
|
|
extern char __initcall7_start[];
|
|
extern char __initcall8_start[];
|
|
extern char __initcall_end[];
|
|
|
|
static initcall_t *m_init_func_levels[] = {
|
|
(initcall_t *)__initcall0_start,
|
|
(initcall_t *)__initcall1_start,
|
|
(initcall_t *)__initcall2_start,
|
|
(initcall_t *)__initcall3_start,
|
|
(initcall_t *)__initcall4_start,
|
|
(initcall_t *)__initcall5_start,
|
|
(initcall_t *)__initcall6_start,
|
|
(initcall_t *)__initcall7_start,
|
|
(initcall_t *)__initcall8_start,
|
|
(initcall_t *)__initcall_end,
|
|
};
|
|
|
|
int start_initlevel(int level) {
|
|
if (m_init_func_levels[level] == m_init_func_levels[level + 1]) {
|
|
return 0;
|
|
}
|
|
|
|
for (initcall_t *fn = m_init_func_levels[level]; fn < m_init_func_levels[level + 1]; fn++) {
|
|
int res = (*fn)();
|
|
|
|
if (res != 0) {
|
|
return res;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|