*
*/
+#define VERSION_NUMBER "1.0alpha"
+
#define _BSD_SOURCE
#include <sys/types.h>
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;
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);
}
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 <cols> 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 <lines> 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 <francois@fleuret.org>\n");
+}
/**********************************************************************/
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 <cols> 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 <lines> same as -c for number of lines.\n");
- printf(" -h show this help.\n");
- printf("\n");
- printf("Report bugs and comments to <francois@fleuret.org>\n");
+ print_help(stdout);
exit(EXIT_SUCCESS);
break;
default:
+ print_help(stderr);
exit(EXIT_FAILURE);
}
}
}
}
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);