]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/parse-util.h
parse-util: introduce parse_dev() helper
[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 32int parse_boolean(const char *v) _pure_;
fbcc7f41 33int parse_dev(const char *s, dev_t *ret);
6bedfcbb
LP
34int parse_pid(const char *s, pid_t* ret_pid);
35int parse_mode(const char *s, mode_t *ret);
6ad623a3 36int parse_ifindex(const char *s, int *ret);
6bedfcbb
LP
37
38int parse_size(const char *t, uint64_t base, uint64_t *size);
28cb17ef 39int parse_range(const char *t, unsigned *lower, unsigned *upper);
6bedfcbb
LP
40
41#define FORMAT_BYTES_MAX 8
42char *format_bytes(char *buf, size_t l, uint64_t t);
43
44int safe_atou(const char *s, unsigned *ret_u);
45int safe_atoi(const char *s, int *ret_i);
46int safe_atollu(const char *s, unsigned long long *ret_u);
47int safe_atolli(const char *s, long long int *ret_i);
48
49int safe_atou8(const char *s, uint8_t *ret);
50
51int safe_atou16(const char *s, uint16_t *ret);
52int safe_atoi16(const char *s, int16_t *ret);
53
54static inline int safe_atou32(const char *s, uint32_t *ret_u) {
55 assert_cc(sizeof(uint32_t) == sizeof(unsigned));
56 return safe_atou(s, (unsigned*) ret_u);
57}
58
59static inline int safe_atoi32(const char *s, int32_t *ret_i) {
60 assert_cc(sizeof(int32_t) == sizeof(int));
61 return safe_atoi(s, (int*) ret_i);
62}
63
64static inline int safe_atou64(const char *s, uint64_t *ret_u) {
65 assert_cc(sizeof(uint64_t) == sizeof(unsigned long long));
66 return safe_atollu(s, (unsigned long long*) ret_u);
67}
68
69static inline int safe_atoi64(const char *s, int64_t *ret_i) {
70 assert_cc(sizeof(int64_t) == sizeof(long long int));
71 return safe_atolli(s, (long long int*) ret_i);
72}
73
74#if LONG_MAX == INT_MAX
75static inline int safe_atolu(const char *s, unsigned long *ret_u) {
76 assert_cc(sizeof(unsigned long) == sizeof(unsigned));
77 return safe_atou(s, (unsigned*) ret_u);
78}
79static inline int safe_atoli(const char *s, long int *ret_u) {
80 assert_cc(sizeof(long int) == sizeof(int));
81 return safe_atoi(s, (int*) ret_u);
82}
83#else
84static inline int safe_atolu(const char *s, unsigned long *ret_u) {
85 assert_cc(sizeof(unsigned long) == sizeof(unsigned long long));
86 return safe_atollu(s, (unsigned long long*) ret_u);
87}
88static inline int safe_atoli(const char *s, long int *ret_u) {
89 assert_cc(sizeof(long int) == sizeof(long long int));
90 return safe_atolli(s, (long long int*) ret_u);
91}
92#endif
93
7c2da2ca
ZJS
94#if SIZE_MAX == UINT_MAX
95static inline int safe_atozu(const char *s, size_t *ret_u) {
96 assert_cc(sizeof(size_t) == sizeof(unsigned));
e4196edf 97 return safe_atou(s, (unsigned *) ret_u);
7c2da2ca
ZJS
98}
99#else
100static inline int safe_atozu(const char *s, size_t *ret_u) {
101 assert_cc(sizeof(size_t) == sizeof(long unsigned));
102 return safe_atolu(s, ret_u);
103}
104#endif
105
6bedfcbb 106int safe_atod(const char *s, double *ret_d);
436dd70f
HV
107
108int parse_fractional_part_u(const char **s, size_t digits, unsigned *res);
9184ca48 109
5124866d 110int parse_percent_unbounded(const char *p);
9184ca48 111int parse_percent(const char *p);
41bf0590
LP
112
113int parse_nice(const char *p, int *ret);
10452f7c
SS
114
115int parse_ip_port(const char *s, uint16_t *ret);