diff options
Diffstat (limited to 'sort.c')
-rw-r--r-- | sort.c | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/sort.c b/sort.c deleted file mode 100644 index 4f4979cc5..000000000 --- a/sort.c +++ /dev/null | |||
@@ -1,106 +0,0 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * Mini sort implementation for busybox | ||
4 | * | ||
5 | * | ||
6 | * Copyright (C) 2000 by Matt Kraai <kraai@alumni.carnegiemellon.edu> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #include <getopt.h> | ||
25 | #include <string.h> | ||
26 | #include <stdlib.h> | ||
27 | #include "busybox.h" | ||
28 | |||
29 | static int compare_ascii(const void *x, const void *y) | ||
30 | { | ||
31 | return strcmp(*(char **)x, *(char **)y); | ||
32 | } | ||
33 | |||
34 | static int compare_numeric(const void *x, const void *y) | ||
35 | { | ||
36 | int z = atoi(*(char **)x) - atoi(*(char **)y); | ||
37 | return z ? z : strcmp(*(char **)x, *(char **)y); | ||
38 | } | ||
39 | |||
40 | int sort_main(int argc, char **argv) | ||
41 | { | ||
42 | FILE *fp; | ||
43 | char *line, **lines = NULL; | ||
44 | int i, opt, nlines = 0; | ||
45 | int (*compare)(const void *, const void *) = compare_ascii; | ||
46 | #ifdef BB_FEATURE_SORT_REVERSE | ||
47 | int reverse = FALSE; | ||
48 | #endif | ||
49 | #ifdef BB_FEATURE_SORT_UNIQUE | ||
50 | int unique = FALSE; | ||
51 | #endif | ||
52 | |||
53 | while ((opt = getopt(argc, argv, "nru")) != -1) { | ||
54 | switch (opt) { | ||
55 | case 'n': | ||
56 | compare = compare_numeric; | ||
57 | break; | ||
58 | #ifdef BB_FEATURE_SORT_REVERSE | ||
59 | case 'r': | ||
60 | reverse = TRUE; | ||
61 | break; | ||
62 | #endif | ||
63 | #ifdef BB_FEATURE_SORT_UNIQUE | ||
64 | case 'u': | ||
65 | unique = TRUE; | ||
66 | break; | ||
67 | #endif | ||
68 | default: | ||
69 | show_usage(); | ||
70 | } | ||
71 | } | ||
72 | |||
73 | /* read the input */ | ||
74 | for (i = optind; i == optind || i < argc; i++) { | ||
75 | if (argv[i] == NULL) | ||
76 | fp = stdin; | ||
77 | else | ||
78 | fp = xfopen(argv[i], "r"); | ||
79 | |||
80 | while ((line = get_line_from_file(fp)) != NULL) { | ||
81 | lines = xrealloc(lines, sizeof(char *) * (nlines + 1)); | ||
82 | chomp(line); | ||
83 | lines[nlines++] = line; | ||
84 | } | ||
85 | } | ||
86 | |||
87 | /* sort it */ | ||
88 | qsort(lines, nlines, sizeof(char *), compare); | ||
89 | |||
90 | /* print it */ | ||
91 | #ifdef BB_FEATURE_SORT_REVERSE | ||
92 | if (reverse) { | ||
93 | for (i = --nlines; 0 <= i; i--) | ||
94 | #ifdef BB_FEATURE_SORT_UNIQUE | ||
95 | if((!unique) || (i == nlines) || (strcmp(lines[i + 1], lines[i]))) | ||
96 | #endif | ||
97 | puts(lines[i]); | ||
98 | } else | ||
99 | #endif | ||
100 | for (i = 0; i < nlines; i++) | ||
101 | #ifdef BB_FEATURE_SORT_UNIQUE | ||
102 | if((!unique) || (!i) || (strcmp(lines[i - 1], lines[i]))) | ||
103 | #endif | ||
104 | puts(lines[i]); | ||
105 | return EXIT_SUCCESS; | ||
106 | } | ||