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

Diff for /src/usr.bin/tmux/cmd-split-window.c between version 1.60 and 1.61

version 1.60, 2015/10/28 09:51:55 version 1.61, 2015/10/31 08:13:58
Line 53 
Line 53 
         struct window           *w;          struct window           *w;
         struct window_pane      *wp, *new_wp = NULL;          struct window_pane      *wp, *new_wp = NULL;
         struct environ          *env;          struct environ          *env;
         const char              *cmd, *path, *shell, *template;          const char              *cmd, *path, *shell, *template, *cwd, *to_free;
         char                   **argv, *cause, *new_cause, *cp;          char                   **argv, *cause, *new_cause, *cp;
         u_int                    hlimit;          u_int                    hlimit;
         int                      argc, size, percentage, cwd, fd = -1;          int                      argc, size, percentage;
         enum layout_type         type;          enum layout_type         type;
         struct layout_cell      *lc;          struct layout_cell      *lc;
         struct format_tree      *ft;          struct format_tree      *ft;
Line 86 
Line 86 
                 argv = args->argv;                  argv = args->argv;
         }          }
   
           to_free = NULL;
         if (args_has(args, 'c')) {          if (args_has(args, 'c')) {
                 ft = format_create();                  ft = format_create();
                 format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, NULL,                  format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, NULL,
                     NULL);                      NULL);
                 cp = format_expand(ft, args_get(args, 'c'));                  to_free = cwd = format_expand(ft, args_get(args, 'c'));
                 format_free(ft);                  format_free(ft);
   
                 if (cp != NULL && *cp != '\0') {                  if (access(cwd, X_OK) != 0) {
                         fd = open(cp, O_RDONLY|O_DIRECTORY);                          free((void *)cwd);
                         free(cp);                          cmdq_error(cmdq, "bad working directory: %s",
                         if (fd == -1) {                              strerror(errno));
                                 cmdq_error(cmdq, "bad working directory: %s",                          return (CMD_RETURN_ERROR);
                                     strerror(errno));                  }
                                 return (CMD_RETURN_ERROR);  
                         }  
                 } else  
                         free(cp);  
                 cwd = fd;  
         } else if (cmdq->client != NULL && cmdq->client->session == NULL)          } else if (cmdq->client != NULL && cmdq->client->session == NULL)
                 cwd = cmdq->client->cwd;                  cwd = cmdq->client->cwd;
         else          else
Line 188 
Line 184 
         }          }
         notify_window_layout_changed(w);          notify_window_layout_changed(w);
   
         if (fd != -1)          if (to_free != NULL)
                 close(fd);                  free((void *)to_free);
         return (CMD_RETURN_NORMAL);          return (CMD_RETURN_NORMAL);
   
 error:  error:
Line 200 
Line 196 
         }          }
         cmdq_error(cmdq, "create pane failed: %s", cause);          cmdq_error(cmdq, "create pane failed: %s", cause);
         free(cause);          free(cause);
         if (fd != -1)  
                 close(fd);          if (to_free != NULL)
                   free((void *)to_free);
         return (CMD_RETURN_ERROR);          return (CMD_RETURN_ERROR);
 }  }

Legend:
Removed from v.1.60  
changed lines
  Added in v.1.61