[BACK]Return to job.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/job.c between version 1.67 and 1.68

version 1.67, 2022/02/01 12:05:42 version 1.68, 2024/05/15 09:59:12
Line 79 
Line 79 
         struct environ   *env;          struct environ   *env;
         pid_t             pid;          pid_t             pid;
         int               nullfd, out[2], master;          int               nullfd, out[2], master;
         const char       *home;          const char       *home, *shell;
         sigset_t          set, oldset;          sigset_t          set, oldset;
         struct winsize    ws;          struct winsize    ws;
         char            **argvp, tty[TTY_NAME_MAX];          char            **argvp, tty[TTY_NAME_MAX], *argv0;
   
         /*          /*
          * Do not set TERM during .tmux.conf, it is nice to be able to use           * Do not set TERM during .tmux.conf (second argument here), it is nice
          * if-shell to decide on default-terminal based on outside TERM.           * to be able to use if-shell to decide on default-terminal based on
            * outside TERM.
          */           */
         env = environ_for_session(s, !cfg_finished);          env = environ_for_session(s, !cfg_finished);
         if (e != NULL)          if (e != NULL)
                 environ_copy(e, env);                  environ_copy(e, env);
   
           if (s != NULL)
                   shell = options_get_string(s->options, "default-shell");
           else
                   shell = options_get_string(global_s_options, "default-shell");
           if (!checkshell(shell))
                   shell = _PATH_BSHELL;
           argv0 = shell_argv0(shell, 0);
   
         sigfillset(&set);          sigfillset(&set);
         sigprocmask(SIG_BLOCK, &set, &oldset);          sigprocmask(SIG_BLOCK, &set, &oldset);
   
Line 107 
Line 116 
         }          }
         if (cmd == NULL) {          if (cmd == NULL) {
                 cmd_log_argv(argc, argv, "%s:", __func__);                  cmd_log_argv(argc, argv, "%s:", __func__);
                 log_debug("%s: cwd=%s", __func__, cwd == NULL ? "" : cwd);                  log_debug("%s: cwd=%s, shell=%s", __func__,
                       cwd == NULL ? "" : cwd, shell);
         } else {          } else {
                 log_debug("%s: cmd=%s, cwd=%s", __func__, cmd,                  log_debug("%s: cmd=%s, cwd=%s, shell=%s", __func__, cmd,
                     cwd == NULL ? "" : cwd);                      cwd == NULL ? "" : cwd, shell);
         }          }
   
         switch (pid) {          switch (pid) {
Line 152 
Line 162 
                 closefrom(STDERR_FILENO + 1);                  closefrom(STDERR_FILENO + 1);
   
                 if (cmd != NULL) {                  if (cmd != NULL) {
                         execl(_PATH_BSHELL, "sh", "-c", cmd, (char *) NULL);                          setenv("SHELL", shell, 1);
                           execl(shell, argv0, "-c", cmd, (char *)NULL);
                         fatal("execl failed");                          fatal("execl failed");
                 } else {                  } else {
                         argvp = cmd_copy_argv(argc, argv);                          argvp = cmd_copy_argv(argc, argv);
Line 163 
Line 174 
   
         sigprocmask(SIG_SETMASK, &oldset, NULL);          sigprocmask(SIG_SETMASK, &oldset, NULL);
         environ_free(env);          environ_free(env);
           free(argv0);
   
         job = xmalloc(sizeof *job);          job = xmalloc(sizeof *job);
         job->state = JOB_RUNNING;          job->state = JOB_RUNNING;
Line 196 
Line 208 
                 fatalx("out of memory");                  fatalx("out of memory");
         bufferevent_enable(job->event, EV_READ|EV_WRITE);          bufferevent_enable(job->event, EV_READ|EV_WRITE);
   
         log_debug("run job %p: %s, pid %ld", job, job->cmd, (long) job->pid);          log_debug("run job %p: %s, pid %ld", job, job->cmd, (long)job->pid);
         return (job);          return (job);
   
 fail:  fail:
         sigprocmask(SIG_SETMASK, &oldset, NULL);          sigprocmask(SIG_SETMASK, &oldset, NULL);
         environ_free(env);          environ_free(env);
           free(argv0);
         return (NULL);          return (NULL);
 }  }
   

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.68