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

Diff for /src/usr.bin/tmux/options.c between version 1.53 and 1.54

version 1.53, 2019/10/14 08:38:07 version 1.54, 2019/10/15 08:30:36
Line 321 
Line 321 
         return (RB_FIND(options_array, &o->value.array, &a));          return (RB_FIND(options_array, &o->value.array, &a));
 }  }
   
   static struct options_array_item *
   options_array_new(struct options_entry *o, u_int idx)
   {
           struct options_array_item       *a;
   
           a = xcalloc(1, sizeof *a);
           a->index = idx;
           RB_INSERT(options_array, &o->value.array, a);
           return (a);
   }
   
 static void  static void
 options_array_free(struct options_entry *o, struct options_array_item *a)  options_array_free(struct options_entry *o, struct options_array_item *a)
 {  {
Line 368 
Line 379 
                 return (-1);                  return (-1);
         }          }
   
         if (OPTIONS_IS_COMMAND(o) && value != NULL) {          if (value == NULL) {
                   a = options_array_item(o, idx);
                   if (a != NULL)
                           options_array_free(o, a);
                   return (0);
           }
   
           if (OPTIONS_IS_COMMAND(o)) {
                 pr = cmd_parse_from_string(value, NULL);                  pr = cmd_parse_from_string(value, NULL);
                 switch (pr->status) {                  switch (pr->status) {
                 case CMD_PARSE_EMPTY:                  case CMD_PARSE_EMPTY:
Line 384 
Line 402 
                 case CMD_PARSE_SUCCESS:                  case CMD_PARSE_SUCCESS:
                         break;                          break;
                 }                  }
         }  
   
         a = options_array_item(o, idx);                  a = options_array_item(o, idx);
         if (value == NULL) {                  if (a == NULL)
                 if (a != NULL)                          a = options_array_new(o, idx);
                         options_array_free(o, a);                  else
                           options_value_free(o, &a->value);
                   a->value.cmdlist = pr->cmdlist;
                 return (0);                  return (0);
         }          }
   
         if (OPTIONS_IS_STRING(o)) {          if (OPTIONS_IS_STRING(o)) {
                   a = options_array_item(o, idx);
                 if (a != NULL && append)                  if (a != NULL && append)
                         xasprintf(&new, "%s%s", a->value.string, value);                          xasprintf(&new, "%s%s", a->value.string, value);
                 else                  else
                         new = xstrdup(value);                          new = xstrdup(value);
                   if (a == NULL)
                           a = options_array_new(o, idx);
                   else
                           options_value_free(o, &a->value);
                   a->value.string = new;
                   return (0);
         }          }
   
         if (a == NULL) {          if (cause != NULL)
                 a = xcalloc(1, sizeof *a);                  *cause = xstrdup("wrong array type");
                 a->index = idx;          return (-1);
                 RB_INSERT(options_array, &o->value.array, a);  
         } else  
                 options_value_free(o, &a->value);  
   
         if (OPTIONS_IS_STRING(o))  
                 a->value.string = new;  
         else if (OPTIONS_IS_COMMAND(o))  
                 a->value.cmdlist = pr->cmdlist;  
         return (0);  
 }  }
   
 int  int

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.54