Module Name: src
Committed By: dsl
Date: Sat Sep 19 16:18:01 UTC 2009
Modified Files:
src/usr.bin/sort: radix_sort.c
Log Message:
Fix sort -u, PR/42094
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/sort/radix_sort.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/sort/radix_sort.c
diff -u src/usr.bin/sort/radix_sort.c:1.3 src/usr.bin/sort/radix_sort.c:1.4
--- src/usr.bin/sort/radix_sort.c:1.3 Thu Sep 10 22:02:40 2009
+++ src/usr.bin/sort/radix_sort.c Sat Sep 19 16:18:00 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: radix_sort.c,v 1.3 2009/09/10 22:02:40 dsl Exp $ */
+/* $NetBSD: radix_sort.c,v 1.4 2009/09/19 16:18:00 dsl Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)radixsort.c 8.2 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: radix_sort.c,v 1.3 2009/09/10 22:02:40 dsl Exp $");
+__RCSID("$NetBSD: radix_sort.c,v 1.4 2009/09/19 16:18:00 dsl Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -184,27 +184,29 @@
s_len = akh->keylen;
for (ai = ak; ;) {
ai--;
- t = (*ai)->data;
t_len = (*ai)->keylen;
- for (i = data_index; ; i++) {
- if (i >= s_len || i >= t_len) {
- r = s_len - t_len;
- break;
+ if (t_len != -1) {
+ t = (*ai)->data;
+ for (i = data_index; ; i++) {
+ if (i >= s_len || i >= t_len) {
+ r = s_len - t_len;
+ break;
+ }
+ r = s[i] - t[i];
+ if (r != 0)
+ break;
}
- r = s[i] - t[i];
- if (r != 0)
+ if (r >= 0) {
+ if (r == 0 && UNIQUE) {
+ /* Put record below existing */
+ ai[1] = ai[0];
+ /* Mark as duplicate - ignore */
+ akh->keylen = -1;
+ } else {
+ ai++;
+ }
break;
- }
- if (r >= 0) {
- if (r == 0 && UNIQUE) {
- /* Put record below existing */
- ai[1] = ai[0];
- /* Mark so ignored by output() */
- akh->keylen = -1;
- } else {
- ai++;
}
- break;
}
ai[1] = ai[0];
if (ai == a)