Changeset 1847 for trunk/src/kmk
- Timestamp:
- Oct 12, 2008, 6:25:03 PM (17 years ago)
- Location:
- trunk/src/kmk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/expand.c
r1837 r1847 753 753 expand_argument (const char *str, const char *end) 754 754 { 755 #ifndef CONFIG_WITH_VALUE_LENGTH /** @todo the hacks are no longer required. Clean up !! */ 755 756 char *tmp; 757 #endif 756 758 757 759 if (str == end) … … 823 825 824 826 Differs from variable_expand_for_file in that it takes a pointer to 825 where in the variable buffer to start outputting the expanded string. */ 827 where in the variable buffer to start outputting the expanded string, 828 and that it can returned the length of the string if you wish. */ 826 829 827 830 char * 828 variable_expand_for_file_2 (char *o, const char *line, struct file *file) 831 variable_expand_for_file_2 (char *o, const char *line, unsigned int length, 832 struct file *file, unsigned int *value_lenp) 829 833 { 830 834 char *result; 831 835 struct variable_set_list *save; 832 836 const struct floc *reading_file_saved; 837 long len = length == ~0U ? (long)-1 : (long)length; 833 838 char *eol; 834 839 840 if (!o) 841 o = initialize_variable_output(); 842 835 843 if (file == 0) 836 return variable_expand_string_2 (o, line, (long)-1, &eol); 837 838 save = current_variable_set_list; 839 current_variable_set_list = file->variables; 840 reading_file_saved = reading_file; 841 if (file->cmds && file->cmds->fileinfo.filenm) 842 reading_file = &file->cmds->fileinfo; 844 result = variable_expand_string_2 (o, line, len, &eol); 843 845 else 844 reading_file = 0; 845 result = variable_expand_string_2 (o, line, (long)-1, &eol); 846 current_variable_set_list = save; 847 reading_file = reading_file_saved; 846 { 847 save = current_variable_set_list; 848 current_variable_set_list = file->variables; 849 reading_file_saved = reading_file; 850 if (file->cmds && file->cmds->fileinfo.filenm) 851 reading_file = &file->cmds->fileinfo; 852 else 853 reading_file = 0; 854 result = variable_expand_string_2 (o, line, len, &eol); 855 current_variable_set_list = save; 856 reading_file = reading_file_saved; 857 } 858 859 if (value_lenp) 860 *value_lenp = eol - result; 848 861 849 862 return result; -
trunk/src/kmk/file.c
r1833 r1847 507 507 struct dep *new, *d1; 508 508 char *p; 509 #ifdef CONFIG_WITH_VALUE_LENGTH 510 unsigned int len; 511 #endif 509 512 510 513 if (! d->name) … … 518 521 p = variable_expand (""); 519 522 buffer_offset = p - variable_buffer; 523 #ifndef CONFIG_WITH_VALUE_LENGTH 520 524 variable_buffer_output (p, d->name, strlen (d->name) + 1); 525 #else 526 len = strcache_get_len (d->name); 527 variable_buffer_output (p, d->name, len + 1); 528 #endif 521 529 p = variable_buffer + buffer_offset; /* bird - variable_buffer may have been reallocated. (observed it) */ 522 530 } … … 554 562 set_file_variables (f); 555 563 564 #ifndef CONFIG_WITH_VALUE_LENGTH 556 565 p = variable_expand_for_file (d->name, f); 566 #else 567 len = strcache_get_len (d->name); 568 p = variable_expand_for_file_2 (NULL, d->name, len, f, &len); 569 #endif 557 570 558 571 if (d->stem != 0) … … 561 574 562 575 /* Parse the prerequisites. */ 576 #ifndef CONFIG_WITH_VALUE_LENGTH 563 577 new = parse_prereqs (p); 578 #else 579 /** @todo make use of len here! */ 580 new = parse_prereqs (p); 581 #endif 564 582 565 583 /* If this dep list was from a static pattern rule, expand the %s. We … … 576 594 { 577 595 char *percent; 596 #ifndef KMK 578 597 int nl = strlen (dp->name) + 1; 579 598 char *nm = alloca (nl); 580 599 memcpy (nm, dp->name, nl); 581 600 percent = find_percent (nm); 601 #else /* KMK - don't make a stack copy unless it's actually required! */ 602 unsigned int nl = strcache_get_len (dp->name); 603 char *nm; 604 percent = memchr (nm, '%', nl); 605 if (percent) 606 { 607 nm = alloca (nl + 1); 608 memcpy (nm, dp->name, nl + 1); 609 percent = find_percent (nm); 610 } 611 #endif /* KMK */ 582 612 if (percent) 583 613 { -
trunk/src/kmk/function.c
r1838 r1847 3942 3942 if (i) 3943 3943 o = variable_buffer_output (o, cmd_sep, cmd_sep_len); 3944 o = variable_expand_for_file_2 (o, cmds->command_lines[i], file);3944 o = variable_expand_for_file_2 (o, cmds->command_lines[i], ~0U, file, NULL); 3945 3945 3946 3946 /* Skip it if it has a '%' prefix or is blank. */ -
trunk/src/kmk/variable.h
r1830 r1847 182 182 char *variable_expand_for_file (const char *line, struct file *file); 183 183 #ifdef CONFIG_WITH_COMMANDS_FUNC 184 char *variable_expand_for_file_2 (char *o, const char *line, struct file *file); 184 char *variable_expand_for_file_2 (char *o, const char *line, unsigned int lenght, 185 struct file *file, unsigned int *value_lenp); 185 186 #endif 186 187 char *allocated_variable_expand_for_file (const char *line, struct file *file);
Note:
See TracChangeset
for help on using the changeset viewer.