X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=dus.c;h=e215207f9b0dd0219229b80c2ca5b9b58a89b67e;hb=4fc4ddb813fa67db475a66090e4fb08fe829ccc6;hp=f67dcea01df18d76191e3af145cabb06963ecd69;hpb=2d5043500e907b11b2714e7712b435dc0156ccab;p=dus.git diff --git a/dus.c b/dus.c index f67dcea..e215207 100644 --- a/dus.c +++ b/dus.c @@ -22,6 +22,8 @@ * */ +#define VERSION_NUMBER "1.0alpha" + #define _BSD_SOURCE #include @@ -66,7 +68,7 @@ int show_top = 0; /* 1 means to show the top of the sorted list void *safe_malloc(size_t n) { void *p = malloc(n); if (!p && n != 0) { - printf("Can not allocate memory: %s\n", strerror(errno)); + fprintf(stderr, "Can not allocate memory: %s\n", strerror(errno)); exit(EXIT_FAILURE); } return p; @@ -106,7 +108,7 @@ size_sum_t file_or_dir_size(const char *name) { result = 0; if(lstat(name, &dummy) != 0) { - printf("Can not stat %s: %s\n", name, strerror(errno)); + fprintf(stderr, "Can not stat %s: %s\n", name, strerror(errno)); exit(EXIT_FAILURE); } @@ -288,6 +290,25 @@ void print_sorted(struct file_with_size *root, int width, int height) { free(nodes); } +/**********************************************************************/ +void print_help(FILE *out) { + fprintf(out, "Usage: dus [OPTION]... [FILE]...\n"); + fprintf(out, "Version %s (%s)\n", VERSION_NUMBER, UNAME); + fprintf(out, "List files and directories sorted according to their size or content size. Take the content of the current directory as argument if none is provided.\n"); + fprintf(out, "\n"); + fprintf(out, " -d ignore files and directories starting with a '.'\n"); + fprintf(out, " -f display size with float values and K, M and G units.\n"); + fprintf(out, " -r reverse the sorting order.\n"); + fprintf(out, " -t show the top of the list.\n"); + fprintf(out, " -c specificy the number of columns to display. The value -1\n"); + fprintf(out, " corresponds to no constraint. By default the command\n"); + fprintf(out, " uses the tty width, or no constraint if the stdout is\n"); + fprintf(out, " not a tty.\n"); + fprintf(out, " -l same as -c for number of lines.\n"); + fprintf(out, " -h show this help.\n"); + fprintf(out, "\n"); + fprintf(out, "Report bugs and comments to \n"); +} /**********************************************************************/ @@ -331,26 +352,13 @@ int main(int argc, char **argv) { break; case 'h': - printf("Usage: dus [OPTION]... [FILE]...\n"); - printf("List files and directories sorted according to their size or content size. Take the content of the current directory as argument if none is provided.\n"); - printf("\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(" -t show the top of the list.\n"); - printf(" -c specificy the number of columns to display. The value -1\n"); - printf(" corresponds to no constraint. By default the command\n"); - printf(" uses the tty width, or no constraint if the stdout is\n"); - printf(" not a tty.\n"); - printf(" -l same as -c for number of lines.\n"); - printf(" -h show this help.\n"); - printf("\n"); - printf("Report bugs and comments to \n"); + print_help(stdout); exit(EXIT_SUCCESS); break; default: + print_help(stderr); exit(EXIT_FAILURE); } } @@ -370,13 +378,16 @@ int main(int argc, char **argv) { } } closedir(dir); + } else { + fprintf(stderr, "Can not open ./: %s\n", strerror(errno)); + exit (EXIT_FAILURE); } } if(isatty(STDOUT_FILENO)) { struct winsize win; if(ioctl (STDOUT_FILENO, TIOCGWINSZ, (char *) &win)) { - printf("Can not get the tty size: %s\n", strerror(errno)); + fprintf(stderr, "Can not get the tty size: %s\n", strerror(errno)); exit (EXIT_FAILURE); } print_sorted(root, win.ws_col, win.ws_row - 2);