FILE: be more fault tolerant
This commit is contained in:
parent
44896c0cb1
commit
eef192f0cc
@ -62,8 +62,11 @@ read_file(char const * const filename)
|
|||||||
/* read and copy chunks */
|
/* read and copy chunks */
|
||||||
while ((n = read(fd, buf, STD_FILE_BUF)) != 0) {
|
while ((n = read(fd, buf, STD_FILE_BUF)) != 0) {
|
||||||
|
|
||||||
if (n == -1)
|
if (n == -1) {
|
||||||
NTRU_ABORT("Failed while reading file descriptor %d\n", fd);
|
NTRU_WARN_DEBUG("Failed while reading file descriptor %d",
|
||||||
|
fd);
|
||||||
|
goto failure_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
str_size += n; /* count total bytes read */
|
str_size += n; /* count total bytes read */
|
||||||
|
|
||||||
@ -78,8 +81,10 @@ read_file(char const * const filename)
|
|||||||
/* add trailing NULL byte */
|
/* add trailing NULL byte */
|
||||||
cstring[str_size] = '\0';
|
cstring[str_size] = '\0';
|
||||||
|
|
||||||
if (close(fd))
|
if (close(fd)) {
|
||||||
NTRU_ABORT("Failed to close file descripter %d\n", fd);
|
NTRU_WARN_DEBUG("Failed to close file descripter %d\n", fd);
|
||||||
|
goto failure_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
result_string = ntru_malloc(sizeof(*result_string));
|
result_string = ntru_malloc(sizeof(*result_string));
|
||||||
result_string->ptr = cstring;
|
result_string->ptr = cstring;
|
||||||
@ -90,24 +95,35 @@ read_file(char const * const filename)
|
|||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
failure_cleanup:
|
||||||
|
free(cstring);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void
|
bool
|
||||||
write_file(string const *wstring, char const * const filename)
|
write_file(string const *wstring, char const * const filename)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
fp = fopen(filename, "w");
|
fp = fopen(filename, "w");
|
||||||
|
|
||||||
if (!fp)
|
if (!fp) {
|
||||||
NTRU_ABORT("Failed while creating file\n");
|
NTRU_WARN_DEBUG("Failed while creating file\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < wstring->len; i++)
|
for (uint32_t i = 0; i < wstring->len; i++)
|
||||||
fprintf(fp, "%c", wstring->ptr[i]);
|
fprintf(fp, "%c", wstring->ptr[i]);
|
||||||
|
|
||||||
fclose(fp);
|
if (fclose(fp)) {
|
||||||
|
NTRU_WARN_DEBUG("Failed to close file descripter\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
@ -32,13 +32,15 @@
|
|||||||
#include "ntru_common.h"
|
#include "ntru_common.h"
|
||||||
#include "ntru_string.h"
|
#include "ntru_string.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a file and returns a newly allocated string.
|
* Reads a file and returns a newly allocated string.
|
||||||
*
|
*
|
||||||
* @param filename file to open
|
* @param filename file to open
|
||||||
* @return a newly allocated string which must be freed by the caller
|
* @return a newly allocated string which must be freed by the caller
|
||||||
* or NULL on failure
|
* or NULL on failure (e.g. if the file could not be opened/closed)
|
||||||
*/
|
*/
|
||||||
string *
|
string *
|
||||||
read_file(char const * const filename);
|
read_file(char const * const filename);
|
||||||
@ -49,8 +51,9 @@ read_file(char const * const filename);
|
|||||||
*
|
*
|
||||||
* @param wstring the string to write to the file
|
* @param wstring the string to write to the file
|
||||||
* @param filename the name of the file to write to
|
* @param filename the name of the file to write to
|
||||||
|
* @return true for success or false for failure if fopen or fclose failed
|
||||||
*/
|
*/
|
||||||
void
|
bool
|
||||||
write_file(string const *wstring, char const * const filename);
|
write_file(string const *wstring, char const * const filename);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user