]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/parse-util.h
Merge pull request #4844 from hadess/sensor-quirks
[thirdparty/systemd.git] / src / basic / parse-util.h
CommitLineData
6bedfcbb
LP
1#pragma once
2
3/***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22#include <inttypes.h>
11c3a366
TA
23#include <limits.h>
24#include <stddef.h>
25#include <stdint.h>
6bedfcbb
LP
26#include <sys/types.h>
27
28#include "macro.h"
29
c7f1808a
LP
30#define MODE_INVALID ((mode_t) -1)
31
6bedfcbb
LP
32int parse_boolean(const char *v) _pure_;
33int parse_pid(const char *s, pid_t* ret_pid);
34int parse_mode(const char *s, mode_t *ret);
6ad623a3 35int parse_ifindex(const char *s, int *ret);
6bedfcbb
LP
36
37int parse_size(const char *t, uint64_t base, uint64_t *size);
28cb17ef 38int parse_range(const char *t, unsigned *lower, unsigned *upper);
6bedfcbb
LP
39
40#define FORMAT_BYTES_MAX 8
41char *format_bytes(char *buf, size_t l, uint64_t t);
42
43int safe_atou(const char *s, unsigned *ret_u);
44int safe_atoi(const char *s, int *ret_i);
45int safe_atollu(const char *s, unsigned long long *ret_u);
46int safe_atolli(const char *s, long long int *ret_i);
47
48int safe_atou8(const char *s, uint8_t *ret);
49
50int safe_atou16(const char *s, uint16_t *ret);
51int safe_atoi16(const char *s, int16_t *ret);
52
53static inline int safe_atou32(const char *s, uint32_t *ret_u) {
54 assert_cc(sizeof(uint32_t) == sizeof(unsigned));
55 return safe_atou(s, (unsigned*) ret_u);
56}
57
58static inline int safe_atoi32(const char *s, int32_t *ret_i) {
59 assert_cc(sizeof(int32_t) == sizeof(int));
60 return safe_atoi(s, (int*) ret_i);
61}
62
63static inline int safe_atou64(const char *s, uint64_t *ret_u) {
64 assert_cc(sizeof(uint64_t) == sizeof(unsigned long long));
65 return safe_atollu(s, (unsigned long long*) ret_u);
66}
67
68static inline int safe_atoi64(const char *s, int64_t *ret_i) {
69 assert_cc(sizeof(int64_t) == sizeof(long long int));
70 return safe_atolli(s, (long long int*) ret_i);
71}
72
73#if LONG_MAX == INT_MAX
74static inline int safe_atolu(const char *s, unsigned long *ret_u) {
75 assert_cc(sizeof(unsigned long) == sizeof(unsigned));
76 return safe_atou(s, (unsigned*) ret_u);
77}
78static inline int safe_atoli(const char *s, long int *ret_u) {
79 assert_cc(sizeof(long int) == sizeof(int));
80 return safe_atoi(s, (int*) ret_u);
81}
82#else
83static inline int safe_atolu(const char *s, unsigned long *ret_u) {
84 assert_cc(sizeof(unsigned long) == sizeof(unsigned long long));
85 return safe_atollu(s, (unsigned long long*) ret_u);
86}
87static inline int safe_atoli(const char *s, long int *ret_u) {
88 assert_cc(sizeof(long int) == sizeof(long long int));
89 return safe_atolli(s, (long long int*) ret_u);
90}
91#endif
92
7c2da2ca
ZJS
93#if SIZE_MAX == UINT_MAX
94static inline int safe_atozu(const char *s, size_t *ret_u) {
95 assert_cc(sizeof(size_t) == sizeof(unsigned));
e4196edf 96 return safe_atou(s, (unsigned *) ret_u);
7c2da2ca
ZJS
97}
98#else
99static inline int safe_atozu(const char *s, size_t *ret_u) {
100 assert_cc(sizeof(size_t) == sizeof(long unsigned));
101 return safe_atolu(s, ret_u);
102}
103#endif
104
6bedfcbb 105int safe_atod(const char *s, double *ret_d);
436dd70f
HV
106
107int parse_fractional_part_u(const char **s, size_t digits, unsigned *res);
9184ca48 108
5124866d 109int parse_percent_unbounded(const char *p);
9184ca48 110int parse_percent(const char *p);
41bf0590
LP
111
112int parse_nice(const char *p, int *ret);
10452f7c
SS
113
114int parse_ip_port(const char *s, uint16_t *ret);