[git pull] isosize fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit 37b94458bd0f4a178233ad0366a727bf5bde879f:

  sfdisk: fix coding style. (2011-06-29 12:47:38 +0200)

are available in the git repository at:
  https://github.com/kerolasa/lelux-utiliteetit isosize

Sami Kerola (6):
      isosize: remove global variables
      isosize: use long options
      isosize: check user input to be numeric
      isosize: include-what-you-use header check
      isosize: fix coding style
      docs: isosize.8 add long options

 disk-utils/Makefile.am |    1 +
 disk-utils/isosize.8   |   16 ++--
 disk-utils/isosize.c   |  221 +++++++++++++++++++++++++-----------------------
 3 files changed, 122 insertions(+), 116 deletions(-)

diff --git a/disk-utils/Makefile.am b/disk-utils/Makefile.am
index cf4a3e8..6b937bd 100644
--- a/disk-utils/Makefile.am
+++ b/disk-utils/Makefile.am
@@ -27,6 +27,7 @@ mkswap_SOURCES = mkswap.c $(utils_common)
$(top_srcdir)/lib/wholedisk.c $(top_sr
 mkswap_LDADD = $(uuid_ldadd)
 mkswap_CFLAGS = $(AM_CFLAGS) $(uuid_cflags)

+isosize_SOURCES = isosize.c $(top_srcdir)/lib/strutils.c
 usrbin_exec_PROGRAMS = isosize
 usrsbin_exec_PROGRAMS =

diff --git a/disk-utils/isosize.8 b/disk-utils/isosize.8
index ea878cf..160f8eb 100644
--- a/disk-utils/isosize.8
+++ b/disk-utils/isosize.8
@@ -1,12 +1,9 @@
-.TH ISOSIZE "8" "December 2000" "sg3_utils-0.91" SG_UTILS
+.TH ISOSIZE "8" "June 2011" "util-linux" "System Administration Utilities"
 .SH NAME
 isosize \- outputs the length of an iso9660 file system
 .SH SYNOPSIS
 .B isosize
-.RB [ \-x ]
-.RB [ \-d
-.IR <num> ]
-.IR <iso9660_image_file> ...
+[\fIoptions\fR] \fIiso9660_image_file\fR
 .SH DESCRIPTION
 .\" Add any additional description here
 .PP
@@ -15,19 +12,20 @@ is contained in given file. That file may be a
normal file or
 a block device (e.g. /dev/hdd or /dev/sr0). In the absence of
 any switches (or errors) it will output the size of the iso9660
 file system in bytes. This can now be a large number (>> 4 GB).
+.SH OPTIONS
 .TP
-.B \-x
+\fB\-x\fR, \fB\-\-sectors\fR
 output in humanly readable form the block count and the block
 size. Output uses the term "sectors" for "blocks".
 .TP
-.BI \-d\  <num>
+\fB\-d\fR, \fB\-\-divisor\fR=\fINUM\fR
 only has affect when
 .B \-x
 is not given. The number output (if no errors)
 is the iso9660 file size in bytes divided by
-.IR <num> .
+.IR NUM .
 So if
-.I <num>
+.I NUM
 is the block size then the output number will be the block count.
 .PP
 The size of the file (or block device) holding a iso9660 file
diff --git a/disk-utils/isosize.c b/disk-utils/isosize.c
index 2bdc74a..7bfa81d 100644
--- a/disk-utils/isosize.c
+++ b/disk-utils/isosize.c
@@ -23,132 +23,128 @@
 #include <getopt.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include <string.h>
 #include <errno.h>

 #include "nls.h"
 #include "c.h"
+#include "strutils.h"

 #define ISODCL(from, to) (to - from + 1)

-int xflag;
-
-static int
-isonum_721 (unsigned char * p) {
-        return ((p[0] & 0xff)
-                | ((p[1] & 0xff) << 8));
+static int isonum_721(unsigned char *p)
+{
+	return ((p[0] & 0xff)
+		| ((p[1] & 0xff) << 8));
 }

-static int
-isonum_722 (unsigned char * p) {
-        return ((p[1] & 0xff)
-                | ((p[0] & 0xff) << 8));
+static int isonum_722(unsigned char *p)
+{
+	return ((p[1] & 0xff)
+		| ((p[0] & 0xff) << 8));
 }

-static int
-isonum_723 (unsigned char * p) {
-        int le = isonum_721 (p);
-        int be = isonum_722 (p+2);
-        if (xflag && le != be)
+static int isonum_723(unsigned char *p, int xflag)
+{
+	int le = isonum_721(p);
+	int be = isonum_722(p + 2);
+	if (xflag && le != be)
 		/* translation is useless */
-                fprintf(stderr, "723error: le=%d be=%d\n", le, be);
-        return (le);
+		warnx("723error: le=%d be=%d", le, be);
+	return (le);
 }

-static int
-isonum_731 (unsigned char * p) {
-    return ((p[0] & 0xff)
-            | ((p[1] & 0xff) << 8)
-            | ((p[2] & 0xff) << 16)
-            | ((p[3] & 0xff) << 24));
+static int isonum_731(unsigned char *p)
+{
+	return ((p[0] & 0xff)
+		| ((p[1] & 0xff) << 8)
+		| ((p[2] & 0xff) << 16)
+		| ((p[3] & 0xff) << 24));
 }

-static int
-isonum_732 (unsigned char * p) {
-    return ((p[3] & 0xff)
-            | ((p[2] & 0xff) << 8)
-            | ((p[1] & 0xff) << 16)
-            | ((p[0] & 0xff) << 24));
+static int isonum_732(unsigned char *p)
+{
+	return ((p[3] & 0xff)
+		| ((p[2] & 0xff) << 8)
+		| ((p[1] & 0xff) << 16)
+		| ((p[0] & 0xff) << 24));
 }

-
-static int
-isonum_733 (unsigned char * p) {
-    int le = isonum_731 (p);
-    int be = isonum_732 (p+4);
-    if (xflag && le != be)
-	    /* translation is useless */
-            fprintf(stderr, "733error: le=%d be=%d\n", le, be);
-    return (le);
+static int isonum_733(unsigned char *p, int xflag)
+{
+	int le = isonum_731(p);
+	int be = isonum_732(p + 4);
+	if (xflag && le != be)
+		/* translation is useless */
+		warn("733error: le=%d be=%d", le, be);
+	return (le);
 }

-struct iso_primary_descriptor {
-    unsigned char type                      [ISODCL (  1,   1)]; /* 711 */
-    unsigned char id                        [ISODCL (  2,   6)];
-    unsigned char version                   [ISODCL (  7,   7)]; /* 711 */
-    unsigned char unused1                   [ISODCL (  8,   8)];
-    unsigned char system_id                 [ISODCL (  9,  40)]; /* auchars */
-    unsigned char volume_id                 [ISODCL ( 41,  72)]; /* duchars */
-    unsigned char unused2                   [ISODCL ( 73,  80)];
-    unsigned char volume_space_size         [ISODCL ( 81,  88)]; /* 733 */
-    unsigned char unused3                   [ISODCL ( 89, 120)];
-    unsigned char volume_set_size           [ISODCL (121, 124)]; /* 723 */
-    unsigned char volume_sequence_number    [ISODCL (125, 128)]; /* 723 */
-    unsigned char logical_block_size        [ISODCL (129, 132)]; /* 723 */
-    unsigned char path_table_size           [ISODCL (133, 140)]; /* 733 */
-    unsigned char type_l_path_table         [ISODCL (141, 144)]; /* 731 */
-    unsigned char opt_type_l_path_table     [ISODCL (145, 148)]; /* 731 */
-    unsigned char type_m_path_table         [ISODCL (149, 152)]; /* 732 */
-    unsigned char opt_type_m_path_table     [ISODCL (153, 156)]; /* 732 */
-    unsigned char root_directory_record     [ISODCL (157, 190)]; /* 9.1 */
-    unsigned char volume_set_id             [ISODCL (191, 318)]; /* duchars */
-    unsigned char publisher_id              [ISODCL (319, 446)]; /* achars */
-    unsigned char preparer_id               [ISODCL (447, 574)]; /* achars */
-    unsigned char application_id            [ISODCL (575, 702)]; /* achars */
-    unsigned char copyright_file_id         [ISODCL (703, 739)]; /*
7.5 dchars */
-    unsigned char abstract_file_id          [ISODCL (740, 776)]; /*
7.5 dchars */
-    unsigned char bibliographic_file_id     [ISODCL (777, 813)]; /*
7.5 dchars */
-    unsigned char creation_date             [ISODCL (814, 830)]; /* 8.4.26.1 */
-    unsigned char modification_date         [ISODCL (831, 847)]; /* 8.4.26.1 */
-    unsigned char expiration_date           [ISODCL (848, 864)]; /* 8.4.26.1 */
-    unsigned char effective_date            [ISODCL (865, 881)]; /* 8.4.26.1 */
-    unsigned char file_structure_version    [ISODCL (882, 882)]; /* 711 */
-    unsigned char unused4                   [ISODCL (883, 883)];
-    unsigned char application_data          [ISODCL (884, 1395)];
-    unsigned char unused5                   [ISODCL (1396, 2048)];
+struct iso_primary_descriptor
+{
+	unsigned char type			[ISODCL (   1,	  1)]; /* 711 */
+	unsigned char id			[ISODCL (   2,	  6)];
+	unsigned char version			[ISODCL (   7,	  7)]; /* 711 */
+	unsigned char unused1			[ISODCL (   8,	  8)];
+	unsigned char system_id			[ISODCL (   9,	 40)]; /* auchars */
+	unsigned char volume_id			[ISODCL (  41,	 72)]; /* duchars */
+	unsigned char unused2			[ISODCL (  73,	 80)];
+	unsigned char volume_space_size		[ISODCL (  81,	 88)]; /* 733 */
+	unsigned char unused3			[ISODCL (  89,	120)];
+	unsigned char volume_set_size		[ISODCL ( 121,	124)]; /* 723 */
+	unsigned char volume_sequence_number	[ISODCL ( 125,	128)]; /* 723 */
+	unsigned char logical_block_size	[ISODCL ( 129,	132)]; /* 723 */
+	unsigned char path_table_size		[ISODCL ( 133,	140)]; /* 733 */
+	unsigned char type_l_path_table		[ISODCL ( 141,	144)]; /* 731 */
+	unsigned char opt_type_l_path_table	[ISODCL ( 145,	148)]; /* 731 */
+	unsigned char type_m_path_table		[ISODCL ( 149,	152)]; /* 732 */
+	unsigned char opt_type_m_path_table	[ISODCL ( 153,	156)]; /* 732 */
+	unsigned char root_directory_record	[ISODCL ( 157,	190)]; /* 9.1 */
+	unsigned char volume_set_id		[ISODCL ( 191,	318)]; /* duchars */
+	unsigned char publisher_id		[ISODCL ( 319,	446)]; /* achars */
+	unsigned char preparer_id		[ISODCL ( 447,	574)]; /* achars */
+	unsigned char application_id		[ISODCL ( 575,	702)]; /* achars */
+	unsigned char copyright_file_id		[ISODCL ( 703,	739)]; /* 7.5 dchars */
+	unsigned char abstract_file_id		[ISODCL ( 740,	776)]; /* 7.5 dchars */
+	unsigned char bibliographic_file_id	[ISODCL ( 777,	813)]; /* 7.5 dchars */
+	unsigned char creation_date		[ISODCL ( 814,	830)]; /* 8.4.26.1 */
+	unsigned char modification_date		[ISODCL ( 831,	847)]; /* 8.4.26.1 */
+	unsigned char expiration_date		[ISODCL ( 848,	864)]; /* 8.4.26.1 */
+	unsigned char effective_date		[ISODCL ( 865,	881)]; /* 8.4.26.1 */
+	unsigned char file_structure_version	[ISODCL ( 882,	882)]; /* 711 */
+	unsigned char unused4			[ISODCL ( 883,	883)];
+	unsigned char application_data		[ISODCL ( 884, 1395)];
+	unsigned char unused5			[ISODCL (1396, 2048)];
 };

-int divisor = 0;
-
-static void
-isosize(char *filenamep) {
+static void isosize(char *filenamep, int xflag, long divisor)
+{
 	int fd, nsecs, ssize;
 	struct iso_primary_descriptor ipd;

 	if ((fd = open(filenamep, O_RDONLY)) < 0)
 		err(EXIT_FAILURE, _("failed to open %s"), filenamep);

-	if (lseek(fd, 16 << 11, 0) == (off_t)-1)
+	if (lseek(fd, 16 << 11, 0) == (off_t) - 1)
 		err(EXIT_FAILURE, _("seek error on %s"), filenamep);

 	if (read(fd, &ipd, sizeof(ipd)) < 0)
 		err(EXIT_FAILURE, _("read error on %s"), filenamep);

-	nsecs = isonum_733(ipd.volume_space_size);
-	ssize = isonum_723(ipd.logical_block_size); /* nowadays always 2048 */
+	nsecs = isonum_733(ipd.volume_space_size, xflag);
+	/* isonum_723 returns nowadays always 2048 */
+	ssize = isonum_723(ipd.logical_block_size, xflag);

 	if (xflag) {
-		printf (_("sector count: %d, sector size: %d\n"),
-			nsecs, ssize);
+		printf(_("sector count: %d, sector size: %d\n"), nsecs, ssize);
 	} else {
 		long long product = nsecs;

 		if (divisor == 0)
-			printf ("%lld\n", product * ssize);
+			printf("%lld\n", product * ssize);
 		else if (divisor == ssize)
-			printf ("%d\n", nsecs);
+			printf("%d\n", nsecs);
 		else
-			printf ("%lld\n", (product * ssize) / divisor);
+			printf("%lld\n", (product * ssize) / divisor);
 	}

 	close(fd);
@@ -156,55 +152,66 @@ isosize(char *filenamep) {

 static void __attribute__((__noreturn__)) usage(FILE *out)
 {
-	fprintf(out, _("Usage: %s [-x] [-d <num>] iso9660-image\n"),
+	fprintf(out, _("\nUsage:\n"
+		       " %s [options] iso9660_image_file\n"),
 		program_invocation_short_name);

+	fprintf(out, _("\nOptions:\n"
+		       " -d, --divisor=NUM      devide bytes NUM\n"
+		       " -x, --sectors          show sector count and size\n"
+		       " -V, --version          output version information and exit\n"
+		       " -H, --help             display this help and exit\n\n"));
+
 	exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
 }

-int
-main(int argc, char * argv[]) {
-	int j, ct;
+int main(int argc, char **argv)
+{
+	int j, ct, opt, xflag = 0;
+	long divisor = 0;
+
+	static const struct option longopts[] = {
+		{"divisor", no_argument, 0, 'd'},
+		{"sectors", no_argument, 0, 'x'},
+		{"version", no_argument, 0, 'V'},
+		{"help", no_argument, 0, 'h'},
+		{NULL, 0, 0, 0}
+	};

 	setlocale(LC_ALL, "");
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);

-	if (argc >= 2 &&
-	    (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version"))) {
-		printf(_("%s (%s)\n"), program_invocation_short_name, PACKAGE_STRING);
-		return EXIT_SUCCESS;
-	}
-
-	for (;;) {
-		int opt;
-
-		opt = getopt(argc, argv, "xd:");
-		if (opt == -1)
-			break;
+	while ((opt = getopt_long(argc, argv, "d:xVh", longopts, NULL)) != -1)
 		switch (opt) {
 		case 'd':
-			divisor = atoi(optarg);
+			divisor =
+			    strtol_or_err(optarg,
+					  _("invalid divisor argument"));
 			break;
 		case 'x':
 			xflag = 1;
 			break;
+		case 'V':
+			printf(_("%s (%s)\n"), program_invocation_short_name,
+			       PACKAGE_STRING);
+			return EXIT_SUCCESS;
+		case 'h':
+			usage(stdout);
 		default:
 			usage(stderr);
 		}
-	}

 	ct = argc - optind;

-	if (ct <= 0) {
+	if (ct <= 0)
 		usage(stderr);
-	}

 	for (j = optind; j < argc; j++) {
 		if (ct > 1)
 			printf("%s: ", argv[j]);
-		isosize(argv[j]);
+		isosize(argv[j], xflag, divisor);
 	}

-	return 0;
+	return EXIT_SUCCESS;
 }

-- 
   Sami Kerola
   http://www.iki.fi/kerolasa/
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux