/* err_try_fgets.c */
-#include <stdint.h> /* uint8_t, uint32_t */
+#include <stdint.h> /* uint8_t, uint32_t, UINT8_MAX */
#include <stdio.h> /* FILE, sprintf() */
+#include <stdlib.h> /* atoi() */
#include <string.h> /* strlen(), strchr(), strcmp() */
#include "../common/readwrite.h" /* try_fgets() */
#include "../common/rexit.h" /* exit_err() */
/* Increments by one on each err_try_fgets() call, servers as a line counter. */
static uint32_t err_try_fgets_counter = 0;
-/* Delimiter to use for err_try_fgets()' 'c' test. */
+/* Delimiter to use for err_try_fgets()' 'd' test. */
char * err_try_fgets_delim = "";
-extern void err_try_fgets(char * line, uint32_t linemax, FILE * file,
- char * context, char * test)
+extern char * err_try_fgets(char * line, uint32_t linemax, FILE * file,
+ char * context, char * test)
{
char * err_end = "File ended unexpectedly.";
char * err_empty = "Hit empty line where non-empty line was expected.";
char * err_int = "Expected valid positive or negative integer number.";
char * err_full = "Hit non-empty line where empty line was expected.";
char * err_delim = "Expected proper delimiter, found something else.";
+ char * err_uint8 = "Value is too large. Must be 255 or less.";
char * f_name = "err_try_fgets()";
line[0] = '\0';
- try_fgets(line, linemax + 1, file, f_name);
+ char * fgets_return = try_fgets(line, linemax + 1, file, f_name);
err_try_fgets_counter++;
err_line(strchr(test, '0') && !(strlen(line)), line, context, err_end);
err_line(strchr(test, 'n') && line[strlen(line) - 1] != '\n', line, context,
err_line(strchr(test, 's') && strlen(line) > 2, line, context, err_many);
err_line(strchr(test, 'd') && strcmp(line, err_try_fgets_delim), line,
context, err_delim);
- if (strchr(test, 'i'))
+ if (strchr(test, 'i') || strchr(test, '8'))
{
err_line(!(strchr(test, 'f')) && strlen(line) < 2, line, context,
err_int);
err_line(strlen(line) < 2 && ('-' == line[i] || '+' == line[i]),
line, context, err_int);
}
+ err_line(strchr(test, '8') && atoi(line) > UINT8_MAX, line, context,
+ err_uint8);
+ return fgets_return;
}