summaryrefslogtreecommitdiffstats
path: root/isomd5sum
diff options
context:
space:
mode:
authorDavid Cantrell <dcantrell@redhat.com>2007-01-05 20:11:08 +0000
committerDavid Cantrell <dcantrell@redhat.com>2007-01-05 20:11:08 +0000
commit9bc283541c788a762396398c57cb5ac663e7f23c (patch)
tree0a1d91df022e052462b941bd5a4516520777cd63 /isomd5sum
parent9551313fe62fa6570d27b065178c6723b8220b71 (diff)
downloadanaconda-9bc283541c788a762396398c57cb5ac663e7f23c.tar.gz
anaconda-9bc283541c788a762396398c57cb5ac663e7f23c.tar.xz
anaconda-9bc283541c788a762396398c57cb5ac663e7f23c.zip
* 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)
Diffstat (limited to 'isomd5sum')
-rw-r--r--isomd5sum/checkisomd5.c13
-rw-r--r--isomd5sum/libcheckisomd5.c28
2 files changed, 34 insertions, 7 deletions
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] <isofilename>|<blockdevice>\n\n");
+ printf("Usage: checkisomd5 [--md5sumonly] [--verbose] [--gauge] <isofilename>|<blockdevice>\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);