[BACK]Return to cmd-new-window.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/cmd-new-window.c between version 1.34 and 1.35

version 1.34, 2013/10/10 12:07:36 version 1.35, 2013/10/10 12:26:35
Line 18 
Line 18 
   
 #include <sys/types.h>  #include <sys/types.h>
   
   #include <errno.h>
   #include <fcntl.h>
 #include <stdlib.h>  #include <stdlib.h>
   #include <string.h>
   #include <unistd.h>
   
 #include "tmux.h"  #include "tmux.h"
   
Line 45 
Line 49 
         struct session          *s;          struct session          *s;
         struct winlink          *wl;          struct winlink          *wl;
         struct client           *c;          struct client           *c;
         const char              *cmd, *cwd, *template;          const char              *cmd, *template;
         char                    *cause, *cp;          char                    *cause, *cp;
         int                      idx, last, detached;          int                      idx, last, detached, cwd, fd = -1;
         struct format_tree      *ft;          struct format_tree      *ft;
   
         if (args_has(args, 'a')) {          if (args_has(args, 'a')) {
Line 102 
Line 106 
                 cmd = options_get_string(&s->options, "default-command");                  cmd = options_get_string(&s->options, "default-command");
         else          else
                 cmd = args->argv[0];                  cmd = args->argv[0];
         cwd = cmdq_default_path(cmdq, args_get(args, 'c'));  
   
           if (args_has(args, 'c')) {
                   ft = format_create();
                   if ((c = cmd_find_client(cmdq, NULL, 1)) != NULL)
                           format_client(ft, c);
                   format_session(ft, s);
                   format_winlink(ft, s, s->curw);
                   format_window_pane(ft, s->curw->window->active);
                   cp = format_expand(ft, args_get(args, 'c'));
                   format_free(ft);
   
                   fd = open(cp, O_RDONLY|O_DIRECTORY);
                   free(cp);
                   if (fd == -1) {
                           cmdq_error(cmdq, "bad working directory: %s",
                               strerror(errno));
                           return (CMD_RETURN_ERROR);
                   }
                   cwd = fd;
           } else if (cmdq->client->session == NULL)
                   cwd = cmdq->client->cwd;
           else
                   cwd = s->cwd;
   
         if (idx == -1)          if (idx == -1)
                 idx = -1 - options_get_number(&s->options, "base-index");                  idx = -1 - options_get_number(&s->options, "base-index");
         wl = session_new(s, args_get(args, 'n'), cmd, cwd, idx, &cause);          wl = session_new(s, args_get(args, 'n'), cmd, cwd, idx, &cause);
         if (wl == NULL) {          if (wl == NULL) {
                 cmdq_error(cmdq, "create window failed: %s", cause);                  cmdq_error(cmdq, "create window failed: %s", cause);
                 free(cause);                  free(cause);
                 return (CMD_RETURN_ERROR);                  goto error;
         }          }
         if (!detached) {          if (!detached) {
                 session_select(s, wl->idx);                  session_select(s, wl->idx);
Line 136 
Line 162 
                 format_free(ft);                  format_free(ft);
         }          }
   
           if (fd != -1)
                   close(fd);
         return (CMD_RETURN_NORMAL);          return (CMD_RETURN_NORMAL);
   
   error:
           if (fd != -1)
                   close(fd);
           return (CMD_RETURN_ERROR);
 }  }

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.35