diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-07-07 17:40:25 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-07-07 17:40:25 +0200 |
commit | 8f75a603ec833a07a9d9d05782713807297c0c53 (patch) | |
tree | f3ef6a0dd8725be483e6c3dfdfc27b3cc6099117 /src/util.h | |
parent | afe1be4dbdf142513f6ac1d92e6a20bdc4b20c80 (diff) |
util: implement safe_atolu based on safe_atolli/safe_atoi, depending on word size
Diffstat (limited to 'src/util.h')
-rw-r--r-- | src/util.h | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/src/util.h b/src/util.h index 65a5e66ad1..fed0e670ef 100644 --- a/src/util.h +++ b/src/util.h @@ -30,6 +30,7 @@ #include <stdio.h> #include <signal.h> #include <sched.h> +#include <limits.h> #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); |