sort: fix multiple -k (was ignoring all except last)
diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c
index f060c0a..c69470a 100644
--- a/coreutils/od_bloaty.c
+++ b/coreutils/od_bloaty.c
@@ -1312,7 +1312,7 @@
 	if (opt & OPT_l) decode_format_string("d4");
 	if (opt & OPT_o) decode_format_string("o2");
 	//if (opt & OPT_t)...
-	lst_t = rev_llist(lst_t);
+	lst_t = llist_rev(lst_t);
 	while (lst_t) {
 		decode_format_string(lst_t->data);
 		lst_t = lst_t->link;
diff --git a/coreutils/sort.c b/coreutils/sort.c
index e2c7b1d..311d0cb 100644
--- a/coreutils/sort.c
+++ b/coreutils/sort.c
@@ -276,7 +276,8 @@
 {
 	FILE *fp, *outfile = stdout;
 	char *line, **lines = NULL;
-	char *str_ignored, *str_o, *str_k, *str_t;
+	char *str_ignored, *str_o, *str_t;
+	llist_t *lst_k = NULL;
 	int i, flag;
 	int linecount = 0;
 
@@ -284,8 +285,9 @@
 
 	/* Parse command line options */
 	/* -o and -t can be given at most once */
-	opt_complementary = "?:o--o:t--t";
-	getopt32(argc, argv, OPT_STR, &str_ignored, &str_ignored, &str_o, &str_k, &str_t);
+	opt_complementary = "?:o--o:t--t:" /* -t, -o: maximum one of each */
+			"k::"; /* -k takes list */
+	getopt32(argc, argv, OPT_STR, &str_ignored, &str_ignored, &str_o, &lst_k, &str_t);
 #if ENABLE_FEATURE_SORT_BIG
 	if (option_mask32 & FLAG_o) outfile = xfopen(str_o, "w");
 	if (option_mask32 & FLAG_t) {
@@ -294,7 +296,8 @@
 		key_separator = str_t[0];
 	}
 	/* parse sort key */
-	if (option_mask32 & FLAG_k) {
+	lst_k = llist_rev(lst_k);
+	while (lst_k) {
 		enum {
 			FLAG_allowed_for_k =
 				FLAG_n | /* Numeric sort */
@@ -308,6 +311,7 @@
 			0
 		};
 		struct sort_key *key = add_key();
+		char *str_k = lst_k->data;
 		const char *temp2;
 
 		i = 0; /* i==0 before comma, 1 after (-k3,6) */
@@ -337,6 +341,8 @@
 				str_k++;
 			}
 		}
+		/* leaking lst_k... */
+		lst_k = lst_k->link;
 	}
 #endif
 	/* global b strips leading and trailing spaces */