OSDN Git Service

Fixed flushing for MSYS2.
authorLoRd_MuldeR <mulder2@gmx.de>
Sat, 6 Jan 2018 02:30:26 +0000 (03:30 +0100)
committerLoRd_MuldeR <mulder2@gmx.de>
Sat, 6 Jan 2018 02:30:26 +0000 (03:30 +0100)
src/main++.cpp
src/main.c
src/self_test.h
src/utilities.h

index e1da445..547c497 100644 (file)
@@ -58,6 +58,7 @@ int MAIN(int argc, CHAR *argv[])
        clock_t ts_start, ts_finish;
 
 #ifdef _WIN32
+       setvbuf(stderr, NULL, _IONBF, 0);
        _setmode(_fileno(stdin),  _O_BINARY);
        _setmode(_fileno(stdout), _O_BINARY);
 #endif
@@ -71,21 +72,15 @@ int MAIN(int argc, CHAR *argv[])
                return 1;
        }
 
-       /*print help screen or version?*/
        switch (param.opmode)
        {
-       case 1:
+       case OPMODE_HELP:
                print_help();
                return 0;
-       case 2:
+       case OPMODE_VERS:
                print_vers();
                return 0;
-       }
-
-       /*run self-test, if in test mode*/
-       if (param.test_mode)
-       {
-               print_logo();
+       case OPMODE_TEST:
 #ifdef NO_SELFTEST
                fprintf(stderr, "Not compiled with self-test code!\n");
                return 1;
@@ -185,8 +180,10 @@ int MAIN(int argc, CHAR *argv[])
        }
        else
        {
-               print_digest(result.data(), param.use_upper_case, param.curly_brackets);
+               print_digest(stdout, result.data(), param.use_upper_case, param.curly_brackets);
        }
+
+       /*flush*/
        fflush(stdout);
 
        /*clean up*/
index e4fc748..a0c0f72 100644 (file)
@@ -59,6 +59,7 @@ int MAIN(int argc, CHAR *argv[])
        mhash_384_t context;
 
 #ifdef _WIN32
+       setvbuf(stderr, NULL, _IONBF, 0);
        _setmode(_fileno(stdin),  _O_BINARY);
        _setmode(_fileno(stdout), _O_BINARY);
 #endif
@@ -72,21 +73,16 @@ int MAIN(int argc, CHAR *argv[])
                return 1;
        }
 
-       /*print help screen or version?*/
+       /*select mode of operation*/
        switch (param.opmode)
        {
-       case 1:
+       case OPMODE_HELP:
                print_help();
                return 0;
-       case 2:
+       case OPMODE_VERS:
                print_vers();
                return 0;
-       }
-
-       /*run self-test, if in test mode*/
-       if (param.test_mode)
-       {
-               print_logo();
+       case OPMODE_TEST:
 #ifdef NO_SELFTEST
                fprintf(stderr, "Not compiled with self-test code!\n");
                return 1;
@@ -186,8 +182,10 @@ int MAIN(int argc, CHAR *argv[])
        }
        else
        {
-               print_digest(result, param.use_upper_case, param.curly_brackets);
+               print_digest(stdout, result, param.use_upper_case, param.curly_brackets);
        }
+
+       /*flush*/
        fflush(stdout);
 
        /*clean up*/
index 0d2e918..8fafe0f 100644 (file)
@@ -23,6 +23,7 @@
 
 /*Include*/
 #include "mhash_384.h"
+#include "utilities.h"
 
 /*CRT includes*/
 #include <stdlib.h>
@@ -148,6 +149,9 @@ static int self_test(void)
        uint8_t result[MY_HASH_LENGTH];
        mhash_384_t context;
 
+       /*logo*/
+       print_logo();
+
        /*test INI table*/
        fprintf(stderr, "Self-test, step 1 of 5 running...\n");
        for (i = 0U; i < 2U; i++)
@@ -267,8 +271,8 @@ static int self_test(void)
                        mhash_384_update(&context, (const uint8_t*)TEST_VECTOR[i].str, TEST_VECTOR[i].len ? TEST_VECTOR[i].len : (uint_fast32_t)strlen(TEST_VECTOR[i].str));
                }
                mhash_384_finalize(&context, result);
-               printf("\b\b\b");
-               print_digest(result, 1, 0);
+               fprintf(stderr, "\b\b\b");
+               print_digest(stderr, result, 1, 0);
                MY_ASSERT(!memcmp(result, TEST_RESULT[i], sizeof(uint8_t) * MY_HASH_LENGTH), "Test vector did NOT compare equal");
        }
 
index c87ceaf..d4caa96 100644 (file)
 #define MY_HASH_LENGTH MHASH_384_LEN
 #endif
 
+/*Mode*/
+#define OPMODE_HELP 1
+#define OPMODE_VERS 2
+#define OPMODE_TEST 3
+
 /*Parameters*/
 typedef struct param_t
 {
@@ -48,7 +53,6 @@ typedef struct param_t
        int opmode;
        int enable_bench;
        int show_progress;
-       int test_mode;
        int use_upper_case;
        int curly_brackets;
        int raw_output;
@@ -131,11 +135,6 @@ static int parse_option(param_t *param, const CHAR *const argv, const int is_lon
                param->enable_bench = 1;
                return 1;
        }
-       if (IS_OPTION(argv, is_long, T('t'), T("test")))
-       {
-               param->test_mode = 1;
-               return 1;
-       }
        if (IS_OPTION(argv, is_long, T('p'), T("progress")))
        {
                param->show_progress = 1;
@@ -158,12 +157,17 @@ static int parse_option(param_t *param, const CHAR *const argv, const int is_lon
        }
        if (IS_OPTION(argv, is_long, T('h'), T("help")))
        {
-               param->opmode = 1;
+               param->opmode = OPMODE_HELP;
                return 1;
        }
        if (IS_OPTION(argv, is_long, T('v'), T("version")))
        {
-               param->opmode = 2;
+               param->opmode = OPMODE_VERS;
+               return 1;
+       }
+       if (IS_OPTION(argv, is_long, T('t'), T("test")))
+       {
+               param->opmode = OPMODE_TEST;
                return 1;
        }
        return 0;
@@ -257,8 +261,8 @@ static void print_progress(const uint64_t size_total, const uint64_t size_proces
 }
 
 /*print digest*/
-#define _PUT_HEX_CHAR(X,Y,Z) putchar(X[((Y) >> (Z)) & 0xFU])
-static void print_digest(const uint8_t *const digest, const int uppercase, const int curly)
+#define _PUT_HEX_CHAR(X,Y,Z) fputc(X[((Y) >> (Z)) & 0xFU], stream)
+static void print_digest(FILE *const stream, const uint8_t *const digest, const int uppercase, const int curly)
 {
        static const char *const HEX_UPR = "0123456789ABCDEF";
        static const char *const HEX_LWR = "0123456789abcdef";
@@ -266,22 +270,22 @@ static void print_digest(const uint8_t *const digest, const int uppercase, const
        uint16_t count;
        if (curly)
        {
-               fputs("{ ", stdout);
+               fputs("{ ", stream);
        }
        for (count = 0U; count < MY_HASH_LENGTH; ++count)
        {
                if (curly)
                {
-                       fputs(count ? ", 0x" : "0x", stdout);
+                       fputs(count ? ", 0x" : "0x", stream);
                }
                _PUT_HEX_CHAR(hex, digest[count], 4);
                _PUT_HEX_CHAR(hex, digest[count], 0);
        }
        if (curly)
        {
-               fputs(" }", stdout);
+               fputs(" }", stream);
        }
-       putchar('\n');
+       fputc('\n', stream);
 }
 
 /*sigint handler*/