| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/config')
| -rw-r--r-- | src/config/parameters/parameters.c | 16 | ||||
| -rw-r--r-- | src/config/parameters/parameters_accessors.c | 48 | ||||
| -rw-r--r-- | src/config/parameters/parse_config_file.c | 68 | 
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; | 


