Refactored progress indicator update + increase file I/O buffer size.

This commit is contained in:
LoRd_MuldeR 2022-03-28 21:45:44 +02:00
parent 342562cf2e
commit fdc1c8b0d8
Signed by: mulder
GPG Key ID: 2B5913365F57E03F

View File

@ -49,6 +49,9 @@ static int open_files(FILE **const file_in, FILE **const file_out, const CHR *co
return EXIT_FAILURE; return EXIT_FAILURE;
} }
setvbuf(*file_in, NULL, _IOFBF, (((8U * BUFFER_SIZE) + (BUFSIZ - 1U)) / BUFSIZ) * BUFSIZ);
setvbuf(*file_out, NULL, _IOFBF, (((8U * BUFFER_SIZE) + (BUFSIZ - 1U)) / BUFSIZ) * BUFSIZ);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
@ -59,6 +62,18 @@ static void init_slunk_param(slunkparam_t *const param, const crypt_options_t *c
param->thread_count = options->thread_count; param->thread_count = options->thread_count;
} }
#define UPDATE_PROGRESS_INDICATOR(CLK_UPDATE, CURRENT, TOTAL) do \
{ \
const uint64_t clk_now = clock_read(); \
if ((clk_now < (CLK_UPDATE)) || (clk_now - (CLK_UPDATE) > update_interval)) \
{ \
FPRINTF(stderr, T("\b\b\b\b\b\b\b%5.1f%% "), ((CURRENT) / ((double)(TOTAL))) * 100.0); \
fflush(stderr); \
CLK_UPDATE = clk_now; \
} \
} \
while(0)
// ========================================================================== // ==========================================================================
// Encrypt // Encrypt
// ========================================================================== // ==========================================================================
@ -67,7 +82,7 @@ int encrypt(const char *const passphrase, const CHR *const input_path, const CHR
{ {
slunkcrypt_t ctx = SLUNKCRYPT_NULL; slunkcrypt_t ctx = SLUNKCRYPT_NULL;
slunkparam_t param; slunkparam_t param;
FILE *file_in = NULL, *file_out = NULL; FILE* file_in = NULL, * file_out = NULL;
int result = EXIT_FAILURE, status; int result = EXIT_FAILURE, status;
uint8_t *buffer = malloc(BUFFER_SIZE * sizeof(uint8_t)); uint8_t *buffer = malloc(BUFFER_SIZE * sizeof(uint8_t));
@ -118,8 +133,8 @@ int encrypt(const char *const passphrase, const CHR *const input_path, const CHR
goto clean_up; goto clean_up;
} }
uint64_t bytes_read = 0U, clk_now, clk_update = clk_now = clock_read(); uint64_t bytes_read = 0U, clk_update = clock_read();
const uint64_t update_interval = (uint64_t)(clock_freq() * 1.0625); const uint64_t update_interval = (uint64_t)(clock_freq() * 1.414);
blake2s_t blake2s_state; blake2s_t blake2s_state;
blake2s_init(&blake2s_state); blake2s_init(&blake2s_state);
@ -151,12 +166,7 @@ int encrypt(const char *const passphrase, const CHR *const input_path, const CHR
{ {
break; /*EOF*/ break; /*EOF*/
} }
if (((clk_now = clock_read()) < clk_update) || (clk_now - clk_update > update_interval)) UPDATE_PROGRESS_INDICATOR(clk_update, bytes_read, file_size);
{
FPRINTF(stderr, T("\b\b\b\b\b\b\b%5.1f%% "), (bytes_read / ((double)file_size)) * 100.0);
fflush(stderr);
clk_update = clk_now;
}
} }
if (ferror(file_in)) if (ferror(file_in))
@ -308,8 +318,8 @@ int decrypt(const char *const passphrase, const CHR *const input_path, const CHR
goto clean_up; goto clean_up;
} }
uint64_t bytes_read = sizeof(uint64_t), clk_now, clk_update = clk_now = clock_read(); uint64_t bytes_read = sizeof(uint64_t), clk_update = clock_read();
const uint64_t update_interval = (uint64_t)(clock_freq() * 1.0625); const uint64_t update_interval = (uint64_t)(clock_freq() * 1.414);
const uint64_t read_limit = round_down(file_size, sizeof(uint64_t)) - (2U * sizeof(uint64_t)); const uint64_t read_limit = round_down(file_size, sizeof(uint64_t)) - (2U * sizeof(uint64_t));
blake2s_t blake2s_state; blake2s_t blake2s_state;
@ -342,12 +352,7 @@ int decrypt(const char *const passphrase, const CHR *const input_path, const CHR
{ {
break; /*EOF*/ break; /*EOF*/
} }
if (((clk_now = clock_read()) < clk_update) || (clk_now - clk_update > update_interval)) UPDATE_PROGRESS_INDICATOR(clk_update, bytes_read, read_limit);
{
FPRINTF(stderr, T("\b\b\b\b\b\b\b%5.1f%% "), (bytes_read / ((double)read_limit)) * 100.0);
fflush(stderr);
clk_update = clk_now;
}
} }
if (ferror(file_in)) if (ferror(file_in))