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

Diff for /src/usr.bin/tmux/Attic/cmd-string.c between version 1.26 and 1.27

version 1.26, 2017/01/16 14:49:14 version 1.27, 2017/01/16 14:52:25
Line 54 
Line 54 
         (*p)--;          (*p)--;
 }  }
   
 int  struct cmd_list *
 cmd_string_split(const char *s, int *rargc, char ***rargv)  cmd_string_parse(const char *s, const char *file, u_int line, char **cause)
 {  {
         size_t          p = 0;          size_t            p = 0;
         int             ch, argc = 0, append = 0;          int               ch, i, argc = 0;
         char          **argv = NULL, *buf = NULL, *t;          char            **argv = NULL, *buf = NULL, *t;
         const char     *whitespace, *equals;          const char       *whitespace, *equals;
         size_t          len = 0;          size_t            len = 0;
           struct cmd_list  *cmdlist = NULL;
   
           *cause = NULL;
         for (;;) {          for (;;) {
                 ch = cmd_string_getc(s, &p);                  ch = cmd_string_getc(s, &p);
                 switch (ch) {                  switch (ch) {
Line 113 
Line 115 
                                 argc--;                                  argc--;
                                 memmove(argv, argv + 1, argc * (sizeof *argv));                                  memmove(argv, argv + 1, argc * (sizeof *argv));
                         }                          }
                         goto done;                          if (argc == 0)
                                   goto out;
   
                           cmdlist = cmd_list_parse(argc, argv, file, line, cause);
                           goto out;
                 case '~':                  case '~':
                         if (buf != NULL) {                          if (buf == NULL) {
                                 append = 1;                                  t = cmd_string_expand_tilde(s, &p);
                                   if (t == NULL)
                                           goto error;
                                   cmd_string_copy(&buf, t, &len);
                                 break;                                  break;
                         }                          }
                         t = cmd_string_expand_tilde(s, &p);                          /* FALLTHROUGH */
                         if (t == NULL)  
                                 goto error;  
                         cmd_string_copy(&buf, t, &len);  
                         break;  
                 default:                  default:
                         append = 1;  
                         break;  
                 }  
                 if (append) {  
                         if (len >= SIZE_MAX - 2)                          if (len >= SIZE_MAX - 2)
                                 goto error;                                  goto error;
   
                         buf = xrealloc(buf, len + 1);                          buf = xrealloc(buf, len + 1);
                         buf[len++] = ch;                          buf[len++] = ch;
                           break;
                 }                  }
                 append = 0;  
         }          }
   
 done:  error:
         *rargc = argc;          xasprintf(cause, "invalid or unknown command: %s", s);
         *rargv = argv;  
   
   out:
         free(buf);          free(buf);
         return (0);  
   
 error:          if (argv != NULL) {
         if (argv != NULL)                  for (i = 0; i < argc; i++)
                 cmd_free_argv(argc, argv);                          free(argv[i]);
         free(buf);                  free(argv);
         return (-1);  
 }  
   
 struct cmd_list *  
 cmd_string_parse(const char *s, const char *file, u_int line, char **cause)  
 {  
         struct cmd_list  *cmdlist = NULL;  
         int               argc;  
         char            **argv;  
   
         *cause = NULL;  
         if (cmd_string_split(s, &argc, &argv) != 0)  
                 goto error;  
         if (argc != 0) {  
                 cmdlist = cmd_list_parse(argc, argv, file, line, cause);  
                 if (cmdlist == NULL) {  
                         cmd_free_argv(argc, argv);  
                         goto error;  
                 }  
         }          }
         cmd_free_argv(argc, argv);  
         return (cmdlist);  
   
 error:          return (cmdlist);
         xasprintf(cause, "invalid or unknown command: %s", s);  
         return (NULL);  
 }  }
   
 static void  static void

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27