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.
187 lines
6.5 KiB
187 lines
6.5 KiB
12 years ago
|
# --- 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 <chris@opensde.org>
|
||
|
Date: Mon, 22 Oct 2012 18:01:40 +0200
|
||
|
Subject: [PATCH] sort word count algorithm
|
||
|
|
||
|
ChangeLog:
|
||
|
|
||
|
2011-05-02 Paul Smith <psmith@gnu.org>
|
||
|
|
||
|
* 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 <psmith@gnu.org>
|
||
|
|
||
|
* 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
|
||
|
|