/*----------------------------------------------------------------------*/
#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;
}
/*----------------------------------------------------------------------*/
-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
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
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 */
if (all_fmt & DISP_NOLIST) {
#ifdef CONFIG_FEATURE_LS_SORTFILES
- shellsort(dnp, nfiles);
+ dnsort(dnp, nfiles);
#endif
if (nfiles > 0)
showfiles(dnp, nfiles);
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)
}
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)