Changeset 1765 in MondoRescue for branches/2.2.5/mindi-busybox/coreutils/df.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/df.c

    r821 r1765  
    1919 */
    2020
    21 #include <stdio.h>
    22 #include <stdlib.h>
    23 #include <string.h>
    24 #include <unistd.h>
    2521#include <mntent.h>
    2622#include <sys/vfs.h>
    27 #include "busybox.h"
     23#include "libbb.h"
    2824
    29 #ifndef CONFIG_FEATURE_HUMAN_READABLE
    30 static long kscale(long b, long bs)
     25#if !ENABLE_FEATURE_HUMAN_READABLE
     26static unsigned long kscale(unsigned long b, unsigned long bs)
    3127{
    32     return ( b * (long long) bs + KILOBYTE/2 ) / KILOBYTE;
     28    return (b * (unsigned long long) bs + 1024/2) / 1024;
    3329}
    3430#endif
    3531
     32int df_main(int argc, char **argv);
    3633int df_main(int argc, char **argv)
    3734{
    38     long blocks_used;
    39     long blocks_percent_used;
    40 #ifdef CONFIG_FEATURE_HUMAN_READABLE
    41     unsigned long df_disp_hr = KILOBYTE;
     35    unsigned long blocks_used;
     36    unsigned blocks_percent_used;
     37#if ENABLE_FEATURE_HUMAN_READABLE
     38    unsigned df_disp_hr = 1024;
    4239#endif
    4340    int status = EXIT_SUCCESS;
    44     unsigned long opt;
     41    unsigned opt;
    4542    FILE *mount_table;
    4643    struct mntent *mount_entry;
    4744    struct statfs s;
    48     static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */
    49     const char *disp_units_hdr = hdr_1k;
     45    /* default display is kilobytes */
     46    const char *disp_units_hdr = "1k-blocks";
    5047
    51 #ifdef CONFIG_FEATURE_HUMAN_READABLE
    52     bb_opt_complementally = "h-km:k-hm:m-hk";
    53     opt = bb_getopt_ulflags(argc, argv, "hmk");
    54     if(opt & 1) {
    55                 df_disp_hr = 0;
    56                 disp_units_hdr = "     Size";
     48#if ENABLE_FEATURE_HUMAN_READABLE
     49    opt_complementary = "h-km:k-hm:m-hk";
     50    opt = getopt32(argv, "hmk");
     51    if (opt & 1) {
     52        df_disp_hr = 0;
     53        disp_units_hdr = "     Size";
    5754    }
    58     if(opt & 2) {
    59                 df_disp_hr = MEGABYTE;
    60                 disp_units_hdr = "1M-blocks";
     55    if (opt & 2) {
     56        df_disp_hr = 1024*1024;
     57        disp_units_hdr = "1M-blocks";
    6158    }
    6259#else
    63     opt = bb_getopt_ulflags(argc, argv, "k");
     60    opt = getopt32(argv, "k");
    6461#endif
    6562
    66     bb_printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n",
     63    printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n",
    6764              "", disp_units_hdr);
    6865
     
    7067    argv += optind;
    7168    if (optind >= argc) {
    72         if (!(mount_table = setmntent(bb_path_mtab_file, "r"))) {
     69        mount_table = setmntent(bb_path_mtab_file, "r");
     70        if (!mount_table) {
    7371            bb_perror_msg_and_die(bb_path_mtab_file);
    7472        }
    7573    }
    7674
    77     do {
     75    while (1) {
    7876        const char *device;
    7977        const char *mount_point;
    8078
    8179        if (mount_table) {
    82             if (!(mount_entry = getmntent(mount_table))) {
     80            mount_entry = getmntent(mount_table);
     81            if (!mount_entry) {
    8382                endmntent(mount_table);
    8483                break;
    8584            }
    8685        } else {
    87             if (!(mount_point = *argv++)) {
     86            mount_point = *argv++;
     87            if (!mount_point) {
    8888                break;
    8989            }
    90             if (!(mount_entry = find_mount_point(mount_point, bb_path_mtab_file))) {
    91                 bb_error_msg("%s: can't find mount point.", mount_point);
    92             SET_ERROR:
     90            mount_entry = find_mount_point(mount_point, bb_path_mtab_file);
     91            if (!mount_entry) {
     92                bb_error_msg("%s: can't find mount point", mount_point);
     93 SET_ERROR:
    9394                status = EXIT_FAILURE;
    9495                continue;
     
    108109            blocks_percent_used = 0;
    109110            if (blocks_used + s.f_bavail) {
    110                 blocks_percent_used = (((long long) blocks_used) * 100
    111                                        + (blocks_used + s.f_bavail)/2
    112                                        ) / (blocks_used + s.f_bavail);
     111                blocks_percent_used = (blocks_used * 100ULL
     112                        + (blocks_used + s.f_bavail)/2
     113                        ) / (blocks_used + s.f_bavail);
    113114            }
    114115
     
    118119                /* Adjusts device to be the real root device,
    119120                * or leaves device alone if it can't find it */
    120                 if ((device = find_block_device("/")) == NULL) {
     121                device = find_block_device("/");
     122                if (!device) {
    121123                    goto SET_ERROR;
    122124                }
    123125            }
    124126
    125 #ifdef CONFIG_FEATURE_HUMAN_READABLE
    126             bb_printf("%-20s %9s ", device,
    127                       make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr));
     127            if (printf("\n%-20s" + 1, device) > 20)
     128                    printf("\n%-20s", "");
     129#if ENABLE_FEATURE_HUMAN_READABLE
     130            printf(" %9s ",
     131                make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr));
    128132
    129             bb_printf("%9s ",
    130                       make_human_readable_str( (s.f_blocks - s.f_bfree),
    131                                               s.f_bsize, df_disp_hr));
     133            printf(" %9s " + 1,
     134                make_human_readable_str((s.f_blocks - s.f_bfree),
     135                        s.f_bsize, df_disp_hr));
    132136
    133             bb_printf("%9s %3ld%% %s\n",
    134                       make_human_readable_str(s.f_bavail, s.f_bsize, df_disp_hr),
    135                       blocks_percent_used, mount_point);
     137            printf("%9s %3u%% %s\n",
     138                    make_human_readable_str(s.f_bavail, s.f_bsize, df_disp_hr),
     139                    blocks_percent_used, mount_point);
    136140#else
    137             bb_printf("%-20s %9ld %9ld %9ld %3ld%% %s\n",
    138                       device,
    139                       kscale(s.f_blocks, s.f_bsize),
    140                       kscale(s.f_blocks-s.f_bfree, s.f_bsize),
    141                       kscale(s.f_bavail, s.f_bsize),
    142                       blocks_percent_used, mount_point);
     141            printf(" %9lu %9lu %9lu %3u%% %s\n",
     142                    kscale(s.f_blocks, s.f_bsize),
     143                    kscale(s.f_blocks-s.f_bfree, s.f_bsize),
     144                    kscale(s.f_bavail, s.f_bsize),
     145                    blocks_percent_used, mount_point);
    143146#endif
    144147        }
     148    }
    145149
    146     } while (1);
    147 
    148     bb_fflush_stdout_and_exit(status);
     150    fflush_stdout_and_exit(status);
    149151}
Note: See TracChangeset for help on using the changeset viewer.