Changeset 1932
- Timestamp:
- Oct 24, 2008, 10:22:22 PM (17 years ago)
- Location:
- trunk/src/kmk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/Makefile.am
r1918 r1932 139 139 -DCONFIG_PRETTY_COMMAND_PRINTING \ 140 140 -DCONFIG_WITH_PRINT_STATS_SWITCH \ 141 -DCONFIG_WITH_RDONLY_VARIABLE_VALUE \ 141 142 \ 142 143 -DKBUILD_HOST=\"$(BUILD_TARGET)\" \ -
trunk/src/kmk/Makefile.kmk
r1925 r1932 169 169 CONFIG_PRETTY_COMMAND_PRINTING \ 170 170 CONFIG_WITH_PRINT_STATS_SWITCH \ 171 CONFIG_WITH_RDONLY_VARIABLE_VALUE \ 171 172 \ 172 173 KBUILD_HOST=\"$(KBUILD_TARGET)\" \ -
trunk/src/kmk/commands.c
r1898 r1932 85 85 const char *name; 86 86 unsigned int len; 87 #ifdef CONFIG_WITH_STRCACHE2 88 static const char *suffixes_strcache = 0; /* XXX: make this global */ 89 90 if (!suffixes_strcache) 91 suffixes_strcache = strcache_add_len (".SUFFIXES", sizeof (".SUFFIXES") - 1); 92 #endif /* CONFIG_WITH_STRCACHE2 */ 87 93 88 94 #ifndef NO_ARCHIVES … … 103 109 } 104 110 111 #ifndef CONFIG_WITH_STRCACHE2 105 112 for (d = enter_file (strcache_add (".SUFFIXES"))->deps; d ; d = d->next) 106 113 { 107 #ifndef CONFIG_WITH_STRCACHE2108 114 unsigned int slen = strlen (dep_name (d)); 109 115 #else 116 for (d = enter_file (suffixes_strcache)->deps; d ; d = d->next) 117 { 110 118 unsigned int slen = strcache2_get_len (&file_strcache, dep_name (d)); 111 119 #endif … … 140 148 /* Define the variables. */ 141 149 150 #ifndef CONFIG_WITH_RDONLY_VARIABLE_VALUE 142 151 DEFINE_VARIABLE ("<", 1, less); 143 152 DEFINE_VARIABLE ("*", 1, star); 144 153 DEFINE_VARIABLE ("@", 1, at); 145 154 DEFINE_VARIABLE ("%", 1, percent); 155 #else /* CONFIG_WITH_RDONLY_VARIABLE_VALUE */ 156 # define DEFINE_VARIABLE_RO_VAL(name, len, value, value_len) \ 157 define_variable_in_set((name), (len), (value), (value_len), -1, \ 158 (o_automatic), 0, (file)->variables->set, NILF) 159 160 if (*less == '\0') 161 DEFINE_VARIABLE_RO_VAL ("<", 1, "", 0); 162 else if (less != at || at == file->name) 163 DEFINE_VARIABLE_RO_VAL ("<", 1, less, strcache_get_len (less)); 164 else 165 DEFINE_VARIABLE ("<", 1, less); 166 167 if (*star == '\0') 168 DEFINE_VARIABLE_RO_VAL ("*", 1, "", 0); 169 else 170 DEFINE_VARIABLE_RO_VAL ("*", 1, star, strcache_get_len (star)); 171 172 if (at == file->name) 173 DEFINE_VARIABLE_RO_VAL ("@", 1, at, strcache_get_len (at)); 174 else 175 DEFINE_VARIABLE ("@", 1, at); 176 177 if (*percent == '\0') 178 DEFINE_VARIABLE_RO_VAL ("%", 1, "", 0); 179 else 180 DEFINE_VARIABLE ("%", 1, percent); 181 #endif /* CONFIG_WITH_RDONLY_VARIABLE_VALUE */ 146 182 147 183 /* Compute the values for $^, $+, $?, and $|. */ -
trunk/src/kmk/expand.c
r1931 r1932 976 976 977 977 /* Replace the variable with the variable buffer. */ 978 free (v->value); 978 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 979 if (v->rdonly_val) 980 v->rdonly_val = 0; 981 else 982 #endif 983 free (v->value); 979 984 v->value = variable_buffer; 980 985 v->value_length = p - v->value; -
trunk/src/kmk/function.c
r1926 r1932 1041 1041 if (len >= (unsigned int)var->value_alloc_len) 1042 1042 { 1043 free (var->value); 1043 # ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 1044 if (var->rdonly_val) 1045 var->rdonly_val = 0; 1046 else 1047 # endif 1048 free (var->value); 1044 1049 var->value_alloc_len = (len + 32) & ~31; 1045 1050 var->value = xmalloc (var->value_alloc_len); -
trunk/src/kmk/kbuild.c
r1924 r1932 572 572 unsigned int value_len; 573 573 char *pszExpanded = allocated_variable_expand_2(pVar->value, pVar->value_length, &value_len); 574 free(pVar->value); 574 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 575 if (pVar->rdonly_val) 576 pVar->rdonly_val = 0; 577 else 578 #endif 579 free(pVar->value); 580 assert (pVar->origin != o_automatic); 575 581 pVar->value = pszExpanded; 576 582 pVar->value_length = value_len; … … 643 649 struct variable *pVar = kbuild_lookup_variable_n(pszName, cchName); 644 650 if (pVar && pDefPath) 651 { 652 assert(pVar->origin != o_automatic); 653 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 654 assert(!pVar->rdonly_val); 655 #endif 645 656 kbuild_apply_defpath(pDefPath, &pVar->value, (unsigned int *)&pVar->value_length, &pVar->value_alloc_len, 1); 657 } 646 658 return pVar; 647 659 } … … 661 673 struct variable *pVar = kbuild_lookup_variable(pszName); 662 674 if (pVar && pDefPath) 675 { 676 assert(pVar->origin != o_automatic); 677 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 678 assert(!pVar->rdonly_val); 679 #endif 663 680 kbuild_apply_defpath(pDefPath, &pVar->value, (unsigned int *)&pVar->value_length, &pVar->value_alloc_len, 1); 681 } 664 682 return pVar; 665 683 } … … 2044 2062 */ 2045 2063 if (pDefPath) 2064 { 2065 /** @todo assert(pSource->origin != o_automatic); We're changing 'source' 2066 * from the foreach loop! */ 2067 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 2068 assert(!pSource->rdonly_val); 2069 #endif 2046 2070 kbuild_apply_defpath(pDefPath, &pSource->value, (unsigned int *)&pSource->value_length, &pSource->value_alloc_len, 1 /* can free */); 2071 } 2047 2072 2048 2073 /* -
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 -
trunk/src/kmk/variable.h
r1931 r1932 82 82 /* If >1, allow this many self-referential 83 83 expansions. */ 84 #ifdef CONFIG_WITH_RDONLY_VARIABLE_VALUE 85 unsigned int rdonly_val:1; /* VALUE is read only (strcache/const). */ 86 #endif 84 87 enum variable_flavor 85 88 flavor ENUM_BITFIELD (3); /* Variable flavor. */
Note:
See TracChangeset
for help on using the changeset viewer.