Changeset 1765 in MondoRescue for branches/2.2.5/mindi-busybox/coreutils/du.c


Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/coreutils/du.c

    r821 r1765  
    2424 */
    2525
    26 #include <stdlib.h>
    27 #include <limits.h>
    28 #include <unistd.h>
    29 #include <dirent.h>
    30 #include <sys/stat.h>
    31 #include "busybox.h"
    32 
    33 #ifdef CONFIG_FEATURE_HUMAN_READABLE
    34 # ifdef CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
    35 static unsigned long disp_hr = KILOBYTE;
     26#include "libbb.h"
     27
     28#if ENABLE_FEATURE_HUMAN_READABLE
     29# if ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
     30static unsigned long disp_hr = 1024;
    3631# else
    3732static unsigned long disp_hr = 512;
    3833# endif
    39 #elif defined CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
    40 static unsigned int disp_k = 1;
    41 #else
    42 static unsigned int disp_k; /* bss inits to 0 */
     34#elif ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
     35static unsigned disp_k = 1;
     36#else
     37static unsigned disp_k; /* bss inits to 0 */
    4338#endif
    4439
     
    4641static nlink_t count_hardlinks = 1;
    4742
    48 static int status
    49 #if EXIT_SUCCESS == 0
    50     = EXIT_SUCCESS
    51 #endif
    52     ;
     43static int status;
    5344static int print_files;
    5445static int slink_depth;
     
    5849
    5950
    60 static void print(long size, char *filename)
     51static void print(long size, const char *const filename)
    6152{
    6253    /* TODO - May not want to defer error checking here. */
    63 #ifdef CONFIG_FEATURE_HUMAN_READABLE
    64     bb_printf("%s\t%s\n", make_human_readable_str(size, 512, disp_hr),
    65            filename);
     54#if ENABLE_FEATURE_HUMAN_READABLE
     55    printf("%s\t%s\n", make_human_readable_str(size, 512, disp_hr),
     56            filename);
    6657#else
    6758    if (disp_k) {
     
    6960        size >>= 1;
    7061    }
    71     bb_printf("%ld\t%s\n", size, filename);
     62    printf("%ld\t%s\n", size, filename);
    7263#endif
    7364}
    7465
    7566/* tiny recursive du */
    76 static long du(char *filename)
     67static long du(const char *const filename)
    7768{
    7869    struct stat statbuf;
    7970    long sum;
    8071
    81     if ((lstat(filename, &statbuf)) != 0) {
     72    if (lstat(filename, &statbuf) != 0) {
    8273        bb_perror_msg("%s", filename);
    8374        status = EXIT_FAILURE;
     
    9788    if (S_ISLNK(statbuf.st_mode)) {
    9889        if (slink_depth > du_depth) {   /* -H or -L */
    99             if ((stat(filename, &statbuf)) != 0) {
     90            if (stat(filename, &statbuf) != 0) {
    10091                bb_perror_msg("%s", filename);
    10192                status = EXIT_FAILURE;
     
    111102    if (statbuf.st_nlink > count_hardlinks) {
    112103        /* Add files/directories with links only once */
    113         if (is_in_ino_dev_hashtable(&statbuf, NULL)) {
     104        if (is_in_ino_dev_hashtable(&statbuf)) {
    114105            return 0;
    115106        }
     
    122113        char *newfile;
    123114
    124         dir = bb_opendir(filename);
     115        dir = warn_opendir(filename);
    125116        if (!dir) {
    126117            status = EXIT_FAILURE;
     
    136127
    137128            newfile = concat_subpath_file(filename, name);
    138             if(newfile == NULL)
     129            if (newfile == NULL)
    139130                continue;
    140131            ++du_depth;
     
    153144}
    154145
     146int du_main(int argc, char **argv);
    155147int du_main(int argc, char **argv)
    156148{
     
    159151    int print_final_total;
    160152    char *smax_print_depth;
    161     unsigned long opt;
    162 
    163 #ifdef CONFIG_FEATURE_DU_DEFUALT_BLOCKSIZE_1K
     153    unsigned opt;
     154
     155#if ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
    164156    if (getenv("POSIXLY_CORRECT")) {    /* TODO - a new libbb function? */
    165 #ifdef CONFIG_FEATURE_HUMAN_READABLE
     157#if ENABLE_FEATURE_HUMAN_READABLE
    166158        disp_hr = 512;
    167159#else
     
    171163#endif
    172164
    173     /* Note: SUSv3 specifies that -a and -s options can not be used together
     165    /* Note: SUSv3 specifies that -a and -s options cannot be used together
    174166     * in strictly conforming applications.  However, it also says that some
    175167     * du implementations may produce output when -a and -s are used together.
     
    177169     * ignore -a.  This is consistent with -s being equivalent to -d 0.
    178170     */
    179 #ifdef CONFIG_FEATURE_HUMAN_READABLE
    180     bb_opt_complementally = "h-km:k-hm:m-hk:H-L:L-H:s-d:d-s";
    181     opt = bb_getopt_ulflags(argc, argv, "aHkLsx" "d:" "lc" "hm", &smax_print_depth);
    182     if((opt & (1 << 9))) {
     171#if ENABLE_FEATURE_HUMAN_READABLE
     172    opt_complementary = "h-km:k-hm:m-hk:H-L:L-H:s-d:d-s";
     173    opt = getopt32(argv, "aHkLsx" "d:" "lc" "hm", &smax_print_depth);
     174    if (opt & (1 << 9)) {
    183175        /* -h opt */
    184176        disp_hr = 0;
    185177    }
    186     if((opt & (1 << 10))) {
     178    if (opt & (1 << 10)) {
    187179        /* -m opt */
    188         disp_hr = MEGABYTE;
    189     }
    190     if((opt & (1 << 2))) {
     180        disp_hr = 1024*1024;
     181    }
     182    if (opt & (1 << 2)) {
    191183        /* -k opt */
    192             disp_hr = KILOBYTE;
    193     }
    194 #else
    195     bb_opt_complementally = "H-L:L-H:s-d:d-s";
    196     opt = bb_getopt_ulflags(argc, argv, "aHkLsx" "d:" "lc", &smax_print_depth);
    197 #if !defined CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
    198     if((opt & (1 << 2))) {
     184        disp_hr = 1024;
     185    }
     186#else
     187    opt_complementary = "H-L:L-H:s-d:d-s";
     188    opt = getopt32(argv, "aHkLsx" "d:" "lc", &smax_print_depth);
     189#if !ENABLE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K
     190    if (opt & (1 << 2)) {
    199191        /* -k opt */
    200             disp_k = 1;
    201     }
    202 #endif
    203 #endif
    204     if((opt & (1 << 0))) {
     192        disp_k = 1;
     193    }
     194#endif
     195#endif
     196    if (opt & (1 << 0)) {
    205197        /* -a opt */
    206198        print_files = INT_MAX;
    207199    }
    208     if((opt & (1 << 1))) {
     200    if (opt & (1 << 1)) {
    209201        /* -H opt */
    210202        slink_depth = 1;
    211203    }
    212     if((opt & (1 << 3))) {
     204    if (opt & (1 << 3)) {
    213205        /* -L opt */
    214             slink_depth = INT_MAX;
    215     }
    216     if((opt & (1 << 4))) {
     206        slink_depth = INT_MAX;
     207    }
     208    if (opt & (1 << 4)) {
    217209        /* -s opt */
    218             max_print_depth = 0;
    219         }
     210        max_print_depth = 0;
     211    }
    220212    one_file_system = opt & (1 << 5); /* -x opt */
    221     if((opt & (1 << 6))) {
     213    if (opt & (1 << 6)) {
    222214        /* -d opt */
    223         max_print_depth = bb_xgetularg10_bnd(smax_print_depth, 0, INT_MAX);
    224     }
    225     if((opt & (1 << 7))) {
     215        max_print_depth = xatoi_u(smax_print_depth);
     216    }
     217    if (opt & (1 << 7)) {
    226218        /* -l opt */
    227         count_hardlinks = INT_MAX;
     219        count_hardlinks = MAXINT(nlink_t);
    228220    }
    229221    print_final_total = opt & (1 << 8); /* -c opt */
     
    232224    argv += optind;
    233225    if (optind >= argc) {
    234         *--argv = ".";
     226        *--argv = (char*)".";
    235227        if (slink_depth == 1) {
    236228            slink_depth = 0;
     
    244236        slink_depth = slink_depth_save;
    245237    } while (*++argv);
    246 #ifdef CONFIG_FEATURE_CLEAN_UP
    247     reset_ino_dev_hashtable();
    248 #endif
    249 
     238    if (ENABLE_FEATURE_CLEAN_UP)
     239        reset_ino_dev_hashtable();
    250240    if (print_final_total) {
    251241        print(total, "total");
    252242    }
    253243
    254     bb_fflush_stdout_and_exit(status);
     244    fflush_stdout_and_exit(status);
    255245}
Note: See TracChangeset for help on using the changeset viewer.