--- Macaulay2-0.9.95/Macaulay2/d/M2lib.c~ 2006-10-15 23:22:55.000000000 +0100
+++ Macaulay2-0.9.95/Macaulay2/d/M2lib.c 2006-12-28 12:59:30.000000000 +0000
@@ -368,7 +368,19 @@ char **argv;
personality(oldpersonality | ADDR_NO_RANDOMIZE);
newpersonality = personality(-1);
personality(oldpersonality | ADDR_NO_RANDOMIZE); /* just in case the previous line sets the personality to -1, which can happen */
- if ((newpersonality & ADDR_NO_RANDOMIZE) != 0) return execvp(argv[0],argv);
+ if ((newpersonality & ADDR_NO_RANDOMIZE) != 0) {
+ /* Sometimes the personality isn't inherited.
+ Prevent endless loops by adding --no-personality to
+ the command line */
+ char **new_argv = malloc((argc+2) * sizeof(char *));
+ if (!new_argv) fatal("out of memory");
+
+ new_argv[0] = argv[0];
+ new_argv[1] = "--no-personality";
+ memcpy(&new_argv[2], &argv[1], sizeof(char *) * (argc));
+
+ return execvp(new_argv[0],new_argv);
+ }
}
else personality(oldpersonality);
}