aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Beppu <beppu@lbox.org>1999-12-23 00:02:49 +0000
committerJohn Beppu <beppu@lbox.org>1999-12-23 00:02:49 +0000
commitee512a3f8620ab535716b8aa016b33610010920c (patch)
treef50f631422c487b83c6d95c39275844086ff9715
parent568cb7b45f8ec1e0f6e6cad296c5431e66785a6b (diff)
downloadbusybox-ee512a3f8620ab535716b8aa016b33610010920c.tar.gz
implemented numeric sort (sort -g)
-rw-r--r--coreutils/sort.c39
-rw-r--r--sort.c39
2 files changed, 60 insertions, 18 deletions
diff --git a/coreutils/sort.c b/coreutils/sort.c
index e5f229648..127d68319 100644
--- a/coreutils/sort.c
+++ b/coreutils/sort.c
@@ -115,9 +115,9 @@ compare_ascii(const void *a, const void *b)
Line *x, *y;
doh = (Line **) a;
- x = (Line *) *doh;
+ x = *doh;
doh = (Line **) b;
- y = (Line *) *doh;
+ y = *doh;
// fprintf(stdout, "> %p: %s< %p: %s", x, x->data, y, y->data);
return strcmp(x->data, y->data);
@@ -127,7 +127,19 @@ compare_ascii(const void *a, const void *b)
static int
compare_numeric(const void *a, const void *b)
{
- return 0;
+ Line **doh;
+ Line *x, *y;
+ int xint, yint;
+
+ doh = (Line **) a;
+ x = *doh;
+ doh = (Line **) b;
+ y = *doh;
+
+ xint = strtoul(x->data, NULL, 10);
+ yint = strtoul(y->data, NULL, 10);
+
+ return (xint - yint);
}
@@ -232,14 +244,20 @@ sort_main(int argc, char **argv)
char opt;
List list;
Line *l;
+ Compare *compare;
- /* default behaviour */
+ /* init */
+ compare = compare_ascii;
+ list_init(&list);
/* parse argv[] */
for (i = 1; i < argc; i++) {
if (argv[i][0] == '-') {
opt = argv[i][1];
switch (opt) {
+ case 'g':
+ compare = compare_numeric;
+ break;
case 'h':
usage(sort_usage);
break;
@@ -252,15 +270,12 @@ sort_main(int argc, char **argv)
}
}
- /* initialize list */
- list_init(&list);
-
/* go through remaining args (if any) */
if (i >= argc) {
while ( (l = line_newFromFile(stdin))) {
list_insert(&list, l);
}
- list_sort(&list, compare_ascii);
+ list_sort(&list, compare);
list_writeToFile(&list, stdout);
list_release(&list);
} else {
@@ -271,15 +286,21 @@ sort_main(int argc, char **argv)
exit(0);
}
-/* $Id: sort.c,v 1.6 1999/12/22 23:02:12 beppu Exp $ */
+/* $Id: sort.c,v 1.7 1999/12/23 00:02:49 beppu Exp $ */
/*
* $Log: sort.c,v $
+ * Revision 1.7 1999/12/23 00:02:49 beppu
+ * implemented numeric sort (sort -g)
+ *
* Revision 1.6 1999/12/22 23:02:12 beppu
* oops.. qsort(2) misunderstanding on my part.
* it's ok, now.
*
* Revision 1.5 1999/12/22 22:27:01 beppu
* playing w/ $Log: sort.c,v $
+ * playing w/ Revision 1.7 1999/12/23 00:02:49 beppu
+ * playing w/ implemented numeric sort (sort -g)
+ * playing w/
* playing w/ Revision 1.6 1999/12/22 23:02:12 beppu
* playing w/ oops.. qsort(2) misunderstanding on my part.
* playing w/ it's ok, now.
diff --git a/sort.c b/sort.c
index e5f229648..127d68319 100644
--- a/sort.c
+++ b/sort.c
@@ -115,9 +115,9 @@ compare_ascii(const void *a, const void *b)
Line *x, *y;
doh = (Line **) a;
- x = (Line *) *doh;
+ x = *doh;
doh = (Line **) b;
- y = (Line *) *doh;
+ y = *doh;
// fprintf(stdout, "> %p: %s< %p: %s", x, x->data, y, y->data);
return strcmp(x->data, y->data);
@@ -127,7 +127,19 @@ compare_ascii(const void *a, const void *b)
static int
compare_numeric(const void *a, const void *b)
{
- return 0;
+ Line **doh;
+ Line *x, *y;
+ int xint, yint;
+
+ doh = (Line **) a;
+ x = *doh;
+ doh = (Line **) b;
+ y = *doh;
+
+ xint = strtoul(x->data, NULL, 10);
+ yint = strtoul(y->data, NULL, 10);
+
+ return (xint - yint);
}
@@ -232,14 +244,20 @@ sort_main(int argc, char **argv)
char opt;
List list;
Line *l;
+ Compare *compare;
- /* default behaviour */
+ /* init */
+ compare = compare_ascii;
+ list_init(&list);
/* parse argv[] */
for (i = 1; i < argc; i++) {
if (argv[i][0] == '-') {
opt = argv[i][1];
switch (opt) {
+ case 'g':
+ compare = compare_numeric;
+ break;
case 'h':
usage(sort_usage);
break;
@@ -252,15 +270,12 @@ sort_main(int argc, char **argv)
}
}
- /* initialize list */
- list_init(&list);
-
/* go through remaining args (if any) */
if (i >= argc) {
while ( (l = line_newFromFile(stdin))) {
list_insert(&list, l);
}
- list_sort(&list, compare_ascii);
+ list_sort(&list, compare);
list_writeToFile(&list, stdout);
list_release(&list);
} else {
@@ -271,15 +286,21 @@ sort_main(int argc, char **argv)
exit(0);
}
-/* $Id: sort.c,v 1.6 1999/12/22 23:02:12 beppu Exp $ */
+/* $Id: sort.c,v 1.7 1999/12/23 00:02:49 beppu Exp $ */
/*
* $Log: sort.c,v $
+ * Revision 1.7 1999/12/23 00:02:49 beppu
+ * implemented numeric sort (sort -g)
+ *
* Revision 1.6 1999/12/22 23:02:12 beppu
* oops.. qsort(2) misunderstanding on my part.
* it's ok, now.
*
* Revision 1.5 1999/12/22 22:27:01 beppu
* playing w/ $Log: sort.c,v $
+ * playing w/ Revision 1.7 1999/12/23 00:02:49 beppu
+ * playing w/ implemented numeric sort (sort -g)
+ * playing w/
* playing w/ Revision 1.6 1999/12/22 23:02:12 beppu
* playing w/ oops.. qsort(2) misunderstanding on my part.
* playing w/ it's ok, now.