Changes in uspace/app/df/df.c [651c8db:332513a] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/df/df.c

    r651c8db r332513a  
    5050#define HEADER_TABLE_HR "Filesystem           Size           Used      Available Used%% Mounted on"
    5151
    52 #define PERCENTAGE(x, tot) (tot ? (100ULL * (x) / (tot)) : 0)
     52#define PERCENTAGE(x, tot) ((unsigned long long) (100L * (x) / (tot)))
    5353#define FSBK_TO_BK(x, fsbk, bk) \
    5454        (((fsbk) != 0 && (fsbk) < (bk)) ? \
     
    5959static unsigned int human_readable;
    6060
    61 static void size_to_human_readable(char *buf, uint64_t bytes);
     61static int size_to_human_readable(char buf[], uint64_t bytes);
    6262static void print_header(void);
    6363static void print_statfs(struct statfs *, char *, char *);
     
    9090 
    9191                case ':':
    92                         fprintf(stderr, "Option -%c requires an operand\n",
    93                             optopt);
     92                        fprintf(stderr, "Option -%c requires an operand\n", optopt);
    9493                        errflg++;
    9594                        break;
     
    101100
    102101                default:
    103                         fprintf(stderr,
    104                             "Unknown error while parsing command line options");
     102                        fprintf(stderr, "Unknown error while parsing command line options.");
    105103                        errflg++;
    106104                        break;
     
    109107
    110108        if (optind > argc) {
    111                 fprintf(stderr, "Too many input parameters\n");
     109                fprintf(stderr, "Too many input parameter\n");
    112110                errflg++;
    113111        }
     
    120118        LIST_INITIALIZE(mtab_list);
    121119        get_mtab_list(&mtab_list);
    122 
    123120        print_header();
    124121        list_foreach(mtab_list, link, mtab_ent_t, mtab_ent) {
     
    126123                print_statfs(&st, mtab_ent->fs_name, mtab_ent->mp);
    127124        }
    128 
    129125        putchar('\n');
    130126        return 0;
    131127}
    132128
    133 static void size_to_human_readable(char *buf, uint64_t bytes)
     129static int size_to_human_readable(char buf[], uint64_t bytes)
    134130{
    135131        const char *units = "BkMGTPEZY";
    136132        int i = 0;
     133        int limit;
    137134
     135        limit = str_length(units);
    138136        while (bytes >= 1024) {
     137                if (i >= limit)
     138                        return -1;
    139139                bytes /= 1024;
    140140                i++;
    141141        }
     142        snprintf(buf, 6, "%4llu%c", (unsigned long long)bytes, units[i]);
    142143
    143         snprintf(buf, 6, "%4llu%c", (unsigned long long) bytes, units[i]);
     144        return 0;
    144145}
    145146
     
    150151        else
    151152                printf(HEADER_TABLE, unit_size);
    152 
    153153        putchar('\n');
    154154}
     
    156156static void print_statfs(struct statfs *st, char *name, char *mountpoint)
    157157{
    158         uint64_t const used_blocks = st->f_blocks - st->f_bfree;
    159         unsigned const perc_used = PERCENTAGE(used_blocks, st->f_blocks);
    160 
    161158        printf("%10s", name);
    162159
    163160        if (human_readable) {
    164161                char tmp[1024];
    165 
    166                 /* Print size */
    167162                size_to_human_readable(tmp, st->f_blocks *  st->f_bsize);
    168                 printf(" %14s", tmp);
    169 
    170                 /* Number of used blocks */
    171                 size_to_human_readable(tmp, used_blocks  *  st->f_bsize);
    172                 printf(" %14s", tmp);
    173 
    174                 /* Number of available blocks */
     163                printf(" %14s", tmp);                                                                  /* Size       */
     164                size_to_human_readable(tmp, (st->f_blocks - st->f_bfree)  *  st->f_bsize);
     165                printf(" %14s", tmp);                                                                  /* Used       */
    175166                size_to_human_readable(tmp, st->f_bfree *  st->f_bsize);
    176                 printf(" %14s", tmp);
    177 
    178                 /* Percentage of used blocks */
    179                 printf(" %4u%%", perc_used);
    180 
    181                 /* Mount point */
    182                 printf(" %s\n", mountpoint);
    183         } else {
    184                 /* Blocks / Used blocks / Available blocks / Used% / Mounted on */
    185                 printf(" %15llu %14llu %14llu %4u%% %s\n",
    186                     FSBK_TO_BK(st->f_blocks, st->f_bsize, unit_size),
    187                     FSBK_TO_BK(used_blocks, st->f_bsize, unit_size),
    188                     FSBK_TO_BK(st->f_bfree, st->f_bsize, unit_size),
    189                     perc_used,
    190                     mountpoint);
     167                printf(" %14s", tmp);                                                                  /* Available  */
     168                printf(" %4llu%% %s\n",
     169                        (st->f_blocks)?PERCENTAGE(st->f_blocks - st->f_bfree, st->f_blocks):0L,        /* Used%      */
     170                        mountpoint                                                                     /* Mounted on */
     171                );
    191172        }
     173        else
     174                printf(" %15llu %14llu %14llu %4llu%% %s\n",
     175                        FSBK_TO_BK(st->f_blocks, st->f_bsize, unit_size),                              /* Blocks     */
     176                        FSBK_TO_BK(st->f_blocks - st->f_bfree, st->f_bsize, unit_size),                /* Used       */
     177                        FSBK_TO_BK(st->f_bfree, st->f_bsize, unit_size),                               /* Available  */
     178                        (st->f_blocks)?PERCENTAGE(st->f_blocks - st->f_bfree, st->f_blocks):0L,        /* Used%      */
     179                        mountpoint                                                                     /* Mounted on */
     180                );
    192181
    193182}
Note: See TracChangeset for help on using the changeset viewer.