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

Diff for /src/usr.bin/tmux/Attic/cmd-generic.c between version 1.7 and 1.8

version 1.7, 2009/08/26 18:09:52 version 1.8, 2009/11/13 19:53:29
Line 23 
Line 23 
   
 #include "tmux.h"  #include "tmux.h"
   
 int     cmd_getopt(int, char **, const char *, uint64_t);  int     cmd_getopt(int, char **, const char *, const char *);
 int     cmd_flags(int, uint64_t, uint64_t *);  int     cmd_parse_flags(int, const char *, uint64_t *);
 size_t  cmd_print_flags(char *, size_t, size_t, uint64_t);  size_t  cmd_print_flags(char *, size_t, size_t, uint64_t);
 int     cmd_fill_argument(int, char **, char **, int, char **);  int     cmd_fill_argument(int, char **, char **, int, char **);
   
Line 36 
Line 36 
         return (xsnprintf(buf, len, "%s%s", prefix, arg));          return (xsnprintf(buf, len, "%s%s", prefix, arg));
 }  }
   
 /* Prepend flags from chflags onto flagstr and call getopt. */  /* Append two flag strings together and call getopt. */
 int  int
 cmd_getopt(int argc, char **argv, const char *flagstr, uint64_t chflags)  cmd_getopt(int argc, char **argv, const char *flagstr, const char *chflagstr)
 {  {
         u_char  ch;          char    tmp[BUFSIZ];
         char    buf[128];  
         size_t  len, off;  
   
         *buf = '\0';          if (strlcpy(tmp, flagstr, sizeof tmp) >= sizeof tmp)
                   fatalx("strlcpy overflow");
           if (strlcat(tmp, chflagstr, sizeof tmp) >= sizeof tmp)
                   fatalx("strlcat overflow");
           return (getopt(argc, argv, tmp));
   }
   
         len = sizeof buf;  /* Return if flag character is set. */
         off = 0;  int
   cmd_check_flag(uint64_t chflags, int flag)
   {
           if (flag >= 'A' && flag <= 'Z')
                   flag = 26 + flag - 'A';
           else if (flag >= 'a' && flag <= 'z')
                   flag = flag - 'a';
           else
                   return (0);
           return ((chflags & (1ULL << flag)) != 0);
   }
   
         for (ch = 0; ch < 26; ch++) {  /* Set flag character. */
                 if (chflags & CMD_CHFLAG('a' + ch))  void
                         off += xsnprintf(buf + off, len - off, "%c", 'a' + ch);  cmd_set_flag(uint64_t *chflags, int flag)
                 if (chflags & CMD_CHFLAG('A' + ch))  {
                         off += xsnprintf(buf + off, len - off, "%c", 'A' + ch);          if (flag >= 'A' && flag <= 'Z')
         }                  flag = 26 + flag - 'A';
           else if (flag >= 'a' && flag <= 'z')
         strlcat(buf, flagstr, sizeof buf);                  flag = flag - 'a';
           else
         return (getopt(argc, argv, buf));                  return;
           (*chflags) |= (1ULL << flag);
 }  }
   
 /*  /* If this option is expected, set it in chflags, otherwise return -1. */
  * If this option is expected (in ichflags), set it in ochflags, otherwise  
  * return -1.  
  */  
 int  int
 cmd_flags(int opt, uint64_t ichflags, uint64_t *ochflags)  cmd_parse_flags(int opt, const char *chflagstr, uint64_t *chflags)
 {  {
         u_char  ch;          if (strchr(chflagstr, opt) == NULL)
                   return (-1);
         for (ch = 0; ch < 26; ch++) {          cmd_set_flag(chflags, opt);
                 if (opt == 'a' + ch && ichflags & CMD_CHFLAG(opt)) {          return (0);
                         (*ochflags) |= CMD_CHFLAG(opt);  
                         return (0);  
                 }  
                 if (opt == 'A' + ch && ichflags & CMD_CHFLAG(opt)) {  
                         (*ochflags) |= CMD_CHFLAG(opt);  
                         return (0);  
                 }  
         }  
         return (-1);  
 }  }
   
 /* Print the flags supported in chflags. */  /* Print the flags supported in chflags. */
Line 95 
Line 97 
         off += xsnprintf(buf + off, len - off, " -");          off += xsnprintf(buf + off, len - off, " -");
   
         for (ch = 0; ch < 26; ch++) {          for (ch = 0; ch < 26; ch++) {
                 if (chflags & CMD_CHFLAG('a' + ch))                  if (cmd_check_flag(chflags, 'a' + ch))
                         off += xsnprintf(buf + off, len - off, "%c", 'a' + ch);                          off += xsnprintf(buf + off, len - off, "%c", 'a' + ch);
                 if (chflags & CMD_CHFLAG('A' + ch))                  if (cmd_check_flag(chflags, 'A' + ch))
                         off += xsnprintf(buf + off, len - off, "%c", 'A' + ch);                          off += xsnprintf(buf + off, len - off, "%c", 'A' + ch);
         }          }
         return (off - boff);          return (off - boff);
Line 170 
Line 172 
         data = self->data;          data = self->data;
   
         while ((opt = cmd_getopt(argc, argv, "t:", entry->chflags)) != -1) {          while ((opt = cmd_getopt(argc, argv, "t:", entry->chflags)) != -1) {
                 if (cmd_flags(opt, entry->chflags, &data->chflags) == 0)                  if (cmd_parse_flags(opt, entry->chflags, &data->chflags) == 0)
                         continue;                          continue;
                 switch (opt) {                  switch (opt) {
                 case 't':                  case 't':
Line 253 
Line 255 
         data = self->data;          data = self->data;
   
         while ((opt = cmd_getopt(argc, argv, "s:t:", entry->chflags)) != -1) {          while ((opt = cmd_getopt(argc, argv, "s:t:", entry->chflags)) != -1) {
                 if (cmd_flags(opt, entry->chflags, &data->chflags) == 0)                  if (cmd_parse_flags(opt, entry->chflags, &data->chflags) == 0)
                         continue;                          continue;
                 switch (opt) {                  switch (opt) {
                 case 's':                  case 's':
Line 345 
Line 347 
         data = self->data;          data = self->data;
   
         while ((opt = cmd_getopt(argc, argv, "b:t:", entry->chflags)) != -1) {          while ((opt = cmd_getopt(argc, argv, "b:t:", entry->chflags)) != -1) {
                 if (cmd_flags(opt, entry->chflags, &data->chflags) == 0)                  if (cmd_parse_flags(opt, entry->chflags, &data->chflags) == 0)
                         continue;                          continue;
                 switch (opt) {                  switch (opt) {
                 case 'b':                  case 'b':

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8