diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-17 18:11:45 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-17 18:11:45 +0000 |
| commit | 54cf511ce1286ce46f04e4cead085b4af829f179 (patch) | |
| tree | a43331e67e2472f7a8c415aee09ce17137d734a6 /coreutils | |
| parent | ec27feb04589d46233802f686559fb5f532fb2df (diff) | |
| download | busybox-w32-54cf511ce1286ce46f04e4cead085b4af829f179.tar.gz busybox-w32-54cf511ce1286ce46f04e4cead085b4af829f179.tar.bz2 busybox-w32-54cf511ce1286ce46f04e4cead085b4af829f179.zip | |
sort: fix multiple -k (was ignoring all except last)
Diffstat (limited to 'coreutils')
| -rw-r--r-- | coreutils/od_bloaty.c | 2 | ||||
| -rw-r--r-- | coreutils/sort.c | 14 |
2 files changed, 11 insertions, 5 deletions
diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c index f060c0ace..c69470a14 100644 --- a/coreutils/od_bloaty.c +++ b/coreutils/od_bloaty.c | |||
| @@ -1312,7 +1312,7 @@ int od_main(int argc, char **argv) | |||
| 1312 | if (opt & OPT_l) decode_format_string("d4"); | 1312 | if (opt & OPT_l) decode_format_string("d4"); |
| 1313 | if (opt & OPT_o) decode_format_string("o2"); | 1313 | if (opt & OPT_o) decode_format_string("o2"); |
| 1314 | //if (opt & OPT_t)... | 1314 | //if (opt & OPT_t)... |
| 1315 | lst_t = rev_llist(lst_t); | 1315 | lst_t = llist_rev(lst_t); |
| 1316 | while (lst_t) { | 1316 | while (lst_t) { |
| 1317 | decode_format_string(lst_t->data); | 1317 | decode_format_string(lst_t->data); |
| 1318 | lst_t = lst_t->link; | 1318 | lst_t = lst_t->link; |
diff --git a/coreutils/sort.c b/coreutils/sort.c index e2c7b1dbf..311d0cb9c 100644 --- a/coreutils/sort.c +++ b/coreutils/sort.c | |||
| @@ -276,7 +276,8 @@ int sort_main(int argc, char **argv) | |||
| 276 | { | 276 | { |
| 277 | FILE *fp, *outfile = stdout; | 277 | FILE *fp, *outfile = stdout; |
| 278 | char *line, **lines = NULL; | 278 | char *line, **lines = NULL; |
| 279 | char *str_ignored, *str_o, *str_k, *str_t; | 279 | char *str_ignored, *str_o, *str_t; |
| 280 | llist_t *lst_k = NULL; | ||
| 280 | int i, flag; | 281 | int i, flag; |
| 281 | int linecount = 0; | 282 | int linecount = 0; |
| 282 | 283 | ||
| @@ -284,8 +285,9 @@ int sort_main(int argc, char **argv) | |||
| 284 | 285 | ||
| 285 | /* Parse command line options */ | 286 | /* Parse command line options */ |
| 286 | /* -o and -t can be given at most once */ | 287 | /* -o and -t can be given at most once */ |
| 287 | opt_complementary = "?:o--o:t--t"; | 288 | opt_complementary = "?:o--o:t--t:" /* -t, -o: maximum one of each */ |
| 288 | getopt32(argc, argv, OPT_STR, &str_ignored, &str_ignored, &str_o, &str_k, &str_t); | 289 | "k::"; /* -k takes list */ |
| 290 | getopt32(argc, argv, OPT_STR, &str_ignored, &str_ignored, &str_o, &lst_k, &str_t); | ||
| 289 | #if ENABLE_FEATURE_SORT_BIG | 291 | #if ENABLE_FEATURE_SORT_BIG |
| 290 | if (option_mask32 & FLAG_o) outfile = xfopen(str_o, "w"); | 292 | if (option_mask32 & FLAG_o) outfile = xfopen(str_o, "w"); |
| 291 | if (option_mask32 & FLAG_t) { | 293 | if (option_mask32 & FLAG_t) { |
| @@ -294,7 +296,8 @@ int sort_main(int argc, char **argv) | |||
| 294 | key_separator = str_t[0]; | 296 | key_separator = str_t[0]; |
| 295 | } | 297 | } |
| 296 | /* parse sort key */ | 298 | /* parse sort key */ |
| 297 | if (option_mask32 & FLAG_k) { | 299 | lst_k = llist_rev(lst_k); |
| 300 | while (lst_k) { | ||
| 298 | enum { | 301 | enum { |
| 299 | FLAG_allowed_for_k = | 302 | FLAG_allowed_for_k = |
| 300 | FLAG_n | /* Numeric sort */ | 303 | FLAG_n | /* Numeric sort */ |
| @@ -308,6 +311,7 @@ int sort_main(int argc, char **argv) | |||
| 308 | 0 | 311 | 0 |
| 309 | }; | 312 | }; |
| 310 | struct sort_key *key = add_key(); | 313 | struct sort_key *key = add_key(); |
| 314 | char *str_k = lst_k->data; | ||
| 311 | const char *temp2; | 315 | const char *temp2; |
| 312 | 316 | ||
| 313 | i = 0; /* i==0 before comma, 1 after (-k3,6) */ | 317 | i = 0; /* i==0 before comma, 1 after (-k3,6) */ |
| @@ -337,6 +341,8 @@ int sort_main(int argc, char **argv) | |||
| 337 | str_k++; | 341 | str_k++; |
| 338 | } | 342 | } |
| 339 | } | 343 | } |
| 344 | /* leaking lst_k... */ | ||
| 345 | lst_k = lst_k->link; | ||
| 340 | } | 346 | } |
| 341 | #endif | 347 | #endif |
| 342 | /* global b strips leading and trailing spaces */ | 348 | /* global b strips leading and trailing spaces */ |
