summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/config_file.c')
-rw-r--r--src/config/config_file.c149
1 files changed, 22 insertions, 127 deletions
diff --git a/src/config/config_file.c b/src/config/config_file.c
index ad060a5..2e5ef0c 100644
--- a/src/config/config_file.c
+++ b/src/config/config_file.c
@@ -1,3 +1,4 @@
+/**** POSIX *******************************************************************/
#include <errno.h>
#include <string.h>
#include <stdio.h>
@@ -6,38 +7,27 @@
#include <sys/time.h>
-#include "error.h"
-#include "pervasive.h"
-#include "axis.h"
-#include "config.h"
+/**** RELABSD *****************************************************************/
+#include <relabsd/debug.h>
+
+#include <relabsd/config/config_file.h>
#ifndef RELABSD_OPTION_MAX_SIZE
#define RELABSD_OPTION_MAX_SIZE 64
#endif
-/*
- * "errno is never set to zero by any system call or library function."
- * This file makes use of this, by setting it to zero and checking if
- * it was modified after calling an function (I'm guessing this is common
- * practice, but I think it's worth explaining).
- * Following the principle of least astonishment, if a function sets errno to
- * zero, it will not return before setting it back either to its previous
- * value or to a arbitrary nonzero value.
- */
+/******************************************************************************/
+/**** LOCAL FUNCTIONS *********************************************************/
+/******************************************************************************/
/*
* Returns -1 on (fatal) error,
* 0 on EOF,
* 1 on newline.
*/
-static int reach_next_line_or_eof (FILE * const f)
+static int reach_next_line_or_eof (FILE f [const restrict static 1])
{
- int prev_errno;
char c;
- prev_errno = errno;
-
- errno = 0;
-
c = (char) getc(f);
while ((c != '\n') && c != EOF)
@@ -45,21 +35,22 @@ static int reach_next_line_or_eof (FILE * const f)
c = (char) getc(f);
}
- if (errno != 0)
+ if (ferror(f))
{
- RELABSD_FATAL
+ /*
+ * The 'ferror' function's manual specifically states that it does not
+ * sets errno. There is no mention of errno in the 'getc' function's
+ * either, so I am assuming that errno cannot be used to indicate the
+ * error.
+ */
+ RELABSD_S_FATAL
(
- "[CONFIG] Error while attempting to reach EOF or next line: %s.",
- strerror(errno)
+ "[CONFIG] Error while attempting to reach EOF or next line: %s."
);
- errno = prev_errno;
-
return -1;
}
- errno = prev_errno;
-
if (c == EOF)
{
return 0;
@@ -643,6 +634,7 @@ static int parse_options
return 0;
}
+
int relabsd_config_parse
(
struct relabsd_config * const conf,
@@ -681,106 +673,6 @@ int relabsd_config_parse
return 0;
}
-static int direct_filter
-(
- struct relabsd_config_axis * const axis,
- int * const value
-)
-{
- if (abs(*value - axis->previous_value) <= axis->fuzz)
- {
- if (axis->option[RELABSD_REAL_FUZZ_OPTION])
- {
- axis->previous_value = *value;
- }
-
- return -1;
- }
-
- if (*value < axis->min)
- {
- *value = axis->min;
- }
- else if (*value > axis->max)
- {
- *value = axis->max;
- }
- else if (abs(*value) <= axis->flat)
- {
- *value = 0;
- }
-
- if (*value == axis->previous_value)
- {
- return -1;
- }
-
- axis->previous_value = *value;
-
- return 1;
-}
-
-static int rel_to_abs_filter
-(
- struct relabsd_config_axis * const axis,
- int * const value
-)
-{
- long int guard;
-
- guard = (((long int) axis->previous_value) + ((long int) *value));
-
- if (guard < ((long int) INT_MIN))
- {
- guard = ((long int) INT_MIN);
- }
- else if (guard > ((long int) INT_MAX))
- {
- guard = ((long int) INT_MAX);
- }
-
- *value = (int) guard;
-
- if (axis->option[RELABSD_FRAMED_OPTION])
- {
- if (*value < axis->min)
- {
- *value = axis->min;
- }
- else if (*value > axis->max)
- {
- *value = axis->max;
- }
-
- if (*value == axis->previous_value)
- {
- return 0;
- }
-
- axis->previous_value = *value;
-
- return 1;
- }
- else
- {
- if (*value == axis->previous_value)
- {
- return 0;
- }
-
- axis->previous_value = *value;
-
- if ((*value < axis->min) || (*value > axis->max))
- {
- return 0;
- }
- else
- {
- return 1;
- }
- }
-}
-
int relabsd_config_filter
(
struct relabsd_config * const conf,
@@ -805,6 +697,9 @@ int relabsd_config_filter
}
}
+/******************************************************************************/
+/**** EXPORTED FUNCTIONS ******************************************************/
+/******************************************************************************/
void relabsd_config_get_absinfo
(
const struct relabsd_config * const conf,