From 8f75a603ec833a07a9d9d05782713807297c0c53 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 7 Jul 2010 17:40:25 +0200 Subject: [PATCH] util: implement safe_atolu based on safe_atolli/safe_atoi, depending on word size --- src/conf-parser.c | 1 - src/hostname-setup.c | 2 -- src/load-fragment.c | 1 - src/service.c | 1 - src/util.c | 34 ---------------------------------- src/util.h | 40 ++++++++++++++++++++++++++++++++++------ 6 files changed, 34 insertions(+), 45 deletions(-) diff --git a/src/conf-parser.c b/src/conf-parser.c index 13f87386..a2204530 100644 --- a/src/conf-parser.c +++ b/src/conf-parser.c @@ -32,7 +32,6 @@ #include "log.h" #define COMMENTS "#;\n" -#define LINE_MAX 4096 /* Run the user supplied parser for an assignment */ static int next_assignment( diff --git a/src/hostname-setup.c b/src/hostname-setup.c index e9f722e6..24e0f9d9 100644 --- a/src/hostname-setup.c +++ b/src/hostname-setup.c @@ -30,8 +30,6 @@ #include "util.h" #include "log.h" -#define LINE_MAX 4096 - #if defined(TARGET_FEDORA) #define FILENAME "/etc/sysconfig/network" #elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE) diff --git a/src/load-fragment.c b/src/load-fragment.c index 591b73d0..1cc7c5cc 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -41,7 +41,6 @@ #include "unit-name.h" #define COMMENTS "#;\n" -#define LINE_MAX 4096 static int config_parse_deps( const char *filename, diff --git a/src/service.c b/src/service.c index 9086590c..3bc56d02 100644 --- a/src/service.c +++ b/src/service.c @@ -36,7 +36,6 @@ #define COMMENTS "#;\n" #define NEWLINES "\n\r" -#define LINE_MAX 4096 typedef enum RunlevelType { RUNLEVEL_UP, diff --git a/src/util.c b/src/util.c index a5f904db..8360eb68 100644 --- a/src/util.c +++ b/src/util.c @@ -307,40 +307,6 @@ int safe_atoi(const char *s, int *ret_i) { return 0; } -int safe_atolu(const char *s, long unsigned *ret_lu) { - char *x = NULL; - unsigned long l; - - assert(s); - assert(ret_lu); - - errno = 0; - l = strtoul(s, &x, 0); - - if (!x || *x || errno) - return errno ? -errno : -EINVAL; - - *ret_lu = l; - return 0; -} - -int safe_atoli(const char *s, long int *ret_li) { - char *x = NULL; - long l; - - assert(s); - assert(ret_li); - - errno = 0; - l = strtol(s, &x, 0); - - if (!x || *x || errno) - return errno ? -errno : -EINVAL; - - *ret_li = l; - return 0; -} - int safe_atollu(const char *s, long long unsigned *ret_llu) { char *x = NULL; unsigned long long l; diff --git a/src/util.h b/src/util.h index 65a5e66a..fed0e670 100644 --- a/src/util.h +++ b/src/util.h @@ -30,6 +30,7 @@ #include #include #include +#include #include "macro.h" @@ -119,21 +120,48 @@ int parse_pid(const char *s, pid_t* ret_pid); int safe_atou(const char *s, unsigned *ret_u); int safe_atoi(const char *s, int *ret_i); +int safe_atollu(const char *s, unsigned long long *ret_u); +int safe_atolli(const char *s, long long int *ret_i); + +#if __WORDSIZE == 32 +static inline int safe_atolu(const char *s, unsigned long *ret_u) { + assert_cc(sizeof(unsigned long) == sizeof(unsigned)); + return safe_atou(s, (unsigned*) ret_u); +} +static inline int safe_atoli(const char *s, long int *ret_u) { + assert_cc(sizeof(long int) == sizeof(int)); + return safe_atoi(s, (int*) ret_u); +} +#else +static inline int safe_atolu(const char *s, unsigned long *ret_u) { + assert_cc(sizeof(unsigned long) == sizeof(unsigned long long)); + return safe_atollu(s, (unsigned long long*) ret_u); +} +static inline int safe_atoli(const char *s, long int *ret_u) { + assert_cc(sizeof(long int) == sizeof(long long int)); + return safe_atolli(s, (long long int*) ret_u); +} +#endif + static inline int safe_atou32(const char *s, uint32_t *ret_u) { assert_cc(sizeof(uint32_t) == sizeof(unsigned)); return safe_atou(s, (unsigned*) ret_u); } -static inline int safe_atoi32(const char *s, int32_t *ret_u) { +static inline int safe_atoi32(const char *s, int32_t *ret_i) { assert_cc(sizeof(int32_t) == sizeof(int)); - return safe_atoi(s, (int*) ret_u); + return safe_atoi(s, (int*) ret_i); } -int safe_atolu(const char *s, unsigned long *ret_u); -int safe_atoli(const char *s, long int *ret_i); +static inline int safe_atou64(const char *s, uint64_t *ret_u) { + assert_cc(sizeof(uint64_t) == sizeof(unsigned long long)); + return safe_atollu(s, (unsigned long long*) ret_u); +} -int safe_atollu(const char *s, unsigned long long *ret_u); -int safe_atolli(const char *s, long long int *ret_i); +static inline int safe_atoi64(const char *s, int64_t *ret_i) { + assert_cc(sizeof(int64_t) == sizeof(long long int)); + return safe_atolli(s, (long long int*) ret_i); +} char *split(const char *c, size_t *l, const char *separator, char **state); char *split_quoted(const char *c, size_t *l, char **state); -- 2.39.5