Ignore:
Timestamp:
Oct 24, 2008, 10:22:22 PM (17 years ago)
Author:
bird
Message:

kmk: Made struct variable capable of holding read only variables to speed up set_file_variables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/variable.c

    r1918 r1932  
    254254          else
    255255            assert (value_len == strlen (value));
    256           if (!duplicate_value)
     256          if (!duplicate_value || duplicate_value == -1)
    257257            {
     258# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     259              if (v->value != 0 && !v->rdonly_val)
     260                  free (v->value);
     261              v->rdonly_val = duplicate_value == -1;
     262              v->value = (char *)value;
     263              v->value_alloc_len = 0;
     264# else
    258265              if (v->value != 0)
    259266                free (v->value);
    260267              v->value = (char *)value;
    261268              v->value_alloc_len = value_len + 1;
     269# endif
    262270            }
    263271          else
     
    265273              if ((unsigned int)v->value_alloc_len <= value_len)
    266274                {
    267                   free (v->value);
     275# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     276                  if (v->rdonly_val)
     277                    v->rdonly_val = 0;
     278                  else
     279# endif
     280                    free (v->value);
    268281                  v->value_alloc_len = (value_len + 0x40) & ~0x3f;
    269282                  v->value = xmalloc (v->value_alloc_len);
     
    272285            }
    273286          v->value_length = value_len;
    274 #else
     287#else  /* !CONFIG_WITH_VALUE_LENGTH */
    275288          if (v->value != 0)
    276289            free (v->value);
    277290          v->value = xstrdup (value);
    278 #endif
     291#endif /* !CONFIG_WITH_VALUE_LENGTH */
    279292          if (flocp != 0)
    280293            v->fileinfo = *flocp;
     
    307320    assert (value_len == strlen (value));
    308321  v->value_length = value_len;
    309   if (!duplicate_value)
    310     {
    311       v->value_alloc_len = value_len + 1;
     322  if (!duplicate_value || duplicate_value == -1)
     323    {
     324# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     325      v->rdonly_val = duplicate_value == -1;
     326      v->value_alloc_len = v->rdonly_val ? 0 : value_len + 1;
     327# endif
    312328      v->value = (char *)value;
    313329    }
    314330  else
    315331    {
     332# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     333      v->rdonly_val = 0;
     334# endif
    316335      v->value_alloc_len = (value_len + 32) & ~31;
    317336      v->value = xmalloc (v->value_alloc_len);
     
    13451364  if (*v->value == '\0' || v->origin == o_env || v->origin == o_env_override)
    13461365    {
    1347       free (v->value);
     1366#ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     1367      if (v->rdonly_val)
     1368        v->rdonly_val = 0;
     1369      else
     1370#endif
     1371        free (v->value);
    13481372      v->origin = o_file;
    13491373      v->value = xstrdup (default_shell);
     
    15891613      if ((unsigned)v->value_alloc_len < new_value_len + 1)
    15901614          v->value_alloc_len = (new_value_len + 1 + value_len + 0x7f) + ~0x7fU;
     1615# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     1616      if ((append || !v->value_length) && !v->rdonly_val)
     1617# else
    15911618      if (append || !v->value_length)
     1619# endif
    15921620        v->value = xrealloc (v->value, v->value_alloc_len);
    15931621      else
     
    15971625          memcpy (&new_buf[value_len + 1], v->value, v->value_length + 1);
    15981626          done_1st_prepend_copy = 1;
    1599           free (v->value);
     1627# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     1628          if (v->rdonly_val)
     1629            v->rdonly_val = 0;
     1630          else
     1631# endif
     1632            free (v->value);
    16001633          v->value = new_buf;
    16011634        }
     
    20942127  v->value_length = eos != NULL ? eos - p : -1;
    20952128  assert (eos == NULL || strchr (p, '\0') == eos);
     2129# ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE
     2130  v->rdonly_val = 0;
     2131# endif
    20962132#endif
    20972133
Note: See TracChangeset for help on using the changeset viewer.