util: implement safe_atolu based on safe_atolli/safe_atoi, depending on word size
This commit is contained in:
parent
afe1be4dbd
commit
8f75a603ec
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
#include "unit-name.h"
|
||||
|
||||
#define COMMENTS "#;\n"
|
||||
#define LINE_MAX 4096
|
||||
|
||||
static int config_parse_deps(
|
||||
const char *filename,
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
|
||||
#define COMMENTS "#;\n"
|
||||
#define NEWLINES "\n\r"
|
||||
#define LINE_MAX 4096
|
||||
|
||||
typedef enum RunlevelType {
|
||||
RUNLEVEL_UP,
|
||||
|
|
34
src/util.c
34
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;
|
||||
|
|
40
src/util.h
40
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);
|
||||
|
|
Loading…
Reference in a new issue