23 lines · 443 B · C
RawDownload
#include "threadimpl.h" voidmakecontext(ucontext_t *ucp, void (*func)(void), int argc, ...){	int *sp; 	sp = (int*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/4;	sp -= argc;	memmove(sp, &argc+1, argc*sizeof(int));	*--sp = 0;		/* return address */	ucp->uc_mcontext.mc_eip = (long)func;	ucp->uc_mcontext.mc_esp = (int)sp;} intswapcontext(ucontext_t *oucp, ucontext_t *ucp){	if(getcontext(oucp) == 0)		setcontext(ucp);	return 0;}