[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
coreutils fsusage+df int cleanup
From: |
Paul Eggert |
Subject: |
coreutils fsusage+df int cleanup |
Date: |
Mon, 02 Aug 2004 11:46:55 -0700 |
User-agent: |
Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) |
I installed this. The bugs fixed here are mostly-theoretical, e.g.,
disk names or block sizes longer than INT_MAX.
2004-08-02 Paul Eggert <address@hidden>
* lib/fsusage.h: Include <stdbool.h>.
(struct fs_usage): Use uintmax_t for block sizes, so that they're
not limited to INT_MAX.
Use bool for booleans.
* lib/fsusage.c: Use Autoconf-suggested pattern for inttypes and stdint.
Include unistd.h, for lseek.
* src/df.c (inode_format, show_all_fs, show_local_fs,
show_listed_fs, posix_format, require_sync, print_type,
selected_fstype, excluded_fstype, show_dev, show_point, main):
Use bool for booleans.
(df_readable, show_dev): Use UINTMAX_MAX instead of -1.
(show_dev, show_point, main):
Use EXIT_SUCCESS/EXIT_FAILURE instead of 0/1.
Don't assume disk name lengths are <= INT_MAX.
Rewrite pct calculation to avoid cast.
(show_point): Don't assume resolved length is <= SSIZE_MAX.
Index: lib/fsusage.h
===================================================================
RCS file: /home/eggert/coreutils/cu/lib/fsusage.h,v
retrieving revision 1.11
diff -p -u -r1.11 fsusage.h
--- lib/fsusage.h 30 Jun 2004 22:39:27 -0000 1.11
+++ lib/fsusage.h 17 Jul 2004 03:40:22 -0000
@@ -22,13 +22,15 @@
#if !defined FSUSAGE_H_
# define FSUSAGE_H_
+# include <stdbool.h>
+
struct fs_usage
{
- int fsu_blocksize; /* Size of a block. */
+ uintmax_t fsu_blocksize; /* Size of a block. */
uintmax_t fsu_blocks; /* Total blocks. */
uintmax_t fsu_bfree; /* Free blocks available to superuser. */
uintmax_t fsu_bavail; /* Free blocks available to
non-superuser. */
- int fsu_bavail_top_bit_set; /* 1 if fsu_bavail represents a value < 0. */
+ bool fsu_bavail_top_bit_set; /* 1 if fsu_bavail represents a value < 0. */
uintmax_t fsu_files; /* Total file nodes. */
uintmax_t fsu_ffree; /* Free file nodes. */
};
Index: lib/fsusage.c
===================================================================
RCS file: /home/eggert/coreutils/cu/lib/fsusage.c,v
retrieving revision 1.47
diff -p -u -r1.47 fsusage.c
--- lib/fsusage.c 30 Jun 2004 22:39:20 -0000 1.47
+++ lib/fsusage.c 28 Jul 2004 00:39:21 -0000
@@ -23,10 +23,12 @@
#if HAVE_INTTYPES_H
# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
+#endif
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
#endif
#ifndef UINTMAX_MAX
# define UINTMAX_MAX ((uintmax_t) -1)
Index: src/df.c
===================================================================
RCS file: /home/eggert/coreutils/cu/src/df.c,v
retrieving revision 1.160
diff -p -u -r1.160 df.c
--- src/df.c 30 Jun 2004 22:31:43 -0000 1.160
+++ src/df.c 20 Jul 2004 04:38:20 -0000
@@ -47,19 +47,19 @@
/* Name this program was run with. */
char *program_name;
-/* If nonzero, show inode information. */
-static int inode_format;
+/* If true, show inode information. */
+static bool inode_format;
-/* If nonzero, show even file systems with zero size or
+/* If true, show even file systems with zero size or
uninteresting types. */
-static int show_all_fs;
+static bool show_all_fs;
-/* If nonzero, show only local file systems. */
-static int show_local_fs;
+/* If true, show only local file systems. */
+static bool show_local_fs;
-/* If nonzero, output data for each file system corresponding to a
+/* If true, output data for each file system corresponding to a
command line argument -- even if it's a dummy (automounter) entry. */
-static int show_listed_fs;
+static bool show_listed_fs;
/* Human-readable options for output. */
static int human_output_opts;
@@ -67,16 +67,16 @@ static int human_output_opts;
/* The units to use when printing sizes. */
static uintmax_t output_block_size;
-/* If nonzero, use the POSIX output format. */
-static int posix_format;
+/* If true, use the POSIX output format. */
+static bool posix_format;
-/* If nonzero, invoke the `sync' system call before getting any usage data.
+/* If true, invoke the `sync' system call before getting any usage data.
Using this option can make df very slow, especially with many or very
busy disks. Note that this may make a difference on some systems --
- SunOs4.1.3, for one. It is *not* necessary on Linux. */
-static int require_sync = 0;
+ SunOS 4.1.3, for one. It is *not* necessary on Linux. */
+static bool require_sync;
-/* Nonzero if errors have occurred. */
+/* Desired exit status. */
static int exit_status;
/* A file system type to display. */
@@ -108,8 +108,8 @@ static struct fs_type_list *fs_exclude_l
/* Linked list of mounted file systems. */
static struct mount_entry *mount_list;
-/* If nonzero, print file system type as well. */
-static int print_type;
+/* If true, print file system type as well. */
+static bool print_type;
/* For long options that have no equivalent short option, use a
non-character as a pseudo short option, starting with CHAR_MAX + 1. */
@@ -198,36 +198,34 @@ print_header (void)
printf (_(" Mounted on\n"));
}
-/* If FSTYPE is a type of file system that should be listed,
- return nonzero, else zero. */
+/* Is FSTYPE a type of file system that should be listed? */
-static int
+static bool
selected_fstype (const char *fstype)
{
const struct fs_type_list *fsp;
if (fs_select_list == NULL || fstype == NULL)
- return 1;
+ return true;
for (fsp = fs_select_list; fsp; fsp = fsp->fs_next)
if (STREQ (fstype, fsp->fs_name))
- return 1;
- return 0;
+ return true;
+ return false;
}
-/* If FSTYPE is a type of file system that should be omitted,
- return nonzero, else zero. */
+/* Is FSTYPE a type of file system that should be omitted? */
-static int
+static bool
excluded_fstype (const char *fstype)
{
const struct fs_type_list *fsp;
if (fs_exclude_list == NULL || fstype == NULL)
- return 0;
+ return false;
for (fsp = fs_exclude_list; fsp; fsp = fsp->fs_next)
if (STREQ (fstype, fsp->fs_name))
- return 1;
- return 0;
+ return true;
+ return false;
}
/* Like human_readable (N, BUF, human_output_opts, INPUT_UNITS, OUTPUT_UNITS),
@@ -238,10 +236,10 @@ excluded_fstype (const char *fstype)
expressed in two's complement. */
static char const *
-df_readable (int negative, uintmax_t n, char *buf,
+df_readable (bool negative, uintmax_t n, char *buf,
uintmax_t input_units, uintmax_t output_units)
{
- if (n == -1)
+ if (n == UINTMAX_MAX)
return "-";
else
{
@@ -263,7 +261,7 @@ df_readable (int negative, uintmax_t n,
static void
show_dev (const char *disk, const char *mount_point, const char *fstype,
- int me_dummy, int me_remote)
+ bool me_dummy, bool me_remote)
{
struct fs_usage fsu;
const char *stat_file;
@@ -274,16 +272,16 @@ show_dev (const char *disk, const char *
uintmax_t output_units;
uintmax_t total;
uintmax_t available;
- int negate_available;
+ bool negate_available;
uintmax_t available_to_root;
uintmax_t used;
- int negate_used;
+ bool negate_used;
double pct = -1;
- if (me_remote && show_local_fs)
+ if (me_remote & show_local_fs)
return;
- if (me_dummy && show_all_fs == 0 && !show_listed_fs)
+ if (me_dummy & !show_all_fs & !show_listed_fs)
return;
if (!selected_fstype (fstype) || excluded_fstype (fstype))
@@ -298,7 +296,7 @@ show_dev (const char *disk, const char *
if (get_fs_usage (stat_file, disk, &fsu))
{
error (0, errno, "%s", quote (stat_file));
- exit_status = 1;
+ exit_status = EXIT_FAILURE;
return;
}
@@ -314,10 +312,10 @@ show_dev (const char *disk, const char *
but that does not suffice for type iso9660 */
if (print_type)
{
- int disk_name_len = (int) strlen (disk);
- int fstype_len = (int) strlen (fstype);
- if (disk_name_len + fstype_len + 2 < 20)
- printf ("%s%*s ", disk, 18 - disk_name_len, fstype);
+ size_t disk_name_len = strlen (disk);
+ size_t fstype_len = strlen (fstype);
+ if (disk_name_len + fstype_len < 18)
+ printf ("%s%*s ", disk, 18 - (int) disk_name_len, fstype);
else if (!posix_format)
printf ("%s\n%18s ", disk, fstype);
else
@@ -325,7 +323,7 @@ show_dev (const char *disk, const char *
}
else
{
- if ((int) strlen (disk) > 20 && !posix_format)
+ if (strlen (disk) > 20 && !posix_format)
printf ("%s\n%20s", disk, "");
else
printf ("%-20s", disk);
@@ -338,7 +336,7 @@ show_dev (const char *disk, const char *
input_units = output_units = 1;
total = fsu.fsu_files;
available = fsu.fsu_ffree;
- negate_available = 0;
+ negate_available = false;
available_to_root = available;
}
else
@@ -358,26 +356,26 @@ show_dev (const char *disk, const char *
}
used = -1;
- negate_used = 0;
- if (total != -1 && available_to_root != -1)
+ negate_used = false;
+ if (total != UINTMAX_MAX && available_to_root != UINTMAX_MAX)
{
used = total - available_to_root;
if (total < available_to_root)
{
- negate_used = 1;
+ negate_used = true;
used = - used;
}
}
printf (" %*s %*s %*s ",
- width, df_readable (0, total,
+ width, df_readable (false, total,
buf[0], input_units, output_units),
width, df_readable (negate_used, used,
buf[1], input_units, output_units),
width, df_readable (negate_available, available,
buf[2], input_units, output_units));
- if (used == -1 || available == -1)
+ if (used == UINTMAX_MAX || available == UINTMAX_MAX)
;
else if (!negate_used
&& used <= TYPE_MAXIMUM (uintmax_t) / 100
@@ -400,9 +398,8 @@ show_dev (const char *disk, const char *
double nonroot_total = u + a;
if (nonroot_total)
{
- double ipct;
- pct = u * 100 / nonroot_total;
- ipct = (long) pct;
+ long int lipct = pct = u * 100 / nonroot_total;
+ double ipct = lipct;
/* Like `pct = ceil (dpct);', but avoid ceil so that
the math library needn't be linked. */
@@ -443,7 +440,7 @@ find_mount_point (const char *file, cons
struct stat last_stat;
char *mp = 0; /* The malloced mount point path. */
- if (save_cwd (&cwd))
+ if (save_cwd (&cwd) != 0)
{
error (0, errno, _("cannot get current directory"));
return NULL;
@@ -510,7 +507,7 @@ done:
/* Restore the original cwd. */
{
int save_errno = errno;
- if (restore_cwd (&cwd))
+ if (restore_cwd (&cwd) != 0)
error (EXIT_FAILURE, errno,
_("failed to return to initial working directory"));
free_cwd (&cwd);
@@ -572,10 +569,10 @@ show_point (const char *point, const str
if (! best_match)
{
char *resolved = canonicalize_file_name (point);
- ssize_t resolved_len = resolved ? strlen (resolved) : -1;
- if (1 <= resolved_len && resolved[0] == '/')
+ if (resolved && resolved[0] == '/')
{
+ size_t resolved_len = strlen (resolved);
size_t best_match_len = 0;
for (me = mount_list; me; me = me->me_next)
@@ -613,7 +610,7 @@ show_point (const char *point, const str
else
{
error (0, errno, "%s", quote (me->me_mountdir));
- exit_status = 1;
+ exit_status = EXIT_FAILURE;
/* So we won't try and fail repeatedly. */
me->me_dev = (dev_t) -2;
}
@@ -645,7 +642,7 @@ show_point (const char *point, const str
char *mp = find_mount_point (point, statp);
if (mp)
{
- show_dev (0, mp, 0, 0, 0);
+ show_dev (0, mp, 0, false, false);
free (mp);
}
}
@@ -768,16 +765,16 @@ main (int argc, char **argv)
fs_select_list = NULL;
fs_exclude_list = NULL;
- inode_format = 0;
- show_all_fs = 0;
- show_listed_fs = 0;
+ inode_format = false;
+ show_all_fs = false;
+ show_listed_fs = false;
human_output_opts = human_options (getenv ("DF_BLOCK_SIZE"), false,
&output_block_size);
- print_type = 0;
- posix_format = 0;
- exit_status = 0;
+ print_type = false;
+ posix_format = false;
+ exit_status = EXIT_SUCCESS;
while ((c = getopt_long (argc, argv, "aB:iF:hHklmPTt:vx:", long_options,
NULL))
!= -1)
@@ -787,13 +784,13 @@ main (int argc, char **argv)
case 0: /* Long option. */
break;
case 'a':
- show_all_fs = 1;
+ show_all_fs = true;
break;
case 'B':
human_output_opts = human_options (optarg, true, &output_block_size);
break;
case 'i':
- inode_format = 1;
+ inode_format = true;
break;
case 'h':
human_output_opts = human_autoscale | human_SI | human_base_1024;
@@ -808,23 +805,23 @@ main (int argc, char **argv)
output_block_size = 1024;
break;
case 'l':
- show_local_fs = 1;
+ show_local_fs = true;
break;
case 'm': /* obsolescent */
human_output_opts = 0;
output_block_size = 1024 * 1024;
break;
case 'T':
- print_type = 1;
+ print_type = true;
break;
case 'P':
- posix_format = 1;
+ posix_format = true;
break;
case SYNC_OPTION:
- require_sync = 1;
+ require_sync = true;
break;
case NO_SYNC_OPTION:
- require_sync = 0;
+ require_sync = false;
break;
case 'F':
@@ -850,7 +847,7 @@ main (int argc, char **argv)
/* Fail if the same file system type was both selected and excluded. */
{
- int match = 0;
+ bool match = false;
struct fs_type_list *fs_incl;
for (fs_incl = fs_select_list; fs_incl; fs_incl = fs_incl->fs_next)
{
@@ -862,7 +859,7 @@ main (int argc, char **argv)
error (0, 0,
_("file system type %s both selected and excluded"),
quote (fs_incl->fs_name));
- match = 1;
+ match = true;
break;
}
}
@@ -883,7 +880,7 @@ main (int argc, char **argv)
if (stat (argv[i], &stats[i - optind]))
{
error (0, errno, "%s", quote (argv[i]));
- exit_status = 1;
+ exit_status = EXIT_FAILURE;
argv[i] = NULL;
}
else
@@ -918,7 +915,7 @@ main (int argc, char **argv)
int i;
/* Display explicitly requested empty file systems. */
- show_listed_fs = 1;
+ show_listed_fs = true;
if (n_valid_args > 0)
print_header ();
@@ -933,5 +930,5 @@ main (int argc, char **argv)
show_all_entries ();
}
- exit (exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+ exit (exit_status);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- coreutils fsusage+df int cleanup,
Paul Eggert <=