From c5a7ab35ccecea3e00ab4dd2ba12a39e65a4d3c6 Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Fri, 26 Feb 2010 19:29:39 +0100 Subject: [PATCH] Added an option to revert the sort order. --- dus.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/dus.c b/dus.c index 3a4d7f4..b6c8851 100644 --- a/dus.c +++ b/dus.c @@ -51,6 +51,8 @@ int forced_height = 0; /* -1 means no height limit, strictly positive int fancy_size_display = 0; /* 1 means to use floating values with K, M and G as units */ +int reverse_sorting = 0; /* 1 means to show the large ones first */ + /********************************************************************/ int ignore_entry(const char *name) { @@ -147,12 +149,22 @@ int compare_files(const void *x1, const void *x2) { f1 = (const struct file_with_size **) x1; f2 = (const struct file_with_size **) x2; - if((*f1)->size < (*f2)->size) { - return -1; - } else if((*f1)->size > (*f2)->size) { - return 1; + if(reverse_sorting) { + if((*f1)->size < (*f2)->size) { + return 1; + } else if((*f1)->size > (*f2)->size) { + return -1; + } else { + return 0; + } } else { - return 0; + if((*f1)->size < (*f2)->size) { + return -1; + } else if((*f1)->size > (*f2)->size) { + return 1; + } else { + return 0; + } } } @@ -226,7 +238,7 @@ int main(int argc, char **argv) { setlocale (LC_ALL, ""); while (1) { - c = getopt(argc, argv, "dfl:hdu"); + c = getopt(argc, argv, "dfrl:hdu"); if (c == -1) break; @@ -240,21 +252,25 @@ int main(int argc, char **argv) { fancy_size_display = 1; break; + case 'r': + reverse_sorting = 1; + break; + case 'l': forced_height = atoi(optarg); break; case 'h': printf("Usage: dus [OPTION]... [FILE]...\n"); - printf("List files and directories sorted according to their size or content \n"); - printf("size.\n"); + printf("List files and directories sorted according to their size or content size (the content of the current directory by default).\n"); printf("\n"); - printf(" -d do not take into account files starting with a '.'\n"); + printf(" -d ignore files and directories starting with a '.'\n"); printf(" -f display size with float values and K, M and G units.\n"); + printf(" -r reverse the sorting order.\n"); printf(" -l specificy the number of lines to display. The value -1\n"); printf(" corresponds to all the lines. By default the command\n"); - printf(" shows one line less than the number of lines of the TTY,\n"); - printf(" or all the lines if standard output is not a tty\n"); + printf(" shows one line less than the height the tty, or all the\n"); + printf(" lines if the standard output is not a tty.\n"); printf(" -h show this help.\n"); printf("\n"); printf("Report bugs and comments to \n"); -- 2.20.1