static void _signal_log(int sig) { fprintf(stderr, PACKAGE": signal %d received reopen the log file\n", sig); elsa_close_log(); _open_log(); }
static int _xserver_start() { char *buf = NULL; char **args = NULL; pid_t pid; pid = fork(); if (!pid) { char *token; int num_token = 0; elsa_close_log(); signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGUSR1, SIG_IGN); if (!(buf = strdup(elsa_config->command.xinit_args))) goto xserver_error; token = strtok(buf, " "); while(token) { ++num_token; token = strtok(NULL, " "); } if (buf) free(buf); if (num_token) { int i; if (!(buf = strdup(elsa_config->command.xinit_args))) goto xserver_error; if (!(args = calloc(num_token + 2, sizeof(char *)))) { if (buf) free(buf); goto xserver_error; } args[0] = (char *)elsa_config->command.xinit_path; token = strtok(buf, " "); ++num_token; for(i = 1; i < num_token; ++i) { if (token) args[i] = token; token = strtok(NULL, " "); } args[num_token] = NULL; } else { if (!(args = calloc(2, sizeof(char*)))) goto xserver_error; args[0] = (char *)elsa_config->command.xinit_path; args[1] = NULL; } execv(args[0], args); if (buf) free(buf); if (args) free(args); fprintf(stderr, PACKAGE": Couldn't launch Xserver ...\n"); } return pid; xserver_error: _exit(EXIT_FAILURE); }