posix: added setpgrp() and, if sgi, setsid() and setpgid(pid, pgid)
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 95e5907..0bc0f91 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -34,6 +34,10 @@
#define NO_UNAME
#endif
+#ifdef __sgi
+#define DO_PG
+#endif
+
#include <signal.h>
#include <string.h>
#include <setjmp.h>
@@ -637,6 +641,23 @@
}
static object *
+posix_setpgrp(self, args)
+ object *self;
+ object *args;
+{
+ if (!getnoarg(args))
+ return NULL;
+#ifdef SYSV
+ if (setpgrp() < 0)
+#else
+ if (setpgrp(0, 0) < 0)
+#endif
+ return err_errno(PosixError);
+ INCREF(None);
+ return None;
+}
+
+static object *
posix_getppid(self, args)
object *self;
object *args;
@@ -815,7 +836,38 @@
return tuple;
}
-#endif
+#endif /* DO_TIMES */
+
+#ifdef DO_PG
+
+static object *
+posix_setsid(self, args)
+ object *self;
+ object *args;
+{
+ if (!getnoarg(args))
+ return NULL;
+ if (setsid() < 0)
+ err_errno(PosixError);
+ INCREF(None);
+ return None;
+}
+
+static object *
+posix_setpgid(self, args)
+ object *self;
+ object *args;
+{
+ int pid, pgrp;
+ if (!getargs(args, "(ii)", &pid, &pgrp))
+ return NULL;
+ if (setpgid(pid, pgrp) < 0)
+ err_errno(PosixError);
+ INCREF(None);
+ return None;
+}
+
+#endif /* DO_PG */
static struct methodlist posix_methods[] = {
@@ -859,10 +911,16 @@
{"getuid", posix_getuid},
{"kill", posix_kill},
{"popen", posix_popen},
+ {"setpgrp", posix_setpgrp},
{"wait", posix_wait},
{"waitpid", posix_waitpid},
#endif
+#ifdef DO_PG
+ {"setsid", posix_setsid},
+ {"setpgid", posix_setpgid},
+#endif
+
{NULL, NULL} /* Sentinel */
};