X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=df.c;h=8d6242c56c88cb08259eb28d71f5337b6692ded3;hb=62f987e95f497a21bc1455153dd156aa12718574;hp=a0692afc5fb820de89b2ecad59e9908036963c8d;hpb=cc8ed39b240180b58810784f844e253263594ac3;p=oweals%2Fbusybox.git diff --git a/df.c b/df.c index a0692afc5..8d6242c56 100644 --- a/df.c +++ b/df.c @@ -1,103 +1,113 @@ -#include "internal.h" +/* vi: set sw=4 ts=4: */ +/* + * Mini df implementation for busybox + * + * Copyright (C) 1999,2000 by Lineo, inc. + * Written by Erik Andersen , + * based on original code by (I think) Bruce Perens . + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "busybox.h" #include #include -#include #include -const char df_usage[] = "df [filesystem ...]\n" -"\n" -"\tPrint the filesystem space used and space available.\n"; +extern const char mtab_file[]; /* Defined in utility.c */ - -static int -df(const char * device, const char * mountPoint) +static int df(char *device, const char *mountPoint) { - struct statfs s; - long blocks_used; - long blocks_percent_used; + struct statfs s; + long blocks_used; + long blocks_percent_used; - if ( statfs(mountPoint, &s) != 0 ) { - name_and_error(mountPoint); - return 1; + if (statfs(mountPoint, &s) != 0) { + perror(mountPoint); + return FALSE; } - - if ( s.f_blocks > 0 ) { + + if (s.f_blocks > 0) { blocks_used = s.f_blocks - s.f_bfree; blocks_percent_used = (long) - (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); - -/* - printf( - "%-20s %7ld %7ld %7ld %5ld%% %s\n" - ,device - ,s.f_blocks - ,s.f_blocks - s.f_bfree - ,s.f_bavail - ,blocks_percent_used - ,mountPoint); -*/ - - printf( - "%-20s %7.0f %7.0f %7.0f %5ld%% %s\n" - ,device - ,s.f_blocks * (s.f_bsize / 1024.0) - ,(s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0) - ,s.f_bavail * (s.f_bsize / 1024.0) - ,blocks_percent_used - ,mountPoint); + (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5); + if (strcmp(device, "/dev/root") == 0) { + /* Adjusts device to be the real root device, + * or leaves device alone if it can't find it */ + find_real_root_device_name( device); + } + printf("%-20s %9ld %9ld %9ld %3ld%% %s\n", + device, + (long) (s.f_blocks * (s.f_bsize / 1024.0)), + (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)), + (long) (s.f_bavail * (s.f_bsize / 1024.0)), + blocks_percent_used, mountPoint); } - return 0; + return TRUE; } -extern int -df_main(struct FileInfo * i, int argc, char * * argv) +extern int df_main(int argc, char **argv) { - static const char header[] = - "Filesystem 1024-blocks Used Available Capacity Mounted on\n"; - printf(header); + printf("%-20s %-14s %s %s %s %s\n", "Filesystem", + "1k-blocks", "Used", "Available", "Use%", "Mounted on"); - if ( argc > 1 ) { - struct mntent * mountEntry; - int status; + if (argc > 1) { + struct mntent *mountEntry; + int status; - while ( argc > 1 ) { - if ( (mountEntry = findMountPoint(argv[1], "/etc/mtab")) == 0 - && (mountEntry = findMountPoint(argv[1], "/proc/mounts")) == 0 ) - { - fprintf(stderr, "%s: can't find mount point.\n" - ,argv[1]); - return 1; + if (**(argv + 1) == '-') { + usage(df_usage); + } + while (argc > 1) { + if ((mountEntry = findMountPoint(argv[1], mtab_file)) == 0) { + errorMsg("%s: can't find mount point.\n", argv[1]); + exit(FALSE); } status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir); - if ( status != 0 ) - return status; + if (status != 0) + exit(status); argc--; argv++; } - return 0; - } - else { - FILE * mountTable; - struct mntent * mountEntry; + exit(TRUE); + } else { + FILE *mountTable; + struct mntent *mountEntry; - if ( (mountTable = setmntent("/etc/mtab", "r")) == 0 - && (mountTable = setmntent("/proc/mounts", "r")) == 0 - ) { - name_and_error("/etc/mtab"); - return 1; + mountTable = setmntent(mtab_file, "r"); + if (mountTable == 0) { + perror(mtab_file); + exit(FALSE); } - while ( (mountEntry = getmntent(mountTable)) != 0 ) { - int status = df( - mountEntry->mnt_fsname - ,mountEntry->mnt_dir); - if ( status != 0 ) - return status; + while ((mountEntry = getmntent(mountTable))) { + df(mountEntry->mnt_fsname, mountEntry->mnt_dir); } endmntent(mountTable); } - - return 0; + + return(TRUE); } + +/* +Local Variables: +c-file-style: "linux" +c-basic-offset: 4 +tab-width: 4 +End: +*/