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

Diff for /src/usr.bin/tmux/cmd-set-option.c between version 1.49 and 1.50

version 1.49, 2011/03/29 21:07:08 version 1.50, 2011/03/29 21:09:13
Line 29 
Line 29 
   
 int     cmd_set_option_exec(struct cmd *, struct cmd_ctx *);  int     cmd_set_option_exec(struct cmd *, struct cmd_ctx *);
   
   int     cmd_set_option_find(const char *, const struct options_table_entry **,
               const struct options_table_entry **);
   
 int     cmd_set_option_unset(struct cmd *, struct cmd_ctx *,  int     cmd_set_option_unset(struct cmd *, struct cmd_ctx *,
             const struct options_table_entry *, struct options *,              const struct options_table_entry *, struct options *,
             const char *);              const char *);
Line 78 
Line 81 
         cmd_set_option_exec          cmd_set_option_exec
 };  };
   
   /* Look for an option in all three tables. */
 int  int
   cmd_set_option_find(
       const char *optstr, const struct options_table_entry **table,
       const struct options_table_entry **oe)
   {
           static const struct options_table_entry *tables[] = {
                   server_options_table,
                   window_options_table,
                   session_options_table
           };
           const struct options_table_entry        *oe_loop;
           u_int                                    i;
   
           for (i = 0; i < nitems(tables); i++) {
                   for (oe_loop = tables[i]; oe_loop->name != NULL; oe_loop++) {
                           if (strncmp(oe_loop->name, optstr, strlen(optstr)) != 0)
                                   continue;
   
                           /* If already found, ambiguous. */
                           if (*oe != NULL)
                                   return (-1);
                           *oe = oe_loop;
                           *table = tables[i];
   
                           /* Bail now if an exact match. */
                           if (strcmp((*oe)->name, optstr) == 0)
                                   break;
                   }
           }
           return (0);
   }
   
   int
 cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)  cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)
 {  {
         struct args                             *args = self->args;          struct args                             *args = self->args;
         const struct options_table_entry        *table, *oe, *oe_loop;          const struct options_table_entry        *table, *oe;
         struct session                          *s;          struct session                          *s;
         struct winlink                          *wl;          struct winlink                          *wl;
         struct client                           *c;          struct client                           *c;
Line 90 
Line 126 
         const char                              *optstr, *valstr;          const char                              *optstr, *valstr;
         u_int                                    i;          u_int                                    i;
   
         /* Work out the options tree and table to use. */          /* Get the option name and value. */
         if (args_has(self->args, 's')) {          optstr = args->argv[0];
           if (*optstr == '\0') {
                   ctx->error(ctx, "invalid option");
                   return (-1);
           }
           if (args->argc < 2)
                   valstr = NULL;
           else
                   valstr = args->argv[1];
   
           /* Find the option entry, try each table. */
           table = oe = NULL;
           if (cmd_set_option_find(optstr, &table, &oe) != 0) {
                   ctx->error(ctx, "ambiguous option: %s", optstr);
                   return (-1);
           }
           if (oe == NULL) {
                   ctx->error(ctx, "unknown option: %s", optstr);
                   return (-1);
           }
   
           /* Work out the tree from the table. */
           if (table == server_options_table)
                 oo = &global_options;                  oo = &global_options;
                 table = server_options_table;          else if (table == window_options_table) {
         } else if (args_has(self->args, 'w') ||  
             self->entry == &cmd_set_window_option_entry) {  
                 table = window_options_table;  
                 if (args_has(self->args, 'g'))                  if (args_has(self->args, 'g'))
                         oo = &global_w_options;                          oo = &global_w_options;
                 else {                  else {
Line 105 
Line 160 
                                 return (-1);                                  return (-1);
                         oo = &wl->window->options;                          oo = &wl->window->options;
                 }                  }
         } else {          } else if (table == session_options_table) {
                 table = session_options_table;  
                 if (args_has(self->args, 'g'))                  if (args_has(self->args, 'g'))
                         oo = &global_s_options;                          oo = &global_s_options;
                 else {                  else {
Line 115 
Line 169 
                                 return (-1);                                  return (-1);
                         oo = &s->options;                          oo = &s->options;
                 }                  }
         }          } else {
                   ctx->error(ctx, "unknown table");
         /* Get the option name and value. */  
         optstr = args->argv[0];  
         if (*optstr == '\0') {  
                 ctx->error(ctx, "invalid option");  
                 return (-1);  
         }  
         if (args->argc < 2)  
                 valstr = NULL;  
         else  
                 valstr = args->argv[1];  
   
         /* Find the option table entry. */  
         oe = NULL;  
         for (oe_loop = table; oe_loop->name != NULL; oe_loop++) {  
                 if (strncmp(oe_loop->name, optstr, strlen(optstr)) != 0)  
                         continue;  
   
                 if (oe != NULL) {  
                         ctx->error(ctx, "ambiguous option: %s", optstr);  
                         return (-1);  
                 }  
                 oe = oe_loop;  
   
                 /* Bail now if an exact match. */  
                 if (strcmp(oe->name, optstr) == 0)  
                         break;  
         }  
         if (oe == NULL) {  
                 ctx->error(ctx, "unknown option: %s", optstr);  
                 return (-1);                  return (-1);
         }          }
   

Legend:
Removed from v.1.49  
changed lines
  Added in v.1.50