Changeset 1932 for trunk/src/kmk/variable.c
- Timestamp:
- Oct 24, 2008, 10:22:22 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/variable.c
r1918 r1932 254 254 else 255 255 assert (value_len == strlen (value)); 256 if (!duplicate_value )256 if (!duplicate_value || duplicate_value == -1) 257 257 { 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 258 265 if (v->value != 0) 259 266 free (v->value); 260 267 v->value = (char *)value; 261 268 v->value_alloc_len = value_len + 1; 269 # endif 262 270 } 263 271 else … … 265 273 if ((unsigned int)v->value_alloc_len <= value_len) 266 274 { 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); 268 281 v->value_alloc_len = (value_len + 0x40) & ~0x3f; 269 282 v->value = xmalloc (v->value_alloc_len); … … 272 285 } 273 286 v->value_length = value_len; 274 #else 287 #else /* !CONFIG_WITH_VALUE_LENGTH */ 275 288 if (v->value != 0) 276 289 free (v->value); 277 290 v->value = xstrdup (value); 278 #endif 291 #endif /* !CONFIG_WITH_VALUE_LENGTH */ 279 292 if (flocp != 0) 280 293 v->fileinfo = *flocp; … … 307 320 assert (value_len == strlen (value)); 308 321 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 312 328 v->value = (char *)value; 313 329 } 314 330 else 315 331 { 332 # ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 333 v->rdonly_val = 0; 334 # endif 316 335 v->value_alloc_len = (value_len + 32) & ~31; 317 336 v->value = xmalloc (v->value_alloc_len); … … 1345 1364 if (*v->value == '\0' || v->origin == o_env || v->origin == o_env_override) 1346 1365 { 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); 1348 1372 v->origin = o_file; 1349 1373 v->value = xstrdup (default_shell); … … 1589 1613 if ((unsigned)v->value_alloc_len < new_value_len + 1) 1590 1614 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 1591 1618 if (append || !v->value_length) 1619 # endif 1592 1620 v->value = xrealloc (v->value, v->value_alloc_len); 1593 1621 else … … 1597 1625 memcpy (&new_buf[value_len + 1], v->value, v->value_length + 1); 1598 1626 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); 1600 1633 v->value = new_buf; 1601 1634 } … … 2094 2127 v->value_length = eos != NULL ? eos - p : -1; 2095 2128 assert (eos == NULL || strchr (p, '\0') == eos); 2129 # ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 2130 v->rdonly_val = 0; 2131 # endif 2096 2132 #endif 2097 2133
Note:
See TracChangeset
for help on using the changeset viewer.