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