svn commit: trunk/busybox/coreutils

landley at busybox.net landley at busybox.net
Wed May 3 20:22:04 UTC 2006


Author: landley
Date: 2006-05-03 13:22:03 -0700 (Wed, 03 May 2006)
New Revision: 14986

Log:
Patch from Rich Felker to make ls use libc's qsort.


Modified:
   trunk/busybox/coreutils/ls.c


Changeset:
Modified: trunk/busybox/coreutils/ls.c
===================================================================
--- trunk/busybox/coreutils/ls.c	2006-05-03 20:19:14 UTC (rev 14985)
+++ trunk/busybox/coreutils/ls.c	2006-05-03 20:22:03 UTC (rev 14986)
@@ -396,8 +396,10 @@
 
 /*----------------------------------------------------------------------*/
 #ifdef CONFIG_FEATURE_LS_SORTFILES
-static int sortcmp(struct dnode *d1, struct dnode *d2)
+static int sortcmp(const void *a, const void *b)
 {
+	struct dnode *d1 = *(struct dnode **)a;
+	struct dnode *d2 = *(struct dnode **)b;
 	unsigned int sort_opts = all_fmt & SORT_MASK;
 	int dif;
 
@@ -432,27 +434,9 @@
 }
 
 /*----------------------------------------------------------------------*/
-static void shellsort(struct dnode **dn, int size)
+static void dnsort(struct dnode **dn, int size)
 {
-	struct dnode *temp;
-	int gap, i, j;
-
-	/* shell short the array */
-	if (dn == NULL || size < 2)
-		return;
-
-	for (gap = size / 2; gap > 0; gap /= 2) {
-		for (i = gap; i < size; i++) {
-			for (j = i - gap; j >= 0; j -= gap) {
-				if (sortcmp(dn[j], dn[j + gap]) <= 0)
-					break;
-				/* they are out of order, swap them */
-				temp = dn[j];
-				dn[j] = dn[j + gap];
-				dn[j + gap] = temp;
-			}
-		}
-	}
+	qsort(dn, size, sizeof *dn, sortcmp);
 }
 #endif
 
@@ -543,7 +527,7 @@
 		if (nfiles > 0) {
 			/* list all files at this level */
 #ifdef CONFIG_FEATURE_LS_SORTFILES
-			shellsort(subdnp, nfiles);
+			dnsort(subdnp, nfiles);
 #endif
 			showfiles(subdnp, nfiles);
 #ifdef CONFIG_FEATURE_LS_RECURSIVE
@@ -553,7 +537,7 @@
 				dndirs = countsubdirs(subdnp, nfiles);
 				if (dndirs > 0) {
 #ifdef CONFIG_FEATURE_LS_SORTFILES
-					shellsort(dnd, dndirs);
+					dnsort(dnd, dndirs);
 #endif
 					showdirs(dnd, dndirs, 0);
 					free(dnd);	/* free the array of dnode pointers to the dirs */
@@ -1135,7 +1119,7 @@
 
 	if (all_fmt & DISP_NOLIST) {
 #ifdef CONFIG_FEATURE_LS_SORTFILES
-		shellsort(dnp, nfiles);
+		dnsort(dnp, nfiles);
 #endif
 		if (nfiles > 0)
 			showfiles(dnp, nfiles);
@@ -1146,7 +1130,7 @@
 		dnfiles = nfiles - dndirs;
 		if (dnfiles > 0) {
 #ifdef CONFIG_FEATURE_LS_SORTFILES
-			shellsort(dnf, dnfiles);
+			dnsort(dnf, dnfiles);
 #endif
 			showfiles(dnf, dnfiles);
 			if (ENABLE_FEATURE_CLEAN_UP)
@@ -1154,7 +1138,7 @@
 		}
 		if (dndirs > 0) {
 #ifdef CONFIG_FEATURE_LS_SORTFILES
-			shellsort(dnd, dndirs);
+			dnsort(dnd, dndirs);
 #endif
 			showdirs(dnd, dndirs, dnfiles == 0);
 			if (ENABLE_FEATURE_CLEAN_UP)




More information about the busybox-cvs mailing list