Added the information from uname in the help.
[dus.git] / dus.c
diff --git a/dus.c b/dus.c
index f67dcea..e215207 100644 (file)
--- a/dus.c
+++ b/dus.c
@@ -22,6 +22,8 @@
  *
  */
 
+#define VERSION_NUMBER "1.0alpha"
+
 #define _BSD_SOURCE
 
 #include <sys/types.h>
@@ -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 <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");
+}
 
 /**********************************************************************/
 
@@ -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 <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);
     }
   }
@@ -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);