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)