X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=du.c;h=3e4821a390010fa885d1a2937963f43eac2a025d;hb=f3e79ba6e3b3bfa380241205829d0a78570c9af3;hp=e6b99a28b74f40bcb95102a81f4d50065408173d;hpb=a7db19bb81ee37ffeafb1c2e940f7ac9991bc81e;p=oweals%2Fbusybox.git diff --git a/du.c b/du.c index e6b99a28b..3e4821a39 100644 --- a/du.c +++ b/du.c @@ -28,15 +28,13 @@ #include #include #include +#include #include #include "busybox.h" -#define BB_DECLARE_EXTERN -#define bb_need_name_too_long -#include "messages.c" #ifdef BB_FEATURE_HUMAN_READABLE -unsigned long du_disp_hr = KILOBYTE; +static unsigned long disp_hr = KILOBYTE; #endif typedef void (Display) (long, char *); @@ -48,8 +46,19 @@ static Display *print; static void print_normal(long size, char *filename) { + unsigned long base; #ifdef BB_FEATURE_HUMAN_READABLE - printf("%s\t%s\n", format(size, du_disp_hr), filename); + switch (disp_hr) { + case MEGABYTE: + base = KILOBYTE; + break; + case KILOBYTE: + base = 1; + break; + default: + base = 0; + } + printf("%s\t%s\n", make_human_readable_str(size, base), filename); #else printf("%ld\t%s\n", size, filename); #endif @@ -58,7 +67,6 @@ static void print_normal(long size, char *filename) static void print_summary(long size, char *filename) { if (du_depth == 1) { -printf("summary\n"); print_normal(size, filename); } } @@ -68,10 +76,10 @@ static long du(char *filename) { struct stat statbuf; long sum; - int len; if ((lstat(filename, &statbuf)) != 0) { - perror_msg_and_die("%s", filename); + perror_msg("%s", filename); + return 0; } du_depth++; @@ -86,6 +94,7 @@ static long du(char *filename) if (S_ISDIR(statbuf.st_mode)) { DIR *dir; struct dirent *entry; + char *newfile; dir = opendir(filename); if (!dir) { @@ -93,27 +102,20 @@ static long du(char *filename) return 0; } - len = strlen(filename); - if (filename[len - 1] == '/') - filename[--len] = '\0'; + newfile = last_char_is(filename, '/'); + if (newfile) + *newfile = '\0'; while ((entry = readdir(dir))) { - char newfile[BUFSIZ + 1]; char *name = entry->d_name; if ((strcmp(name, "..") == 0) || (strcmp(name, ".") == 0)) { continue; } - - if (len + strlen(name) + 1 > BUFSIZ) { - error_msg(name_too_long); - du_depth--; - return 0; - } - sprintf(newfile, "%s/%s", filename, name); - + newfile = concat_path_file(filename, name); sum += du(newfile); + free(newfile); } closedir(dir); print(sum, filename); @@ -156,8 +158,8 @@ int du_main(int argc, char **argv) count_hardlinks = 1; break; #ifdef BB_FEATURE_HUMAN_READABLE - case 'h': du_disp_hr = 0; break; - case 'm': du_disp_hr = MEGABYTE; break; + case 'h': disp_hr = 0; break; + case 'm': disp_hr = MEGABYTE; break; #endif case 'k': break; default: @@ -185,7 +187,7 @@ int du_main(int argc, char **argv) return status; } -/* $Id: du.c,v 1.40 2001/03/07 03:53:40 andersen Exp $ */ +/* $Id: du.c,v 1.47 2001/05/07 22:49:43 andersen Exp $ */ /* Local Variables: c-file-style: "linux"