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

Diff for /src/usr.bin/tmux/cmd.c between version 1.9 and 1.10

version 1.9, 2009/07/24 18:46:40 version 1.10, 2009/07/26 12:58:44
Line 109 
Line 109 
 struct winlink  *cmd_lookup_window(struct session *, const char *, int *);  struct winlink  *cmd_lookup_window(struct session *, const char *, int *);
 int              cmd_lookup_index(struct session *, const char *, int *);  int              cmd_lookup_index(struct session *, const char *, int *);
   
   int
   cmd_pack_argv(int argc, char **argv, char *buf, size_t len)
   {
           size_t  arglen;
           int     i;
   
           *buf = '\0';
           for (i = 0; i < argc; i++) {
                   if (strlcpy(buf, argv[i], len) >= len)
                           return (-1);
                   arglen = strlen(argv[i]) + 1;
                   buf += arglen;
                   len -= arglen;
           }
   
           return (0);
   }
   
   int
   cmd_unpack_argv(char *buf, size_t len, int argc, char ***argv)
   {
           int     i;
           size_t  arglen;
   
           if (argc == 0)
                   return (0);
           *argv = xcalloc(argc, sizeof **argv);
   
           buf[len - 1] = '\0';
           for (i = 0; i < argc; i++) {
                   if (len == 0) {
                           cmd_free_argv(argc, *argv);
                           return (-1);
                   }
   
                   arglen = strlen(buf) + 1;
                   (*argv)[i] = xstrdup(buf);
                   buf += arglen;
                   len -= arglen;
           }
   
           return (0);
   }
   
   void
   cmd_free_argv(int argc, char **argv)
   {
           int     i;
   
           if (argc == 0)
                   return;
           for (i = 0; i < argc; i++) {
                   if (argv[i] != NULL)
                           xfree(argv[i]);
           }
           xfree(argv);
   }
   
 struct cmd *  struct cmd *
 cmd_parse(int argc, char **argv, char **cause)  cmd_parse(int argc, char **argv, char **cause)
 {  {
Line 205 
Line 263 
 }  }
   
 void  void
 cmd_send(struct cmd *cmd, struct buffer *b)  
 {  
         const struct cmd_entry **entryp;  
         u_int                    n;  
   
         n = 0;  
         for (entryp = cmd_table; *entryp != NULL; entryp++) {  
                 if (*entryp == cmd->entry)  
                         break;  
                 n++;  
         }  
         if (*entryp == NULL)  
                 fatalx("command not found");  
   
         buffer_write(b, &n, sizeof n);  
   
         if (cmd->entry->send != NULL)  
                 cmd->entry->send(cmd, b);  
 }  
   
 struct cmd *  
 cmd_recv(struct buffer *b)  
 {  
         const struct cmd_entry **entryp;  
         struct cmd              *cmd;  
         u_int                    m, n;  
   
         buffer_read(b, &m, sizeof m);  
   
         n = 0;  
         for (entryp = cmd_table; *entryp != NULL; entryp++) {  
                 if (n == m)  
                         break;  
                 n++;  
         }  
         if (*entryp == NULL)  
                 fatalx("command not found");  
   
         cmd = xmalloc(sizeof *cmd);  
         cmd->entry = *entryp;  
   
         if (cmd->entry->recv != NULL)  
                 cmd->entry->recv(cmd, b);  
         return (cmd);  
 }  
   
 void  
 cmd_free(struct cmd *cmd)  cmd_free(struct cmd *cmd)
 {  {
         if (cmd->data != NULL && cmd->entry->free != NULL)          if (cmd->data != NULL && cmd->entry->free != NULL)
Line 266 
Line 277 
                 return (xsnprintf(buf, len, "%s", cmd->entry->name));                  return (xsnprintf(buf, len, "%s", cmd->entry->name));
         }          }
         return (cmd->entry->print(cmd, buf, len));          return (cmd->entry->print(cmd, buf, len));
 }  
   
 void  
 cmd_send_string(struct buffer *b, const char *s)  
 {  
         size_t  n;  
   
         if (s == NULL) {  
                 n = 0;  
                 buffer_write(b, &n, sizeof n);  
                 return;  
         }  
   
         n = strlen(s) + 1;  
         buffer_write(b, &n, sizeof n);  
   
         buffer_write(b, s, n);  
 }  
   
 char *  
 cmd_recv_string(struct buffer *b)  
 {  
         char   *s;  
         size_t  n;  
   
         buffer_read(b, &n, sizeof n);  
   
         if (n == 0)  
                 return (NULL);  
   
         s = xmalloc(n);  
         buffer_read(b, s, n);  
         s[n - 1] = '\0';  
   
         return (s);  
 }  }
   
 /*  /*

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10