dlogctl_SOURCES = \
src/shared/logcommon.c \
src/shared/logconfig.c \
+ src/shared/parsers.c \
src/libdlog/loglimiter.c \
src/logctl/logctl.c
src_tests_test_ptrs_list_CFLAGS = $(check_CFLAGS)
src_tests_test_ptrs_list_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=free,--wrap=calloc
-src_tests_test_common_SOURCES = src/tests/test_common.c src/shared/logcommon.c src/shared/logconfig.c
+src_tests_test_common_SOURCES = src/tests/test_common.c src/shared/logcommon.c src/shared/logconfig.c src/shared/parsers.c
src_tests_test_common_CFLAGS = $(check_CFLAGS)
src_tests_test_common_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=sendmsg,--wrap=recvmsg,--wrap=writev,--wrap=read,--wrap=poll,--wrap=fcntl,--wrap=malloc,--wrap=calloc,--wrap=connect,--wrap=socket,--wrap=open,--wrap=ioctl
-src_tests_limiter_SOURCES = src/tests/limiter.c src/libdlog/loglimiter.c src/shared/logconfig.c src/shared/logcommon.c
+src_tests_limiter_SOURCES = src/tests/limiter.c src/libdlog/loglimiter.c src/shared/logconfig.c src/shared/logcommon.c src/shared/parsers.c
src_tests_limiter_CFLAGS = $(check_CFLAGS)
src_tests_limiter_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=snprintf,--wrap=malloc,--wrap=time
-src_tests_dynamic_config_SOURCES = src/tests/dynamic_config.c src/libdlog/dynamic_config.c src/shared/logcommon.c src/shared/logconfig.c
+src_tests_dynamic_config_SOURCES = src/tests/dynamic_config.c src/libdlog/dynamic_config.c src/shared/logcommon.c src/shared/logconfig.c src/shared/parsers.c
src_tests_dynamic_config_CFLAGS = $(check_CFLAGS) -pthread
src_tests_dynamic_config_LDFLAGS = $(AM_LDFLAGS) -pthread -Wl,--wrap=read,--wrap=syslog_critical_failure,--wrap=inotify_init1,--wrap=inotify_add_watch,--wrap=log_config_read_file,--wrap=asprintf
src_tests_libdlog_pipe_CFLAGS = $(check_CFLAGS)
src_tests_libdlog_pipe_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=syslog_critical_failure,--wrap=connect,--wrap=write,--wrap=recv_pipe,--wrap=dup2,--wrap=socket
-src_tests_libdlog_android_SOURCES = src/tests/libdlog_android.c src/libdlog/log_android.c src/shared/logconfig.c src/shared/logcommon.c
+src_tests_libdlog_android_SOURCES = src/tests/libdlog_android.c src/libdlog/log_android.c src/shared/logconfig.c src/shared/logcommon.c src/shared/parsers.c
src_tests_libdlog_android_CFLAGS = $(check_CFLAGS)
src_tests_libdlog_android_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=logger_open_buffer_from_config,--wrap=close,--wrap=writev
-src_tests_libdlog_base_SOURCES = src/tests/libdlog_base.c src/libdlog/log.c src/shared/logcommon.c src/shared/logconfig.c
+src_tests_libdlog_base_SOURCES = src/tests/libdlog_base.c src/libdlog/log.c src/shared/logcommon.c src/shared/logconfig.c src/shared/parsers.c
src_tests_libdlog_base_CFLAGS = $(check_CFLAGS)
src_tests_libdlog_base_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=log_config_read,--wrap=snprintf
src_tests_queued_entry_CFLAGS = $(check_CFLAGS)
src_tests_queued_entry_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=clock_gettime
-src_tests_config_SOURCES = src/tests/config.c src/shared/logconfig.c src/shared/logcommon.c
+src_tests_config_SOURCES = src/tests/config.c src/shared/logconfig.c src/shared/logcommon.c src/shared/parsers.c
src_tests_config_CFLAGS = $(check_CFLAGS)
src_tests_config_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=openat,--wrap=scandirat,--wrap=fdopen,--wrap=open
#include <limits.h>
#include <stdbool.h>
+#include "parsers.h"
+
/**
* @addtogroup SHARED_FUNCTIONS
* @{
}
/**
- * @brief Convert decimal number string to int
- * @param[in] str string of decimal number
- * @param[out] num a place to store the result
- * @return 0 on success otherwise -errno
- * @see strtol(3)
- */
-static int str2num(const char *str, int *num)
-{
- if (str == NULL)
- return -EINVAL;
-
- errno = 0; /* To distinguish success/failure after call */
- char *endptr;
- int val = strtol(str, &endptr, 10);
-
- /* Check for various possible errors */
- if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
- || (errno != 0 && val == 0))
- return -errno;
-
- else if (endptr == str)
- return -EINVAL; /* No digits were found */
-
- /* If we got here, strtol() successfully parsed a number */
- *num = val;
- return 0;
-}
-
-/**
* @brief Get a config value converted to int
* @details Returns a value with the given key from the given config
* @param[in] c The config to work with
int log_config_get_int(const struct log_config *c, const char *key, int default_val)
{
int val = default_val;
- return (str2num(log_config_get(c, key), &val) == 0 ? val : default_val);
+ const char *str = log_config_get(c, key);
+ return (str && parse_number(&str, &val) == 0) ? val : default_val;
}
/**