From 056b010b1d5296266c0c61891d4ae896f9c9ba65 Mon Sep 17 00:00:00 2001 From: nsz Date: Sun, 14 Oct 2012 22:49:47 +0200 Subject: [PATCH] api: add sched.c .. signal.c --- src/api/sched.c | 30 ++++++++ src/api/search.c | 36 +++++++++ src/api/semaphore.c | 16 ++++ src/api/setjmp.c | 13 ++++ src/api/signal.c | 183 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 278 insertions(+) create mode 100644 src/api/sched.c create mode 100644 src/api/search.c create mode 100644 src/api/semaphore.c create mode 100644 src/api/setjmp.c create mode 100644 src/api/signal.c diff --git a/src/api/sched.c b/src/api/sched.c new file mode 100644 index 0000000..0a130ae --- /dev/null +++ b/src/api/sched.c @@ -0,0 +1,30 @@ +#include +#define T(t) (t*)0; +#define F(t,n) {t *y = &x.n;} +#define C(n) switch(n){case n:;} +static void f() +{ +T(pid_t) +T(time_t) +T(struct timespec) +{ +struct sched_param x; +F(int,sched_priority) +F(int,sched_ss_low_priority) +F(struct timespec,sched_ss_repl_period) +F(struct timespec,sched_ss_init_budget) +F(int,sched_ss_max_repl) +} +C(SCHED_FIFO) +C(SCHED_RR) +C(SCHED_SPORADIC) +C(SCHED_OTHER) +int(*p_sched_get_priority_max)(int) = sched_get_priority_max; +int(*p_sched_get_priority_min)(int) = sched_get_priority_min; +int(*p_sched_getparam)(pid_t,struct sched_param*) = sched_getparam; +int(*p_sched_getscheduler)(pid_t) = sched_getscheduler; +int(*p_sched_rr_get_interval)(pid_t,struct timespec*) = sched_rr_get_interval; +int(*p_sched_setparam)(pid_t,const struct sched_param*) = sched_setparam; +int(*p_sched_setscheduler)(pid_t,int,const struct sched_param*) = sched_setscheduler; +int(*p_sched_yield)(void) = sched_yield; +} diff --git a/src/api/search.c b/src/api/search.c new file mode 100644 index 0000000..a92a259 --- /dev/null +++ b/src/api/search.c @@ -0,0 +1,36 @@ +#include +#define T(t) (t*)0; +#define F(t,n) {t *y = &x.n;} +#define C(n) switch(n){case n:;} +static void f() +{ +T(size_t) +T(ACTION) +T(VISIT) +{ +ENTRY x; +F(char*,key) +F(void*,data) +} +switch((ACTION)0){ +case FIND: +case ENTER:; +} +switch((VISIT)0){ +case preorder: +case postorder: +case endorder: +case leaf:; +} +int(*p_hcreate)(size_t) = hcreate; +void(*p_hdestroy)(void) = hdestroy; +ENTRY*(*p_hsearch)(ENTRY,ACTION) = hsearch; +void(*p_insque)(void*,void*) = insque; +void*(*p_lfind)(const void*,const void*,size_t*,size_t,int(*)(const void*,const void*)) = lfind; +void*(*p_lsearch)(const void*,void*,size_t*,size_t,int(*)(const void*,const void*)) = lsearch; +void(*p_remque)(void*) = remque; +void*(*p_tdelete)(const void*restrict,void**restrict,int(*)(const void*,const void*)) = tdelete; +void*(*p_tfind)(const void*,void*const*,int(*)(const void*,const void*)) = tfind; +void*(*p_tsearch)(const void*,void**,int(*)(const void*,const void*)) = tsearch; +void(*p_twalk)(const void*,void(*)(const void*,VISIT,int)) = twalk; +} diff --git a/src/api/semaphore.c b/src/api/semaphore.c new file mode 100644 index 0000000..700002a --- /dev/null +++ b/src/api/semaphore.c @@ -0,0 +1,16 @@ +#include +static void f() +{ +{sem_t *x = SEM_FAILED;} +int(*p_sem_close)(sem_t*) = sem_close; +int(*p_sem_destroy)(sem_t*) = sem_destroy; +int(*p_sem_getvalue)(sem_t*restrict,int*restrict) = sem_getvalue; +int(*p_sem_init)(sem_t*,int,unsigned) = sem_init; +sem_t*(*p_sem_open)(const char*,int,...) = sem_open; +int(*p_sem_post)(sem_t*) = sem_post; +int(*p_sem_trywait)(sem_t*) = sem_trywait; +int(*p_sem_unlink)(const char*) = sem_unlink; +int(*p_sem_wait)(sem_t*) = sem_wait; +#include +int(*p_sem_timedwait)(sem_t*restrict,const struct timespec*restrict) = sem_timedwait; +} diff --git a/src/api/setjmp.c b/src/api/setjmp.c new file mode 100644 index 0000000..c4178c3 --- /dev/null +++ b/src/api/setjmp.c @@ -0,0 +1,13 @@ +#include +#define T(t) (t*)0; +static void f() +{ +T(jmp_buf) +void(*p_longjmp)(jmp_buf,int) = longjmp; +int(*p_setjmp)(jmp_buf) = setjmp; +#ifdef _POSIX_C_SOURCE +T(sigjmp_buf) +void(*p_siglongjmp)(sigjmp_buf,int) = siglongjmp; +int(*p_sigsetjmp)(sigjmp_buf,int) = sigsetjmp; +#endif +} diff --git a/src/api/signal.c b/src/api/signal.c new file mode 100644 index 0000000..264edf4 --- /dev/null +++ b/src/api/signal.c @@ -0,0 +1,183 @@ +#include +#define T(t) (t*)0; +#define F(t,n) {t *y = &x.n;} +#define C(n) switch(n){case n:;} +static void f() +{ +T(sig_atomic_t) +{void(*x)(int) = SIG_DFL;} +{void(*x)(int) = SIG_ERR;} +{void(*x)(int) = SIG_IGN;} +#ifdef _POSIX_C_SOURCE +{void(*x)(int) = SIG_HOLD;} +T(size_t) +T(sigset_t) +T(pid_t) +T(uid_t) +T(pthread_t) +T(pthread_attr_t) +T(struct timespec) +{ +struct sigevent x; +F(int,sigev_notify) +F(int,sigev_signo) +F(union sigval,sigev_value) +{void (**y)(union sigval) = &x.sigev_notify_function;} +F(pthread_attr_t*,sigev_notify_attributes) +} +C(SIGEV_NONE) +C(SIGEV_SIGNAL) +C(SIGEV_THREAD) +{ +union sigval x; +F(int,sival_int) +F(void*,sival_ptr) +} +{int i = SIGRTMIN;} +{int i = SIGRTMAX;} +#endif +C(SIGABRT) +C(SIGFPE) +C(SIGILL) +C(SIGINT) +C(SIGSEGV) +C(SIGTERM) +#ifdef _POSIX_C_SOURCE +C(SIGALRM) +C(SIGBUS) +C(SIGCHLD) +C(SIGCONT) +C(SIGHUP) +C(SIGKILL) +C(SIGPIPE) +C(SIGQUIT) +C(SIGSTOP) +C(SIGTSTP) +C(SIGTTIN) +C(SIGTTOU) +C(SIGUSR1) +C(SIGUSR2) +C(SIGURG) +#ifdef _XOPEN_SOURCE +C(SIGSYS) +C(SIGTRAP) +C(SIGVTALRM) +C(SIGXCPU) +C(SIGXFSZ) +#endif +{ +struct sigaction x; +{void (**y)(int) = &x.sa_handler;} +F(sigset_t, sa_mask) +F(int,sa_flags) +{void (**y)(int, siginfo_t *, void *) = &x.sa_sigaction;} +} +C(SIG_BLOCK) +C(SIG_UNBLOCK) +C(SIG_SETMASK) +C(SA_NOCLDSTOP) +C(SA_RESETHAND) +C(SA_RESTART) +C(SA_SIGINFO) +C(SA_NOCLDWAIT) +C(SA_NODEFER) +#ifdef _XOPEN_SOURCE +C(SA_ONSTACK) +C(SS_ONSTACK) +C(SS_DISABLE) +C(MINSIGSTKSZ) +C(SIGSTKSZ) +#endif +T(mcontext_t) +{ +ucontext_t x; +F(ucontext_t*,uc_link) +F(sigset_t,uc_sigmask) +F(stack_t, uc_stack) +F(mcontext_t,uc_mcontext) +} +{ +stack_t x; +F(void *,ss_sp) +F(size_t,ss_size) +F(int, ss_flags) +} +{ +siginfo_t x; +F(int, si_signo) +F(int, si_code) +#ifdef _XOPEN_SOURCE +F(int, si_errno) +#endif +F(pid_t, si_pid) +F(uid_t, si_uid) +F(void *,si_addr) +F(int, si_status) +F(union sigval,si_value) +} +C(ILL_ILLOPC) +C(ILL_ILLOPN) +C(ILL_ILLADR) +C(ILL_ILLTRP) +C(ILL_PRVOPC) +C(ILL_PRVREG) +C(ILL_COPROC) +C(ILL_BADSTK) +C(FPE_INTDIV) +C(FPE_INTOVF) +C(FPE_FLTDIV) +C(FPE_FLTOVF) +C(FPE_FLTUND) +C(FPE_FLTRES) +C(FPE_FLTINV) +C(FPE_FLTSUB) +C(SEGV_MAPERR) +C(SEGV_ACCERR) +C(BUS_ADRALN) +C(BUS_ADRERR) +C(BUS_OBJERR) +#ifdef _XOPEN_SOURCE +C(TRAP_BRKPT) +C(TRAP_TRACE) +#endif +C(CLD_EXITED) +C(CLD_KILLED) +C(CLD_DUMPED) +C(CLD_TRAPPED) +C(CLD_STOPPED) +C(CLD_CONTINUED) +C(SI_USER) +C(SI_QUEUE) +C(SI_TIMER) +C(SI_ASYNCIO) +C(SI_MESGQ) +int(*p_kill)(pid_t,int) = kill; +int(*p_killpg)(pid_t,int) = killpg; +void(*p_psiginfo)(const siginfo_t*,const char*) = psiginfo; +void(*p_psignal)(int,const char*) = psignal; +int(*p_pthread_kill)(pthread_t,int) = pthread_kill; +int(*p_pthread_sigmask)(int,const sigset_t*restrict,sigset_t*restrict) = pthread_sigmask; +int(*p_sigaction)(int,const struct sigaction*restrict,struct sigaction*restrict) = sigaction; +int(*p_sigaddset)(sigset_t*,int) = sigaddset; +int(*p_sigaltstack)(const stack_t*restrict,stack_t*restrict) = sigaltstack; +int(*p_sigdelset)(sigset_t*,int) = sigdelset; +int(*p_sigemptyset)(sigset_t*) = sigemptyset; +int(*p_sigfillset)(sigset_t*) = sigfillset; +int(*p_sighold)(int) = sighold; +int(*p_sigignore)(int) = sigignore; +int(*p_siginterrupt)(int,int) = siginterrupt; +int(*p_sigismember)(const sigset_t*,int) = sigismember; +int(*p_sigpause)(int) = sigpause; +int(*p_sigpending)(sigset_t*) = sigpending; +int(*p_sigprocmask)(int,const sigset_t*restrict,sigset_t*restrict) = sigprocmask; +int(*p_sigqueue)(pid_t,int,const union sigval) = sigqueue; +int(*p_sigrelse)(int) = sigrelse; +void(*(*p_sigset)(int,void(*)(int)))(int) = sigset; +int(*p_sigsuspend)(const sigset_t*) = sigsuspend; +int(*p_sigtimedwait)(const sigset_t*restrict,siginfo_t*restrict,const struct timespec*restrict) = sigtimedwait; +int(*p_sigwait)(const sigset_t*restrict,int*restrict) = sigwait; +int(*p_sigwaitinfo)(const sigset_t*restrict,siginfo_t*restrict) = sigwaitinfo; +#endif +int(*p_raise)(int) = raise; +void(*(*p_signal)(int,void(*)(int)))(int) = signal; +} -- 2.20.1