X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=dus.git;a=blobdiff_plain;f=dus.c;h=a9ceedca5940bc3001b6b6e8467122234f5a1a9a;hp=326abeb22060da8085aa34c03199fc1d54e8e06d;hb=2a34d616bedb35238b4c3e402d14062e06d79910;hpb=b46e133443d19bc4ccfac4f30a114110aba0263c diff --git a/dus.c b/dus.c index 326abeb..a9ceedc 100644 --- a/dus.c +++ b/dus.c @@ -106,20 +106,22 @@ size_sum_t entry_size(const char *name) { return 0; } - dir = opendir(name); - - if(dir) { - while((dir_e = readdir(dir))) { - if(!ignore_entry(dir_e->d_name)) { - snprintf(subname, PATH_MAX, "%s/%s", name, dir_e->d_name); - result += entry_size(subname); + if(S_ISDIR(dummy.st_mode)) { + dir = opendir(name); + if(dir) { + while((dir_e = readdir(dir))) { + if(!ignore_entry(dir_e->d_name)) { + snprintf(subname, PATH_MAX, "%s/%s", name, dir_e->d_name); + result += entry_size(subname); + } } + closedir(dir); + } else { + fprintf(stderr, "Can not open directory %s: %s\n", name, strerror(errno)); + exit(EXIT_FAILURE); } - closedir(dir); - } else { - if(S_ISREG(dummy.st_mode)) { - result += dummy.st_size; - } + } else if(S_ISREG(dummy.st_mode)) { + result += dummy.st_size; } return result; @@ -147,6 +149,9 @@ size_sum_t atoss(const char *string) { fprintf(stderr, "Syntax error in %s\n", string); } } + + total += partial_total; + return total; } @@ -256,25 +261,25 @@ void fancy_print(char *buffer, size_t buffer_size, if(size < 1024) { snprintf(buffer, buffer_size, - "% 7d -- %s\n", + "% 8d -- %s\n", ((int) size), filename); } else if(size < 1024 * 1024) { snprintf(buffer, buffer_size, - "% 6.1fK -- %s\n", + "% 7.1fK -- %s\n", ((double) (size))/(1024.0), filename); } else if(size < 1024 * 1024 * 1024) { snprintf(buffer, buffer_size, - "% 6.1fM -- %s\n", + "% 7.1fM -- %s\n", ((double) (size))/(1024.0 * 1024), filename); } else { snprintf(buffer, buffer_size, - "% 6.1fG -- %s\n", + "% 7.1fG -- %s\n", ((double) (size))/(1024.0 * 1024.0 * 1024.0), filename); }