From 9bc283541c788a762396398c57cb5ac663e7f23c Mon Sep 17 00:00:00 2001 From: David Cantrell Date: Fri, 5 Jan 2007 20:11:08 +0000 Subject: * isomd5sum/checkisomd5.c, libcheckisomd5.c: Patch from Ryan Finnie to add the --gauge option which outputs gauge values suitable for piping in to programs like dialog(1). (#220286) --- isomd5sum/checkisomd5.c | 13 +++++++++++-- isomd5sum/libcheckisomd5.c | 28 +++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 7 deletions(-) (limited to 'isomd5sum') diff --git a/isomd5sum/checkisomd5.c b/isomd5sum/checkisomd5.c index b90c28378..f6b19c5fe 100644 --- a/isomd5sum/checkisomd5.c +++ b/isomd5sum/checkisomd5.c @@ -12,17 +12,21 @@ int main(int argc, char **argv) { int i; int rc; + int flags; int verbose; + int gauge; int md5only; int filearg; if (argc < 2) { - printf("Usage: checkisomd5 [--md5sumonly] [--verbose] |\n\n"); + printf("Usage: checkisomd5 [--md5sumonly] [--verbose] [--gauge] |\n\n"); exit(1); } md5only = 0; + flags = 1; /* mediaCheckFile defaults to verbose, not quiet, so prepopulate the "quiet" bit */ verbose = 0; + gauge = 1; filearg = 1; for (i=1; i < argc; i++) { if (strcmp(argv[i], "--md5sumonly") == 0) { @@ -30,7 +34,12 @@ int main(int argc, char **argv) { filearg++; } else if (strcmp(argv[i], "--verbose") == 0) { filearg++; + flags ^= 1; verbose = 1; + } else if (strcmp(argv[i], "--gauge") == 0) { + filearg++; + flags ^= 2; + gauge = 1; } else break; } @@ -41,7 +50,7 @@ int main(int argc, char **argv) { if (md5only) exit(0); - rc = mediaCheckFile(argv[filearg], !verbose); + rc = mediaCheckFile(argv[filearg], flags); /* 1 means it passed, 0 means it failed, -1 means we couldnt find chksum */ if (rc == 1) diff --git a/isomd5sum/libcheckisomd5.c b/isomd5sum/libcheckisomd5.c index 618cdabdd..66259848e 100644 --- a/isomd5sum/libcheckisomd5.c +++ b/isomd5sum/libcheckisomd5.c @@ -158,7 +158,7 @@ static int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isos /* returns -1 if no checksum encoded in media, 0 if no match, 1 if match */ /* mediasum is the sum encoded in media, computedsum is one we compute */ /* both strings must be pre-allocated at least 33 chars in length */ -static int checkmd5sum(int isofd, char *mediasum, char *computedsum, int quiet) { +static int checkmd5sum(int isofd, char *mediasum, char *computedsum, int flags) { int nread; int i, j; int appdata_start_offset, appdata_end_offset; @@ -178,6 +178,13 @@ static int checkmd5sum(int isofd, char *mediasum, char *computedsum, int quiet) char thisfragsum[FRAGMENT_SUM_LENGTH]; long long fragmentcount = 0; MD5_CTX md5ctx, fragmd5ctx; + int quiet; + int gauge; + int gaugeat = -1; + int gaugeval; + + quiet = (((flags & 1) == 1) ? 1 : 0); /* bit 1: quiet */ + gauge = (((flags & 2) == 2) ? 1 : 0); /* bit 2: gauge */ if ((pvd_offset = parsepvd(isofd, mediasum, &skipsectors, &isosize, &supported, fragmentsums, &fragmentcount)) < 0) return -1; @@ -273,6 +280,14 @@ static int checkmd5sum(int isofd, char *mediasum, char *computedsum, int quiet) printf("\b\b\b\b\b\b%05.1f%%", (100.0*offset)/(isosize-skipsectors*2048.0)); fflush(stdout); } + if (gauge) { + gaugeval = (100.0*offset)/(isosize-skipsectors*2048.0); + if (gaugeval != gaugeat) { + printf("%d\n", gaugeval); + fflush(stdout); + gaugeat = gaugeval; + } + } } if (!quiet) { @@ -318,7 +333,7 @@ static void readCB(void *co, long long pos) { } #endif -static int doMediaCheck(int isofd, char *mediasum, char *computedsum, long long *isosize, int *supported, int quiet) { +static int doMediaCheck(int isofd, char *mediasum, char *computedsum, long long *isosize, int *supported, int flags) { int rc; int skipsectors; long long fragmentcount = 0; @@ -332,18 +347,21 @@ static int doMediaCheck(int isofd, char *mediasum, char *computedsum, long long return -1; } - rc = checkmd5sum(isofd, mediasum, computedsum, quiet); + rc = checkmd5sum(isofd, mediasum, computedsum, flags); return rc; } -int mediaCheckFile(char *file, int quiet) { +int mediaCheckFile(char *file, int flags) { int isofd; int rc; char *result; char mediasum[33], computedsum[33]; long long isosize; int supported; + int quiet; + + quiet = (((flags & 1) == 1) ? 1 : 0); /* bit 1: quiet */ isofd = open(file, O_RDONLY); @@ -352,7 +370,7 @@ int mediaCheckFile(char *file, int quiet) { return -1; } - rc = doMediaCheck(isofd, mediasum, computedsum, &isosize, &supported, quiet); + rc = doMediaCheck(isofd, mediasum, computedsum, &isosize, &supported, flags); close(isofd); -- cgit