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

Diff for /src/usr.bin/tmux/Attic/cmd-list.c between version 1.11 and 1.12

version 1.11, 2013/03/22 15:49:55 version 1.12, 2013/03/24 09:54:10
Line 24 
Line 24 
 #include "tmux.h"  #include "tmux.h"
   
 struct cmd_list *  struct cmd_list *
 cmd_list_parse(int argc, char **argv, char **cause)  cmd_list_parse(int argc, char **argv, const char* file, u_int line,
       char **cause)
 {  {
         struct cmd_list *cmdlist;          struct cmd_list *cmdlist;
         struct cmd      *cmd;          struct cmd      *cmd;
Line 34 
Line 35 
   
         copy_argv = cmd_copy_argv(argc, argv);          copy_argv = cmd_copy_argv(argc, argv);
   
         cmdlist = xmalloc(sizeof *cmdlist);          cmdlist = xcalloc(1, sizeof *cmdlist);
         cmdlist->references = 1;          cmdlist->references = 1;
         TAILQ_INIT(&cmdlist->list);          TAILQ_INIT(&cmdlist->list);
   
Line 55 
Line 56 
                 if (arglen != 1)                  if (arglen != 1)
                         new_argc++;                          new_argc++;
   
                 cmd = cmd_parse(new_argc, new_argv, cause);                  cmd = cmd_parse(new_argc, new_argv, file, line, cause);
                 if (cmd == NULL)                  if (cmd == NULL)
                         goto bad;                          goto bad;
                 TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry);                  TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry);
Line 64 
Line 65 
         }          }
   
         if (lastsplit != argc) {          if (lastsplit != argc) {
                 cmd = cmd_parse(argc - lastsplit, copy_argv + lastsplit, cause);                  cmd = cmd_parse(argc - lastsplit, copy_argv + lastsplit,
                       file, line, cause);
                 if (cmd == NULL)                  if (cmd == NULL)
                         goto bad;                          goto bad;
                 TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry);                  TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry);
Line 79 
Line 81 
         return (NULL);          return (NULL);
 }  }
   
 enum cmd_retval  
 cmd_list_exec(struct cmd_list *cmdlist, struct cmd_ctx *ctx)  
 {  
         struct client   *c = ctx->curclient;  
         struct cmd      *cmd;  
         enum cmd_retval  retval;  
         int              guards, n;  
   
         guards = 0;  
         if (c != NULL && c->session != NULL)  
                 guards = c->flags & CLIENT_CONTROL;  
   
         notify_disable();  
   
         retval = 0;  
         TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {  
                 if (guards)  
                         ctx->print(ctx, "%%begin");  
                 n = cmd->entry->exec(cmd, ctx);  
                 if (guards)  
                         ctx->print(ctx, "%%end");  
   
                 switch (n)  
                 {  
                 case CMD_RETURN_ERROR:  
                         return (CMD_RETURN_ERROR);  
                 case CMD_RETURN_ATTACH:  
                         /* Client is being attached (send MSG_READY). */  
                         retval = CMD_RETURN_ATTACH;  
   
                         /*  
                          * Mangle the context to treat any following commands  
                          * as if they were called from inside.  
                          */  
                         if (ctx->curclient == NULL) {  
                                 ctx->curclient = ctx->cmdclient;  
                                 ctx->cmdclient = NULL;  
   
                                 ctx->error = key_bindings_error;  
                                 ctx->print = key_bindings_print;  
                                 ctx->info = key_bindings_info;  
                         }  
                         break;  
                 case CMD_RETURN_YIELD:  
                         if (retval == CMD_RETURN_NORMAL)  
                                 retval = CMD_RETURN_YIELD;  
                         break;  
                 case CMD_RETURN_NORMAL:  
                         break;  
                 }  
         }  
   
         notify_enable();  
         return (retval);  
 }  
   
 void  void
 cmd_list_free(struct cmd_list *cmdlist)  cmd_list_free(struct cmd_list *cmdlist)
 {  {
         struct cmd      *cmd;          struct cmd      *cmd, *cmd1;
   
         if (--cmdlist->references != 0)          if (--cmdlist->references != 0)
                 return;                  return;
   
         while (!TAILQ_EMPTY(&cmdlist->list)) {          TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) {
                 cmd = TAILQ_FIRST(&cmdlist->list);  
                 TAILQ_REMOVE(&cmdlist->list, cmd, qentry);                  TAILQ_REMOVE(&cmdlist->list, cmd, qentry);
                 args_free(cmd->args);                  args_free(cmd->args);
                   free(cmd->file);
                 free(cmd);                  free(cmd);
         }          }
   
         free(cmdlist);          free(cmdlist);
 }  }
   

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12