Print the system error message, if the input or output file could not be opened.
This commit is contained in:
parent
65c17e6759
commit
b95e578e33
@ -20,6 +20,7 @@
|
||||
#include <inttypes.h>
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
// ==========================================================================
|
||||
// Constants
|
||||
@ -37,14 +38,14 @@ static int open_files(FILE **const file_in, FILE **const file_out, const CHR *co
|
||||
{
|
||||
if (!(*file_in = FOPEN(input_path, T("rb"))))
|
||||
{
|
||||
FPRINTF(stderr, T("Error: Failed to open input file \"%") T(PRISTR) T("\" for reading!\n\n"), input_path);
|
||||
FPRINTF(stderr, T("Error: Failed to open input file \"%") T(PRISTR) T("\" for reading!\n\n%") T(PRISTR) T("\n\n"), input_path, STRERROR(errno));
|
||||
*file_out = NULL;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (!(*file_out = FOPEN(output_path, T("wb"))))
|
||||
{
|
||||
FPRINTF(stderr, T("Error: Failed to open output file \"%") T(PRISTR) T("\" for writing!\n\n"), output_path);
|
||||
FPRINTF(stderr, T("Error: Failed to open output file \"%") T(PRISTR) T("\" for writing!\n\n%") T(PRISTR) T("\n\n"), output_path, STRERROR(errno));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,7 @@
|
||||
# define FPRINTF(X,Y,...) fwprintf((X),(Y),__VA_ARGS__)
|
||||
# define REMOVE(X) _wremove((X))
|
||||
# define FOPEN(X,Y) _wfsopen((X),(Y),_SH_SECURE)
|
||||
# define STRERROR(X) _wcserror((X))
|
||||
# ifdef __USE_MINGW_ANSI_STDIO
|
||||
# define PRISTR "ls"
|
||||
# define PRIstr "hs"
|
||||
@ -87,6 +88,7 @@
|
||||
# define FPRINTF(X,Y,...) fprintf((X),(Y),__VA_ARGS__)
|
||||
# define REMOVE(X) remove((X))
|
||||
# define FOPEN(X,Y) fopen((X),(Y))
|
||||
# define STRERROR(X) strerror((X))
|
||||
# define PRISTR "s"
|
||||
# define PRIstr "s"
|
||||
# define PRIwcs "ls"
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
/* CRT */
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
||||
// ==========================================================================
|
||||
// Constants
|
||||
@ -37,51 +38,70 @@ static const char PASSWD_SYMBOLS[] =
|
||||
// Read passphrase from file
|
||||
// ==========================================================================
|
||||
|
||||
#define PASSPHRASE_BUFFSIZE (SLUNKCRYPT_PWDLEN_MAX + 2U)
|
||||
|
||||
char *read_passphrase(const CHR *const file_name)
|
||||
{
|
||||
size_t str_len = 0U;
|
||||
CHR *passphrase_path = NULL;
|
||||
char *buffer = NULL;
|
||||
FILE *passphrase_file = NULL;
|
||||
|
||||
if ((!file_name) || (!file_name[0U]))
|
||||
{
|
||||
FPUTS(T("Error: The passphrase input file name must not be empty!\n\n"), stderr);
|
||||
return NULL;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
const size_t max_len = SLUNKCRYPT_PWDLEN_MAX + 2U;
|
||||
char *const buffer = (char*) malloc(max_len * sizeof(char));
|
||||
if (STRICMP(file_name, T("-")))
|
||||
{
|
||||
passphrase_path = absolute_path(file_name);
|
||||
if ((!passphrase_path) || (!passphrase_path[0U]))
|
||||
{
|
||||
FPUTS(T("Error: Passphrase input file path could not be resolved!\n\n"), stderr);
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
passphrase_file = passphrase_path ? FOPEN(passphrase_path, T("rb")): stdin;
|
||||
if (!passphrase_file)
|
||||
{
|
||||
FPRINTF(stderr, T("Error: Failed to open passphrase file \"%") T(PRISTR) T("\" for reading!\n\n%") T(PRISTR) T("\n\n"), passphrase_path, STRERROR(errno));
|
||||
goto finish;
|
||||
}
|
||||
|
||||
buffer = (char*) calloc(PASSPHRASE_BUFFSIZE, sizeof(char));
|
||||
if (!buffer)
|
||||
{
|
||||
FPUTS(T("Error: Failed to allocate the passphrase buffer!\n\n"), stderr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const int use_stdin = (!file_name) || (!STRICMP(file_name, T("-")));
|
||||
FILE *const file_in = use_stdin ? stdin : FOPEN(file_name, T("rb"));
|
||||
if (!file_in)
|
||||
{
|
||||
FPRINTF(stderr, T("Error: Failed to open input file \"%") T(PRISTR) T("\" for reading!\n\n"), file_name);
|
||||
free(buffer);
|
||||
return NULL;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
if (!fgets(buffer, (int)max_len, file_in))
|
||||
if (!fgets(buffer, (int)PASSPHRASE_BUFFSIZE, passphrase_file))
|
||||
{
|
||||
buffer[0U] = '\0';
|
||||
goto finish;
|
||||
}
|
||||
size_t length = strlen(buffer);
|
||||
while ((length > 0U) && ((buffer[length - 1U] == '\r') || (buffer[length - 1U] == '\n')))
|
||||
str_len = strlen(buffer);
|
||||
while ((str_len > 0U) && ((buffer[str_len - 1U] == '\r') || (buffer[str_len - 1U] == '\n')))
|
||||
{
|
||||
buffer[--length] = '\0';
|
||||
buffer[--str_len] = '\0';
|
||||
}
|
||||
}
|
||||
while (!buffer[0U]);
|
||||
|
||||
finish:
|
||||
|
||||
if ((!use_stdin) && file_in)
|
||||
if (passphrase_file && (passphrase_file != stdin))
|
||||
{
|
||||
fclose(file_in);
|
||||
fclose(passphrase_file);
|
||||
}
|
||||
|
||||
if (passphrase_path)
|
||||
{
|
||||
free(passphrase_path);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
|
Loading…
Reference in New Issue
Block a user