- char active_name[1024];
- int fd;
-
- sprintf (active_name, "kernel.pid.%d", id);
- fd = open (active_name, O_RDONLY);
- if (fd == -1)
- return 0;
- close (fd);
- return 1;
+ pid_t pid;
+ int i;
+ char **argv_p;
+ char userid_option[20];
+
+ argv_p = malloc (sizeof(*argv_p)*(argc+2));
+ if (!argv_p)
+ {
+ gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, module, "malloc fail");
+ exit (1);
+ }
+ argv_p[0] = "kernel";
+ for (i = 1; i<argc; i++)
+ argv_p[i] = argv[i];
+ sprintf (userid_option, "-i%d", id);
+ argv_p[i++] = userid_option;
+ argv_p[i++] = NULL;
+
+ gw_log (GW_LOG_DEBUG, module, "Starting kernel");
+ pid = fork ();
+ if (pid == -1)
+ {
+ gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, module, "fork");
+ exit (1);
+ }
+ if (!pid)
+ {
+ execvp ("kernel", argv_p);
+ gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, module, "execvp");
+ exit (1);
+ }
+}
+
+static void deliver (struct str_queue *sq, GIP gip)
+{
+ int index = 0;
+ char *msg;
+
+ gip_wline (gip, "mail\n");
+ while ((msg = str_queue_get (sq, index++)))
+ gip_wline (gip, msg);
+ gip_wline (gip, "\001");