summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-01-04 21:31:55 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-01-04 21:31:55 +0100
commitee48214209e66aa8c6f353262b175895373f76df (patch)
treec2b61a4bd702602d856f613992c46a802e0a888c /src/config/parameters
parent0c68e544b113f0493b9b80511c26c1e4584bd1e7 (diff)
...
Diffstat (limited to 'src/config/parameters')
-rw-r--r--src/config/parameters/parameters.c16
-rw-r--r--src/config/parameters/parameters_accessors.c48
-rw-r--r--src/config/parameters/parse_config_file.c68
3 files changed, 97 insertions, 35 deletions
diff --git a/src/config/parameters/parameters.c b/src/config/parameters/parameters.c
index ac6a790..fa53b6a 100644
--- a/src/config/parameters/parameters.c
+++ b/src/config/parameters/parameters.c
@@ -216,6 +216,8 @@ int relabsd_parameters_parse_options
|| RELABSD_STRING_EQUALS("--timeout", argv[i])
)
{
+ int timeout;
+
if (argc == i)
{
RELABSD_FATAL("Missing value for \"%s\" <OPTION>.", argv[i]);
@@ -226,17 +228,7 @@ int relabsd_parameters_parse_options
++i;
- if
- (
- relabsd_util_parse_int
- (
- argv[i],
- 0,
- INT_MAX,
- &(parameters->timeout)
- )
- < 0
- )
+ if (relabsd_util_parse_int(argv[i], 0, INT_MAX, &timeout) < 0)
{
RELABSD_FATAL
(
@@ -250,6 +242,8 @@ int relabsd_parameters_parse_options
return -1;
}
+
+ relabsd_parameters_set_timeout(timeout, parameters);
}
else if
(
diff --git a/src/config/parameters/parameters_accessors.c b/src/config/parameters/parameters_accessors.c
index bd6624c..71c2482 100644
--- a/src/config/parameters/parameters_accessors.c
+++ b/src/config/parameters/parameters_accessors.c
@@ -1,5 +1,6 @@
-/**** POSIXS ^*****************************************************************/
+/**** POSIXS ******************************************************************/
#include <stdlib.h>
+#include <string.h>
/**** RELABSD *****************************************************************/
#include <relabsd/config/parameters.h>
@@ -66,9 +67,52 @@ enum relabsd_parameters_run_mode relabsd_parameters_get_execution_mode
struct relabsd_axis * relabsd_parameters_get_axis
(
const enum relabsd_axis_name i,
- const struct relabsd_parameters parameters [const restrict static 1]
+ struct relabsd_parameters parameters [const restrict static 1]
)
{
return (parameters->axes + i);
}
+void relabsd_parameters_set_timeout
+(
+ const int timeout_msec,
+ struct relabsd_parameters parameters [const restrict static 1]
+)
+{
+ if (timeout_msec == 0)
+ {
+ parameters->use_timeout = 0;
+
+ return;
+ }
+
+ parameters->use_timeout = 1;
+
+ (void) memset((void *) &(parameters->timeout), 0, sizeof(struct timeval));
+
+ /* FIXME: Not sure that's correct. */
+ parameters->timeout.tv_sec = (time_t) (timeout_msec / 1000);
+ parameters->timeout.tv_usec =
+ (
+ ((suseconds_t) timeout_msec)
+ * ((suseconds_t) 1000)
+ );
+
+ return;
+}
+
+int relabsd_parameters_use_timeout
+(
+ const struct relabsd_parameters parameters [const restrict static 1]
+)
+{
+ return parameters->use_timeout;
+}
+
+struct timeval relabsd_parameters_get_timeout
+(
+ const struct relabsd_parameters parameters [const restrict static 1]
+)
+{
+ return parameters->timeout;
+}
diff --git a/src/config/parameters/parse_config_file.c b/src/config/parameters/parse_config_file.c
index a6920b4..c01090d 100644
--- a/src/config/parameters/parse_config_file.c
+++ b/src/config/parameters/parse_config_file.c
@@ -123,47 +123,66 @@ static int read_axis_options
return -1;
}
-/*
-static int parse_timeout_option
+static int parse_timeout_configuration_line
(
- struct relabsd_config * const conf,
- const char * const param
+ FILE file [const restrict static 1],
+ struct relabsd_parameters parameters [const static 1]
)
{
+ int read_count;
int timeout_msec;
- const int prev_errno = errno;
-
- conf->enable_timeout = 1;
errno = 0;
- timeout_msec = atoi(param);
+ read_count = fscanf(file, "%d", &timeout_msec);
- if (timeout_msec <= 0)
+ if (read_count == EOF)
{
- RELABSD_FATAL
+ if (errno == 0)
+ {
+ RELABSD_S_FATAL
+ (
+ "Unexpected end of file while reading the timeout parameter in the"
+ " configuration file."
+ );
+ }
+ else
+ {
+ RELABSD_FATAL
+ (
+ "An error occured while reading the timeout parameter in the"
+ " configuration file: %s.",
+ strerror(errno)
+ );
+ }
+
+ return -1;
+ }
+ else if (read_count < 1)
+ {
+ RELABSD_S_FATAL
(
- "Illegal value for timeout \"%d\": accepted range is [1, %d].",
- timeout_msec,
- INT_MAX
+ "Invalid parameter count for the timeout option in the configuration"
+ " file."
);
return -1;
}
-
- memset((void *) &(conf->timeout), 0, sizeof(struct timeval));
-
- conf->timeout.tv_sec = (time_t) (timeout_msec / 1000);
-
- conf->timeout.tv_usec =
+ else if (timeout_msec < 0)
+ {
+ RELABSD_FATAL
(
- ((suseconds_t) timeout_msec)
- * ((suseconds_t) 1000)
+ "Invalid value the timeout option in the configuration file (%d).",
+ timeout_msec
);
+ return -1;
+ }
+
+ relabsd_parameters_set_timeout(timeout_msec, parameters);
+
return 0;
}
-*/
/*
* Returns -1 on (fatal) error,
@@ -184,6 +203,11 @@ static int parse_axis_configuration_line
if (axis_index == RELABSD_UNKNOWN)
{
+ if (RELABSD_IS_PREFIX("TO", axis_name))
+ {
+ return parse_timeout_configuration_line(file, parameters);
+ }
+
RELABSD_FATAL("Unknown axis '%s' in the configuration file.", axis_name);
return -1;