summaryrefslogtreecommitdiffstats
path: root/usr.bin/sort
diff options
context:
space:
mode:
authorgabor <gabor@FreeBSD.org>2012-07-04 16:25:11 +0000
committergabor <gabor@FreeBSD.org>2012-07-04 16:25:11 +0000
commit58344b5c4dfb11f345211ed6e4b87ae323576fb2 (patch)
treecb62917d5adbd30962fdbd50aeef305f7a2a56d8 /usr.bin/sort
parent6d38f252e70b82f7f0f16b06efd518298ab926ae (diff)
downloadFreeBSD-src-58344b5c4dfb11f345211ed6e4b87ae323576fb2.zip
FreeBSD-src-58344b5c4dfb11f345211ed6e4b87ae323576fb2.tar.gz
- Change --nthreads parameter to --parallel for GNU compatibility
- Change default sort method to mergesort, which has a better worst case performance than qsort Submitted by: Oleg Moskalenko <oleg.moskalenko@citrix.com>
Diffstat (limited to 'usr.bin/sort')
-rw-r--r--usr.bin/sort/file.c7
-rw-r--r--usr.bin/sort/file.h3
-rw-r--r--usr.bin/sort/radixsort.c12
-rw-r--r--usr.bin/sort/sort.1.in4
-rw-r--r--usr.bin/sort/sort.c8
5 files changed, 21 insertions, 13 deletions
diff --git a/usr.bin/sort/file.c b/usr.bin/sort/file.c
index 68c3f54..3d8a495 100644
--- a/usr.bin/sort/file.c
+++ b/usr.bin/sort/file.c
@@ -1297,7 +1297,7 @@ sort_list_to_file(struct sort_list *list, const char *outfile)
}
if (sort_opts_vals.sort_method == SORT_DEFAULT)
- sort_opts_vals.sort_method = SORT_QSORT;
+ sort_opts_vals.sort_method = DEFAULT_SORT_ALGORITHM;
if (debug_sort)
printf("sort_method=%s\n",
@@ -1314,9 +1314,12 @@ sort_list_to_file(struct sort_list *list, const char *outfile)
case SORT_HEAPSORT:
mt_sort(list, heapsort, outfile);
break;
- default:
+ case SORT_QSORT:
mt_sort(list, sort_qsort, outfile);
break;
+ default:
+ mt_sort(list, DEFAULT_SORT_FUNC, outfile);
+ break;
}
}
diff --git a/usr.bin/sort/file.h b/usr.bin/sort/file.h
index 47c2299..ac3f4dd 100644
--- a/usr.bin/sort/file.h
+++ b/usr.bin/sort/file.h
@@ -39,6 +39,9 @@
#define SORT_HEAPSORT 3
#define SORT_RADIXSORT 4
+#define DEFAULT_SORT_ALGORITHM SORT_HEAPSORT
+#define DEFAULT_SORT_FUNC heapsort
+
/*
* List of data to be sorted.
*/
diff --git a/usr.bin/sort/radixsort.c b/usr.bin/sort/radixsort.c
index ccaa994..d6a97d1 100644
--- a/usr.bin/sort/radixsort.c
+++ b/usr.bin/sort/radixsort.c
@@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$");
#include "coll.h"
#include "radixsort.h"
+#define DEFAULT_SORT_FUNC_RADIXSORT mergesort
+
#define TINY_NODE(sl) ((sl)->tosort_num < 65)
#define SMALL_NODE(sl) ((sl)->tosort_num < 5)
@@ -349,7 +351,7 @@ run_sort_level_next(struct sort_level *sl)
/* NOTREACHED */
err(2, "Radix sort error 3");
} else
- qsort(sl->leaves, sl->leaves_num,
+ DEFAULT_SORT_FUNC_RADIXSORT(sl->leaves, sl->leaves_num,
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) func);
@@ -389,12 +391,12 @@ run_sort_level_next(struct sort_level *sl)
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) list_coll);
} else {
- qsort(sl->leaves, sl->leaves_num,
+ DEFAULT_SORT_FUNC_RADIXSORT(sl->leaves, sl->leaves_num,
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) list_coll);
}
} else if (!sort_opts_vals.sflag && sort_opts_vals.complex_sort) {
- qsort(sl->leaves, sl->leaves_num,
+ DEFAULT_SORT_FUNC_RADIXSORT(sl->leaves, sl->leaves_num,
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) list_coll_by_str_only);
}
@@ -541,12 +543,12 @@ run_top_sort_level(struct sort_level *sl)
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) list_coll);
} else {
- qsort(sl->leaves, sl->leaves_num,
+ DEFAULT_SORT_FUNC_RADIXSORT(sl->leaves, sl->leaves_num,
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) list_coll);
}
} else if (!sort_opts_vals.sflag && sort_opts_vals.complex_sort) {
- qsort(sl->leaves, sl->leaves_num,
+ DEFAULT_SORT_FUNC_RADIXSORT(sl->leaves, sl->leaves_num,
sizeof(struct sort_list_item *),
(int(*)(const void *, const void *)) list_coll_by_str_only);
}
diff --git a/usr.bin/sort/sort.1.in b/usr.bin/sort/sort.1.in
index 8980061..f29c911 100644
--- a/usr.bin/sort/sort.1.in
+++ b/usr.bin/sort/sort.1.in
@@ -33,7 +33,7 @@
.\"
.\" @(#)sort.1 8.1 (Berkeley) 6/6/93
.\"
-.Dd May 25, 2012
+.Dd July 3, 2012
.Dt SORT 1
.Os
.Sh NAME
@@ -329,7 +329,7 @@ is used.
.It Fl Fl debug
Print some extra information about the sorting process to the
standard output.
-%%THREADS%%.It Fl Fl nthreads
+%%THREADS%%.It Fl Fl parallel
%%THREADS%%Set the maximum number of execution threads.
%%THREADS%%Default number equals to the number of CPUs.
.It Fl Fl files0-from Ns = Ns Ar filename
diff --git a/usr.bin/sort/sort.c b/usr.bin/sort/sort.c
index dd0ed68..0668bdf 100644
--- a/usr.bin/sort/sort.c
+++ b/usr.bin/sort/sort.c
@@ -91,7 +91,7 @@ const char *nlsstr[] = { "",
"[--heapsort] [--mergesort] [--radixsort] [--qsort] "
"[--mmap] "
#if defined(SORT_THREADS)
- "[--nthreads thread_no] "
+ "[--parallel thread_no] "
#endif
"[--human-numeric-sort] "
"[--version-sort] [--random-sort [--random-source file]] "
@@ -132,7 +132,7 @@ enum
VERSION_OPT,
DEBUG_OPT,
#if defined(SORT_THREADS)
- NTHREADS_OPT,
+ PARALLEL_OPT,
#endif
RANDOMSOURCE_OPT,
COMPRESSPROGRAM_OPT,
@@ -171,7 +171,7 @@ struct option long_options[] = {
{ "numeric-sort", no_argument, NULL, 'n' },
{ "output", required_argument, NULL, 'o' },
#if defined(SORT_THREADS)
- { "nthreads", required_argument, NULL, NTHREADS_OPT },
+ { "parallel", required_argument, NULL, PARALLEL_OPT },
#endif
{ "qsort", no_argument, NULL, QSORT_OPT },
{ "radixsort", no_argument, NULL, RADIXSORT_OPT },
@@ -1119,7 +1119,7 @@ main(int argc, char **argv)
}
break;
#if defined(SORT_THREADS)
- case NTHREADS_OPT:
+ case PARALLEL_OPT:
nthreads = (size_t)(atoi(optarg));
if (nthreads < 1)
nthreads = 1;
OpenPOWER on IntegriCloud