Esempio n. 1
0
static void
_signal_log(int sig)
{
   fprintf(stderr, PACKAGE": signal %d received reopen the log file\n", sig);
   elsa_close_log();
   _open_log();
}
Esempio n. 2
0
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);
}