X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/77ce8d32ddc82aa2c106a8e2401537d4c16d57c0..20facf82f92baf2401e73847b694eea761622a4c:/src/xbt/win32_ucontext.c?ds=sidebyside diff --git a/src/xbt/win32_ucontext.c b/src/xbt/win32_ucontext.c index cbbe8eb40a..5d49317e1a 100644 --- a/src/xbt/win32_ucontext.c +++ b/src/xbt/win32_ucontext.c @@ -15,79 +15,79 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with QueueUserAPCEx in the file COPYING.LIB; + * License along with SimGrid in the file LICENSE-LGPL-2.1; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "win32_ucontext.h" int getcontext(ucontext_t * ucp) -{ - int ret; +{ + int ret; /* Retrieve the full machine context */ - ucp->uc_mcontext.ContextFlags = CONTEXT_FULL; - ret = GetThreadContext(GetCurrentThread(), &ucp->uc_mcontext); - return (ret == 0) ? -1 : 0; - } - + ucp->uc_mcontext.ContextFlags = CONTEXT_FULL; + ret = GetThreadContext(GetCurrentThread(), &ucp->uc_mcontext); + return (ret == 0) ? -1 : 0; + } + int setcontext(const ucontext_t * ucp) -{ - int ret; +{ + int ret; /* Restore the full machine context (already set) */ - ret = SetThreadContext(GetCurrentThread(), &ucp->uc_mcontext); - return (ret == 0) ? -1 : 0; - } - + ret = SetThreadContext(GetCurrentThread(), &ucp->uc_mcontext); + return (ret == 0) ? -1 : 0; + } + int makecontext(ucontext_t * ucp, void (*func) (), int argc, ...) -{ - int i; - va_list ap; - char *sp; +{ + int i; + va_list ap; + char *sp; /* Stack grows down */ - sp = (char *) (size_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size; + sp = (char *) (size_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size; /* Reserve stack space for the arguments (maximum possible: argc*(8 bytes per argument)) */ - sp -= argc * 8; - if (sp < (char *) ucp->uc_stack.ss_sp) { + sp -= argc * 8; + if (sp < (char *) ucp->uc_stack.ss_sp) { /* errno = ENOMEM; */ - return -1; - } + return -1; + } /* Set the instruction and the stack pointer */ - ucp->uc_mcontext.Eip = (unsigned long) func; - ucp->uc_mcontext.Esp = (unsigned long) sp - 4; + ucp->uc_mcontext.Eip = (unsigned long) func; + ucp->uc_mcontext.Esp = (unsigned long) sp - 4; /* Save/Restore the full machine context */ - ucp->uc_mcontext.ContextFlags = CONTEXT_FULL; + ucp->uc_mcontext.ContextFlags = CONTEXT_FULL; /* Copy the arguments */ - va_start(ap, argc); - for (i = 0; i < argc; i++) { - memcpy(sp, ap, 8); - ap += 8; - sp += 8; - } - va_end(ap); - return 0; - } - + va_start(ap, argc); + for (i = 0; i < argc; i++) { + memcpy(sp, ap, 8); + ap += 8; + sp += 8; + } + va_end(ap); + return 0; + } + int swapcontext(ucontext_t * oucp, const ucontext_t * ucp) -{ - int ret; - if ((oucp == NULL) || (ucp == NULL)) { +{ + int ret; + if ((oucp == NULL) || (ucp == NULL)) { /*errno = EINVAL; */ - return -1; - } - ret = getcontext(oucp); - if (ret == 0) { - ret = setcontext(ucp); - } - return ret; - } - + return -1; + } + ret = getcontext(oucp); + if (ret == 0) { + ret = setcontext(ucp); + } + return ret; + } +