Print errors to stderr.
[dus.git] / dus.c
diff --git a/dus.c b/dus.c
index 6ca0067..04147a1 100644 (file)
--- a/dus.c
+++ b/dus.c
@@ -66,7 +66,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 +106,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);
   }
 
@@ -187,7 +187,7 @@ int compare_files(const void *x1, const void *x2) {
   }
 }
 
-void raw_print(char *buffer, char *filename, size_t size) {
+void raw_print(char *buffer, char *filename,  size_sum_t size) {
   char *a, *b, *c, u;
 
   b = buffer;
@@ -213,7 +213,7 @@ void raw_print(char *buffer, char *filename, size_t size) {
   sprintf(b, " %s\n", filename);
 }
 
-void fancy_print(char *buffer, char *filename, size_t size) {
+void fancy_print(char *buffer, char *filename, size_sum_t size) {
   if(size < 1024) {
     sprintf(buffer,
             "% 7d %s\n",
@@ -332,17 +332,18 @@ int main(int argc, char **argv) {
 
     case 'h':
       printf("Usage: dus [OPTION]... [FILE]...\n");
-      printf("List files and directories sorted according to their size or content size (the content of the current directory by default).\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("   -l <lines> 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 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("   -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");
       exit(EXIT_SUCCESS);
@@ -369,13 +370,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);