You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							186 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							186 lines
						
					
					
						
							6.5 KiB
						
					
					
				| # --- SDE-COPYRIGHT-NOTE-BEGIN --- | |
| # This copyright note is auto-generated by ./scripts/Create-CopyPatch. | |
| # | |
| # Filename: package/.../make/make-3.82-0005-sort-word-count-algorithm.patch | |
| # Copyright (C) 2012 The OpenSDE Project | |
| # | |
| # More information can be found in the files COPYING and README. | |
| # | |
| # This patch file is dual-licensed. It is available under the license the | |
| # patched project is licensed under, as long as it is an OpenSource license | |
| # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms | |
| # of the GNU General Public License as published by the Free Software | |
| # Foundation; either version 2 of the License, or (at your option) any later | |
| # version. | |
| # --- SDE-COPYRIGHT-NOTE-END --- | |
|  | |
| From 1515cb543da14853a1751b397317f46dcbdbbbdf Mon Sep 17 00:00:00 2001 | |
| From: Christian Wiese <[email protected]> | |
| Date: Mon, 22 Oct 2012 18:01:40 +0200 | |
| Subject: [PATCH] sort word count algorithm | |
|  | |
| ChangeLog: | |
|  | |
| 2011-05-02  Paul Smith  <[email protected]> | |
|  | |
|        * function.c (func_sort): Use the same algorithm to count the | |
|        number of words we will get after the split, as we use to split. | |
|        Based on a patch from Matthias Hopf.  Fixes Savannah bug #33125. | |
|  | |
| tests/ChangeLog: | |
|  | |
| 2011-05-02  Paul Smith  <[email protected]> | |
|  | |
|        * scripts/functions/sort: Add a test for Savannah bug #33125. | |
| --- | |
|  function.c                   |   17 ++----- | |
|  tests/scripts/functions/sort |   98 +++++++++++++++++++---------------------- | |
|  2 files changed, 50 insertions(+), 65 deletions(-) | |
|  | |
| diff --git a/function.c b/function.c | |
| index e2f6c8c..17ca6a4 100644 | |
| --- a/function.c | |
| +++ b/function.c | |
| @@ -706,7 +706,7 @@ func_words (char *o, char **argv, const char *funcname UNUSED) | |
|    const char *word_iterator = argv[0]; | |
|    char buf[20]; | |
|   | |
| -  while (find_next_token (&word_iterator, (unsigned int *) 0) != 0) | |
| +  while (find_next_token (&word_iterator, NULL) != 0) | |
|      ++i; | |
|   | |
|    sprintf (buf, "%d", i); | |
| @@ -1133,21 +1133,14 @@ func_sort (char *o, char **argv, const char *funcname UNUSED) | |
|   | |
|    /* Find the maximum number of words we'll have.  */ | |
|    t = argv[0]; | |
| -  wordi = 1; | |
| -  while (*t != '\0') | |
| +  wordi = 0; | |
| +  while ((p = find_next_token (&t, NULL)) != 0) | |
|      { | |
| -      char c = *(t++); | |
| - | |
| -      if (! isspace ((unsigned char)c)) | |
| -        continue; | |
| - | |
| +      ++t; | |
|        ++wordi; | |
| - | |
| -      while (isspace ((unsigned char)*t)) | |
| -        ++t; | |
|      } | |
|   | |
| -  words = xmalloc (wordi * sizeof (char *)); | |
| +  words = xmalloc ((wordi == 0 ? 1 : wordi) * sizeof (char *)); | |
|   | |
|    /* Now assign pointers to each string in the array.  */ | |
|    t = argv[0]; | |
| diff --git a/tests/scripts/functions/sort b/tests/scripts/functions/sort | |
| index d472102..b558910 100644 | |
| --- a/tests/scripts/functions/sort | |
| +++ b/tests/scripts/functions/sort | |
| @@ -1,55 +1,47 @@ | |
| -$description = "The following test creates a makefile to verify\n" | |
| -              ."the ability of make to sort lists of object. Sort\n" | |
| -              ."will also remove any duplicate entries. This will also\n" | |
| -              ."be tested."; | |
| - | |
| -$details = "The make file is built with a list of object in a random order\n" | |
| -          ."and includes some duplicates. Make should sort all of the elements\n" | |
| -          ."remove all duplicates\n"; | |
| - | |
| -open(MAKEFILE,"> $makefile"); | |
| - | |
| -# The Contents of the MAKEFILE ... | |
| - | |
| -print MAKEFILE "foo := moon_light days \n" | |
| -              ."foo1:= jazz\n" | |
| -              ."bar := captured \n" | |
| -              ."bar2 = boy end, has rise A midnight \n" | |
| -              ."bar3:= \$(foo)\n" | |
| -              ."s1  := _by\n" | |
| -              ."s2  := _and_a\n" | |
| -              ."t1  := \$(addsuffix \$(s1), \$(bar) )\n" | |
| -              ."t2  := \$(addsuffix \$(s2), \$(foo1) )\n"  | |
| -              ."t3  := \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \n" | |
| -              ."t4  := \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \n" | |
| -              ."t5  := \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \n" | |
| -              ."t6  := \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \n" | |
| -              ."t7  := \$(t6) \$(t6) \$(t6) \n" | |
| -              ."p1  := \$(addprefix \$(foo1), \$(s2) )\n" | |
| -              ."blank:= \n" | |
| -              ."all:\n" | |
| -              ."\t\@echo \$(sort \$(bar2) \$(foo)  \$(addsuffix \$(s1), \$(bar) ) \$(t2) \$(bar2) \$(bar3))\n" | |
| -              ."\t\@echo \$(sort \$(blank) \$(foo) \$(bar2) \$(t1) \$(p1) )\n" | |
| -              ."\t\@echo \$(sort \$(foo) \$(bar2) \$(t1) \$(t4) \$(t5) \$(t7) \$(t6) )\n"; | |
| - | |
| - | |
| -# END of Contents of MAKEFILE | |
| - | |
| -close(MAKEFILE); | |
| - | |
| -&run_make_with_options($makefile,"",&get_logfile); | |
| - | |
| -# Create the answer to what should be produced by this Makefile | |
| -$answer = "A boy captured_by days end, has jazz_and_a midnight moon_light rise\n" | |
| -         ."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n" | |
| -         ."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n"; | |
| - | |
| -&compare_output($answer,&get_logfile(1)); | |
| +#                                                                    -*-perl-*- | |
| + | |
| +$description = "The following test creates a makefile to verify | |
| +the ability of make to sort lists of object. Sort | |
| +will also remove any duplicate entries. This will also | |
| +be tested."; | |
| + | |
| +$details = "The make file is built with a list of object in a random order | |
| +and includes some duplicates. Make should sort all of the elements | |
| +remove all duplicates\n"; | |
| + | |
| +run_make_test(' | |
| +foo := moon_light days | |
| +foo1:= jazz | |
| +bar := captured  | |
| +bar2 = boy end, has rise A midnight  | |
| +bar3:= $(foo) | |
| +s1  := _by | |
| +s2  := _and_a | |
| +t1  := $(addsuffix $(s1), $(bar) ) | |
| +t2  := $(addsuffix $(s2), $(foo1) ) | |
| +t3  := $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2)  | |
| +t4  := $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3)  | |
| +t5  := $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4)  | |
| +t6  := $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5)  | |
| +t7  := $(t6) $(t6) $(t6)  | |
| +p1  := $(addprefix $(foo1), $(s2) ) | |
| +blank:=  | |
| +all: | |
| +	@echo $(sort $(bar2) $(foo)  $(addsuffix $(s1), $(bar) ) $(t2) $(bar2) $(bar3)) | |
| +	@echo $(sort $(blank) $(foo) $(bar2) $(t1) $(p1) ) | |
| +	@echo $(sort $(foo) $(bar2) $(t1) $(t4) $(t5) $(t7) $(t6) ) | |
| +', | |
| +              '', 'A boy captured_by days end, has jazz_and_a midnight moon_light rise | |
| +A boy captured_by days end, has jazz_and_a midnight moon_light rise | |
| +A boy captured_by days end, has jazz_and_a midnight moon_light rise | |
| +'); | |
| + | |
| + | |
| +# Test with non-space/tab whitespace.  Note that you can't see the | |
| +# original bug except using valgrind. | |
| + | |
| +run_make_test("FOO = a b\tc\rd\fe \f \f \f \f \ff | |
| +all: ; \@echo \$(words \$(sort \$(FOO)))\n", | |
| +              '', "5\n"); | |
|   | |
|  1; | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| --  | |
| 1.7.2.3 | |
| 
 | |
| 
 |