X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gostsum.c;h=aed2a478f7a6aeb5c3dc55c731d463c7a75bf225;hb=refs%2Fheads%2Fopenssl_1_1_0_release1;hp=1021848ef72c9421c668cc25d305cf763a02a4c4;hpb=c98ba9d03213d0c63d6874539d59f7b55fbc3fae;p=openssl-gost%2Fengine.git diff --git a/gostsum.c b/gostsum.c index 1021848..aed2a47 100644 --- a/gostsum.c +++ b/gostsum.c @@ -12,6 +12,9 @@ #include #include #include +#ifdef _WIN32 +# include +#endif #include #include "gosthash.h" #define BUF_SIZE 262144 @@ -74,7 +77,7 @@ int main(int argc, char **argv) init_gost_hash_ctx(&ctx, b); if (check_file) { char inhash[65], calcsum[65], filename[PATH_MAX]; - int failcount = 0, count = 0;; + int failcount = 0, count = 0, errors = 0; if (check_file == stdin && optind < argc) { check_file = fopen(argv[optind], "r"); if (!check_file) { @@ -83,11 +86,12 @@ int main(int argc, char **argv) } } while (get_line(check_file, inhash, filename)) { + count++; if (!hash_file(&ctx, filename, calcsum, open_mode)) { - exit(2); + errors++; + continue; } - count++; - if (!strncmp(calcsum, inhash, 65)) { + if (strncmp(calcsum, inhash, 65) == 0) { if (verbose) { fprintf(stderr, "%s\tOK\n", filename); } @@ -102,15 +106,26 @@ int main(int argc, char **argv) failcount++; } } + if (errors) { + fprintf(stderr, + "%s: WARNING %d of %d file(s) cannot be processed\n", + argv[0], errors, count); + + } if (verbose && failcount) { fprintf(stderr, "%s: %d of %d file(f) failed GOST hash sum check\n", argv[0], failcount, count); } - exit(failcount ? 1 : 0); + exit((failcount || errors) ? 1 : 0); } if (optind == argc) { char sum[65]; +#ifdef _WIN32 + if (open_mode & O_BINARY) { + _setmode(fileno(stdin), O_BINARY); + } +#endif if (!hash_stream(&ctx, fileno(stdin), sum)) { perror("stdin"); exit(1);