From fd984e754c4afb18447afa313aaa3c5699471f30 Mon Sep 17 00:00:00 2001
From: Yorhel <git@yorhel.nl>
Date: Tue, 5 May 2009 19:25:52 +0200
Subject: [PATCH] Added hard link indicator in browser and help window

---
 src/browser.c | 1 +
 src/calc.c    | 6 +++---
 src/global.h  | 3 ++-
 src/help.c    | 6 ++++--
 4 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/browser.c b/src/browser.c
index 0ce02b7..3cb354a 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -176,6 +176,7 @@ void browse_draw_item(struct dir *n, int row, off_t max, int ispar) {
         n->flags & FF_ERR ? '!' :
        n->flags & FF_SERR ? '.' :
       n->flags & FF_OTHFS ? '>' :
+       n->flags & FF_HLNK ? 'H' :
      !(n->flags & FF_FILE
     || n->flags & FF_DIR) ? '@' :
         n->flags & FF_DIR
diff --git a/src/calc.c b/src/calc.c
index 6fb02cc..f9c6064 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -143,9 +143,9 @@ int calc_item(struct dir *par, char *name) {
     for(i=0; i<linkst; i++)
       if(links[i].dev == fs.st_dev && links[i].ino == fs.st_ino)
         break;
-    /* found in the list, set size = 0 */
+    /* found in the list, set link flag (so the size won't get counted) */
     if(i != linkst)
-      fs.st_blocks = fs.st_size = 0;
+      d->flags |= FF_HLNK;
     /* not found, add to the list */
     else {
       if(++linkst > linksl) {
@@ -162,7 +162,7 @@ int calc_item(struct dir *par, char *name) {
   }
 
   /* count the size */
-  if(!(d->flags & FF_EXL || d->flags & FF_OTHFS)) {
+  if(!(d->flags & FF_EXL || d->flags & FF_OTHFS || d->flags & FF_HLNK)) {
     d->size = fs.st_blocks * S_BLKSIZE;
     d->asize = fs.st_size;
     for(t=d->parent; t!=NULL; t=t->parent) {
diff --git a/src/global.h b/src/global.h
index ebf7fd7..dfa7ff6 100644
--- a/src/global.h
+++ b/src/global.h
@@ -37,7 +37,8 @@
 #define FF_OTHFS  0x08 /* excluded because it was an other filesystem */
 #define FF_EXL    0x10 /* excluded using exlude patterns */
 #define FF_SERR   0x20 /* error in subdirectory */
-#define FF_BSEL   0x40 /* selected */
+#define FF_HLNK   0x40 /* hard link (same file already encountered before) */
+#define FF_BSEL   0x80 /* selected */
 
 /* Program states */
 #define ST_CALC   0
diff --git a/src/help.c b/src/help.c
index e51586f..fdfa6d7 100644
--- a/src/help.c
+++ b/src/help.c
@@ -95,14 +95,16 @@ void help_draw() {
       ncaddch( 7, 4, '<');
       ncaddch( 8, 4, '>');
       ncaddch( 9, 4, '@');
-      ncaddch(10, 4, 'e');
+      ncaddch(10, 4, 'H');
+      ncaddch(11, 4, 'e');
       attroff(A_BOLD);
       ncaddstr( 5, 7, "An error occured while reading this directory");
       ncaddstr( 6, 7, "An error occured while reading a subdirectory");
       ncaddstr( 7, 7, "File or directory is excluded from the statistics");
       ncaddstr( 8, 7, "Directory was on an other filesystem");
       ncaddstr( 9, 7, "This is not a file nor a dir (symlink, socket, ...)");
-      ncaddstr(10, 7, "Empty directory");
+      ncaddstr(10, 7, "Same file was already counted (hard link)");
+      ncaddstr(11, 7, "Empty directory");
       break;
     case 3:
       /* Indeed, too much spare time */
-- 
GitLab