util: implement safe_atolu based on safe_atolli/safe_atoi, depending on word size

This commit is contained in:
Lennart Poettering 2010-07-07 17:40:25 +02:00
parent afe1be4dbd
commit 8f75a603ec
6 changed files with 34 additions and 45 deletions

View file

@ -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(

View file

@ -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)

View file

@ -41,7 +41,6 @@
#include "unit-name.h"
#define COMMENTS "#;\n"
#define LINE_MAX 4096
static int config_parse_deps(
const char *filename,

View file

@ -36,7 +36,6 @@
#define COMMENTS "#;\n"
#define NEWLINES "\n\r"
#define LINE_MAX 4096
typedef enum RunlevelType {
RUNLEVEL_UP,

View file

@ -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;

View file

@ -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);