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

Diff for /src/usr.bin/tmux/cmd-source-file.c between version 1.38 and 1.39

version 1.38, 2019/05/23 11:13:30 version 1.39, 2019/05/28 11:46:30
Line 38 
Line 38 
         .name = "source-file",          .name = "source-file",
         .alias = "source",          .alias = "source",
   
         .args = { "nq", 1, 1 },          .args = { "nq", 1, -1 },
         .usage = "[-nq] path",          .usage = "[-nq] path ...",
   
         .flags = 0,          .flags = 0,
         .exec = cmd_source_file_exec          .exec = cmd_source_file_exec
Line 53 
Line 53 
         struct client           *c = item->client;          struct client           *c = item->client;
         struct cmdq_item        *new_item, *after;          struct cmdq_item        *new_item, *after;
         enum cmd_retval          retval;          enum cmd_retval          retval;
         char                    *pattern, *tmp;          char                    *pattern, *cwd;
         const char              *path = args->argv[0];          const char              *path, *error;
         glob_t                   g;          glob_t                   g;
         u_int                    i;          int                      i;
           u_int                    j;
   
         if (args_has(args, 'q'))          if (args_has(args, 'q'))
                 flags |= CMD_PARSE_QUIET;                  flags |= CMD_PARSE_QUIET;
         if (args_has(args, 'n'))          if (args_has(args, 'n'))
                 flags |= CMD_PARSE_PARSEONLY;                  flags |= CMD_PARSE_PARSEONLY;
           utf8_stravis(&cwd, server_client_get_cwd(c, NULL), VIS_GLOB);
   
         if (*path == '/')  
                 pattern = xstrdup(path);  
         else {  
                 utf8_stravis(&tmp, server_client_get_cwd(c, NULL), VIS_GLOB);  
                 xasprintf(&pattern, "%s/%s", tmp, path);  
                 free(tmp);  
         }  
         log_debug("%s: %s", __func__, pattern);  
   
         retval = CMD_RETURN_NORMAL;          retval = CMD_RETURN_NORMAL;
         if (glob(pattern, 0, NULL, &g) != 0) {          for (i = 0; i < args->argc; i++) {
                 if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) {                  path = args->argv[i];
                         cmdq_error(item, "%s: %s", path, strerror(errno));                  if (*path == '/')
                         retval = CMD_RETURN_ERROR;                          pattern = xstrdup(path);
                   else
                           xasprintf(&pattern, "%s/%s", cwd, path);
                   log_debug("%s: %s", __func__, pattern);
   
                   if (glob(pattern, 0, NULL, &g) != 0) {
                           error = strerror(errno);
                           if (errno != ENOENT || (~flags & CMD_PARSE_QUIET)) {
                                   cmdq_error(item, "%s: %s", path, error);
                                   retval = CMD_RETURN_ERROR;
                           }
                           free(pattern);
                           continue;
                 }                  }
                 free(pattern);                  free(pattern);
                 return (retval);  
         }  
         free(pattern);  
   
         after = item;                  after = item;
         for (i = 0; i < (u_int)g.gl_pathc; i++) {                  for (j = 0; j < g.gl_pathc; j++) {
                 if (load_cfg(g.gl_pathv[i], c, after, flags, &new_item) < 0)                          path = g.gl_pathv[j];
                         retval = CMD_RETURN_ERROR;                          if (load_cfg(path, c, after, flags, &new_item) < 0)
                 else if (new_item != NULL)                                  retval = CMD_RETURN_ERROR;
                         after = new_item;                          else if (new_item != NULL)
                                   after = new_item;
                   }
                   globfree(&g);
         }          }
         if (cfg_finished) {          if (cfg_finished) {
                 new_item = cmdq_get_callback(cmd_source_file_done, NULL);                  new_item = cmdq_get_callback(cmd_source_file_done, NULL);
                 cmdq_insert_after(item, new_item);                  cmdq_insert_after(item, new_item);
         }          }
   
         globfree(&g);          free(cwd);
         return (retval);          return (retval);
 }  }
   

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.39