du: remove statics (by Bernhard Fischer
No binary (build failed)
—
(log yok)
| @@ -25,37 +25,34 @@ | |
| #include "libbb.h" | |
| + | struct globals { |
| #if ENABLE_FEATURE_HUMAN_READABLE | |
| - | # if ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K |
| - | static unsigned long disp_hr = 1024; |
| - | # else |
| - | static unsigned long disp_hr = 512; |
| - | # endif |
| - | #elif ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K |
| - | static unsigned disp_k = 1; |
| + | unsigned long disp_hr; |
| #else | |
| - | static unsigned disp_k; /* bss inits to 0 */ |
| + | unsigned disp_k; |
| #endif | |
| - | static int max_print_depth = INT_MAX; |
| - | static nlink_t count_hardlinks = 1; |
| + | int max_print_depth; |
| + | nlink_t count_hardlinks; |
| - | static int status; |
| - | static int print_files; |
| - | static int slink_depth; |
| - | static int du_depth; |
| - | static int one_file_system; |
| - | static dev_t dir_dev; |
| + | bool status; |
| + | bool one_file_system; |
| + | int print_files; |
| + | int slink_depth; |
| + | int du_depth; |
| + | dev_t dir_dev; |
| + | }; |
| + | #define G (*(struct globals*)&bb_common_bufsiz1) |
| - | static void print(long size, const char *const filename) |
| + | static void print(unsigned long size, const char *filename) |
| { | |
| /* TODO - May not want to defer error checking here. */ | |
| #if ENABLE_FEATURE_HUMAN_READABLE | |
| - | printf("%s\t%s\n", make_human_readable_str(size, 512, disp_hr), |
| + | printf("%s\t%s\n", make_human_readable_str(size, 512, G.disp_hr), |
| filename); | |
| #else | |
| - | if (disp_k) { |
| + | if (G.disp_k) { |
| size++; | |
| size >>= 1; | |
| } | |
| @@ -64,21 +61,21 @@ static void print(long size, const char *const filename) | |
| } | |
| /* tiny recursive du */ | |
| - | static long du(const char *const filename) |
| + | static unsigned long du(const char *filename) |
| { | |
| struct stat statbuf; | |
| - | long sum; |
| + | unsigned long sum; |
| if (lstat(filename, &statbuf) != 0) { | |
| bb_perror_msg("%s", filename); | |
| - | status = EXIT_FAILURE; |
| + | G.status = EXIT_FAILURE; |
| return 0; | |
| } | |
| - | if (one_file_system) { |
| - | if (du_depth == 0) { |
| - | dir_dev = statbuf.st_dev; |
| - | } else if (dir_dev != statbuf.st_dev) { |
| + | if (G.one_file_system) { |
| + | if (G.du_depth == 0) { |
| + | G.dir_dev = statbuf.st_dev; |
| + | } else if (G.dir_dev != statbuf.st_dev) { |
| return 0; | |
| } | |
| } | |
| @@ -86,20 +83,20 @@ static long du(const char *const filename) | |
| sum = statbuf.st_blocks; | |
| if (S_ISLNK(statbuf.st_mode)) { | |
| - | if (slink_depth > du_depth) { /* -H or -L */ |
| + | if (G.slink_depth > G.du_depth) { /* -H or -L */ |
| if (stat(filename, &statbuf) != 0) { | |
| bb_perror_msg("%s", filename); | |
| - | status = EXIT_FAILURE; |
| + | G.status = EXIT_FAILURE; |
| return 0; | |
| } | |
| sum = statbuf.st_blocks; | |
| - | if (slink_depth == 1) { |
| - | slink_depth = INT_MAX; /* Convert -H to -L. */ |
| + | if (G.slink_depth == 1) { |
| + | G.slink_depth = INT_MAX; /* Convert -H to -L. */ |
| } | |
| } | |
| } | |
| - | if (statbuf.st_nlink > count_hardlinks) { |
| + | if (statbuf.st_nlink > G.count_hardlinks) { |
| /* Add files/directories with links only once */ | |
| if (is_in_ino_dev_hashtable(&statbuf)) { | |
| return 0; | |
| @@ -114,7 +111,7 @@ static long du(const char *const filename) | |
| dir = warn_opendir(filename); | |
| if (!dir) { | |
| - | status = EXIT_FAILURE; |
| + | G.status = EXIT_FAILURE; |
| return sum; | |
| } | |
| @@ -128,16 +125,16 @@ static long du(const char *const filename) | |
| newfile = concat_subpath_file(filename, name); | |
| if (newfile == NULL) | |
| continue; | |
| - | ++du_depth; |
| + | ++G.du_depth; |
| sum += du(newfile); | |
| - | --du_depth; |
| + | --G.du_depth; |
| free(newfile); | |
| } | |
| closedir(dir); | |
| - | } else if (du_depth > print_files) { |
| + | } else if (G.du_depth > G.print_files) { |
| return sum; | |
| } | |
| - | if (du_depth <= max_print_depth) { |
| + | if (G.du_depth <= G.max_print_depth) { |
| print(sum, filename); | |
| } | |
| return sum; | |
| @@ -146,21 +143,23 @@ static long du(const char *const filename) | |
| int du_main(int argc, char **argv); | |
| int du_main(int argc, char **argv) | |
| { | |
| - | long total; |
| + | unsigned long total; |
| int slink_depth_save; | |
| - | int print_final_total; |
| + | bool print_final_total; |
| char *smax_print_depth; | |
| unsigned opt; | |
| - | #if ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K |
| - | if (getenv("POSIXLY_CORRECT")) { /* TODO - a new libbb function? */ |
| #if ENABLE_FEATURE_HUMAN_READABLE | |
| - | disp_hr = 512; |
| + | USE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(G.disp_hr = 1024;) |
| + | SKIP_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(G.disp_hr = 512;) |
| + | if (getenv("POSIXLY_CORRECT")) /* TODO - a new libbb function? */ |
| + | G.disp_hr = 512; |
| #else | |
| - | disp_k = 0; |
| - | #endif |
| - | } |
| + | USE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(G.disp_k = 1;) |
| + | /* SKIP_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(G.disp_k = 0;) - G is pre-zeroed */ |
| #endif | |
| + | G.max_print_depth = INT_MAX; |
| + | G.count_hardlinks = 1; |
| /* Note: SUSv3 specifies that -a and -s options cannot be used together | |
| * in strictly conforming applications. However, it also says that some | |
| @@ -171,75 +170,76 @@ int du_main(int argc, char **argv) | |
| #if ENABLE_FEATURE_HUMAN_READABLE | |
| opt_complementary = "h-km:k-hm:m-hk:H-L:L-H:s-d:d-s"; | |
| opt = getopt32(argv, "aHkLsx" "d:" "lc" "hm", &smax_print_depth); | |
| + | argv += optind; |
| if (opt & (1 << 9)) { | |
| /* -h opt */ | |
| - | disp_hr = 0; |
| + | G.disp_hr = 0; |
| } | |
| if (opt & (1 << 10)) { | |
| /* -m opt */ | |
| - | disp_hr = 1024*1024; |
| + | G.disp_hr = 1024*1024; |
| } | |
| if (opt & (1 << 2)) { | |
| /* -k opt */ | |
| - | disp_hr = 1024; |
| + | G.disp_hr = 1024; |
| } | |
| #else | |
| opt_complementary = "H-L:L-H:s-d:d-s"; | |
| opt = getopt32(argv, "aHkLsx" "d:" "lc", &smax_print_depth); | |
| + | argv += optind; |
| #if !ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K | |
| if (opt & (1 << 2)) { | |
| /* -k opt */ | |
| - | disp_k = 1; |
| + | G.disp_k = 1; |
| } | |
| #endif | |
| #endif | |
| if (opt & (1 << 0)) { | |
| /* -a opt */ | |
| - | print_files = INT_MAX; |
| + | G.print_files = INT_MAX; |
| } | |
| if (opt & (1 << 1)) { | |
| /* -H opt */ | |
| - | slink_depth = 1; |
| + | G.slink_depth = 1; |
| } | |
| if (opt & (1 << 3)) { | |
| /* -L opt */ | |
| - | slink_depth = INT_MAX; |
| + | G.slink_depth = INT_MAX; |
| } | |
| if (opt & (1 << 4)) { | |
| /* -s opt */ | |
| - | max_print_depth = 0; |
| + | G.max_print_depth = 0; |
| } | |
| - | one_file_system = opt & (1 << 5); /* -x opt */ |
| + | G.one_file_system = opt & (1 << 5); /* -x opt */ |
| if (opt & (1 << 6)) { | |
| /* -d opt */ | |
| - | max_print_depth = xatoi_u(smax_print_depth); |
| + | G.max_print_depth = xatoi_u(smax_print_depth); |
| } | |
| if (opt & (1 << 7)) { | |
| /* -l opt */ | |
| - | count_hardlinks = MAXINT(nlink_t); |
| + | G.count_hardlinks = MAXINT(nlink_t); |
| } | |
| print_final_total = opt & (1 << 8); /* -c opt */ | |
| /* go through remaining args (if any) */ | |
| - | argv += optind; |
| - | if (optind >= argc) { |
| + | if (!*argv) { |
| *--argv = (char*)"."; | |
| - | if (slink_depth == 1) { |
| - | slink_depth = 0; |
| + | if (G.slink_depth == 1) { |
| + | G.slink_depth = 0; |
| } | |
| } | |
| - | slink_depth_save = slink_depth; |
| + | slink_depth_save = G.slink_depth; |
| total = 0; | |
| do { | |
| total += du(*argv); | |
| - | slink_depth = slink_depth_save; |
| + | G.slink_depth = slink_depth_save; |
| } while (*++argv); | |
| + | |
| if (ENABLE_FEATURE_CLEAN_UP) | |
| reset_ino_dev_hashtable(); | |
| - | if (print_final_total) { |
| + | if (print_final_total) |
| print(total, "total"); | |
| - | } |
| - | fflush_stdout_and_exit(status); |
| + | fflush_stdout_and_exit(G.status); |
| } | |