OSX compatibility
[m6w6/btr] / bin / btr-setsid.c
diff --git a/bin/btr-setsid.c b/bin/btr-setsid.c
new file mode 100644 (file)
index 0000000..f293efa
--- /dev/null
@@ -0,0 +1,34 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+       if (argc < 2) {
+               fprintf(stderr, "Usage: %s <program> [args...]\n", argv[0]);
+               return EXIT_FAILURE;
+       }
+
+       if (getpid() == getpgrp()) {
+               pid_t pid = fork();
+
+               switch (pid) {
+               case 0:
+                       break;
+               case -1:
+                       perror("fork");
+                       return EXIT_FAILURE;
+               default:
+                       return EXIT_SUCCESS;
+               }
+       }
+
+       if (setsid() < 0) {
+               perror("setsid");
+               return EXIT_FAILURE;
+       }
+
+       execvp(argv[1], &argv[1]);
+       perror("exec");
+       return EXIT_FAILURE;
+}