* [git pull] isosize fixes
@ 2011-07-11 12:54 Sami Kerola
2011-07-18 21:49 ` Karel Zak
0 siblings, 1 reply; 2+ messages in thread
From: Sami Kerola @ 2011-07-11 12:54 UTC (permalink / raw)
To: util-linux
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/
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [git pull] isosize fixes
2011-07-11 12:54 [git pull] isosize fixes Sami Kerola
@ 2011-07-18 21:49 ` Karel Zak
0 siblings, 0 replies; 2+ messages in thread
From: Karel Zak @ 2011-07-18 21:49 UTC (permalink / raw)
To: kerolasa; +Cc: util-linux
On Mon, Jul 11, 2011 at 02:54:04PM +0200, Sami Kerola wrote:
> 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(-)
Applied, thanks.
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-07-18 21:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-11 12:54 [git pull] isosize fixes Sami Kerola
2011-07-18 21:49 ` Karel Zak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox