-/* Copyright (c) 2010, 2014. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010, 2014, 2016. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#ifdef __APPLE__
+#define _XOPEN_SOURCE 700
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>
static void child(void)
{
+ /* switch back to the main context */
if (swapcontext(&uc_child, &uc_main) != 0)
exit(2);
}
int main(int argc, char *argv[])
{
- FILE *fp;
- void *stack;
-
- /* the default is that it fails */
- if ((fp = fopen("conftestval", "w")) == NULL)
- exit(3);
- fprintf(fp, "no\n");
- fclose(fp);
+ void *stack = malloc(64 * 1024);
/* configure a child user-space context */
- if ((stack = malloc(64 * 1024)) == NULL)
- exit(4);
+ if (stack == NULL)
+ exit(3);
if (getcontext(&uc_child) != 0)
- exit(5);
+ exit(4);
uc_child.uc_link = NULL;
uc_child.uc_stack.ss_sp = (char *) stack + (32 * 1024);
uc_child.uc_stack.ss_size = 32 * 1024;
/* switch into the user context */
if (swapcontext(&uc_main, &uc_child) != 0)
- exit(6);
+ exit(5);
/* Fine, child came home */
- if ((fp = fopen("conftestval", "w")) == NULL)
- exit(7);
- fprintf(fp, "yes\n");
- fclose(fp);
+ printf("yes\n");
/* die successfully */
- exit(0);
- return 1;
+ return 0;
}