#include <ctype.h>
#include <time.h>
#include <sys/stat.h>
+#include <limits.h>
+#include <errno.h>
#ifdef UCLINUX
/* <getopt.h> or "getopt.h" would include insufficient getopt.h from uClinux */
for(i = 2; i < argc; i++)
nargv[i-2] = argv[i];
- nargv[argc] = NULL; /* required by gnokiid() for execv(3) */
+ nargv[argc-2] = NULL; /* required by gnokiid() for execv(3) */
if(checkargs(c, gals, nargc)) {
#ifdef UCLINUX
+static void gnokiid_SIGCHLD(int signo)
+{
+ fprintf (stderr, _("Child process exited, aborting...\n"));
+ exit(2);
+}
+
static int gnokiid(int argc, char *argv[])
{
bool DebugMode; /* When true, run in debug mode */
#ifdef DEBUG
fprintf (stderr, _("Spawning gnokiid startup child process \"%s\"...\n"), *argv);
#endif
- /* default action for SIGCHLD is SIG_IGN, should be OK */
+ signal(SIGCHLD,gnokiid_SIGCHLD);
errno=0;
switch (vfork()) {
case -1: /* vfork() failure */
- fprintf (stderr, _("vfork() failed! (%m)\n"));
+ fprintf (stderr, _("vfork() failed! (%s)\n"),strerror(errno));
return -1;
case 0: /* child */
execv(*argv,argv);
- fprintf (stderr, _("Spawn of child process failed! (%m)\n"));
+ fprintf (stderr, _("Spawn of child process failed! (%s)\n"),strerror(errno));
_exit(9);
break;
default: /* parent */