]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd/sd-bus/bus-type.c
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / libsystemd / sd-bus / bus-type.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
de1c301e
LP
2/***
3 This file is part of systemd.
4
5 Copyright 2013 Lennart Poettering
6
7 systemd is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
de1c301e
LP
21#include "bus-type.h"
22
23bool bus_type_is_valid(char c) {
24 static const char valid[] = {
25 SD_BUS_TYPE_BYTE,
26 SD_BUS_TYPE_BOOLEAN,
27 SD_BUS_TYPE_INT16,
28 SD_BUS_TYPE_UINT16,
29 SD_BUS_TYPE_INT32,
30 SD_BUS_TYPE_UINT32,
31 SD_BUS_TYPE_INT64,
32 SD_BUS_TYPE_UINT64,
33 SD_BUS_TYPE_DOUBLE,
34 SD_BUS_TYPE_STRING,
35 SD_BUS_TYPE_OBJECT_PATH,
36 SD_BUS_TYPE_SIGNATURE,
37 SD_BUS_TYPE_ARRAY,
38 SD_BUS_TYPE_VARIANT,
39 SD_BUS_TYPE_STRUCT,
40 SD_BUS_TYPE_DICT_ENTRY,
41 SD_BUS_TYPE_UNIX_FD
42 };
43
44 return !!memchr(valid, c, sizeof(valid));
45}
46
47bool bus_type_is_valid_in_signature(char c) {
48 static const char valid[] = {
49 SD_BUS_TYPE_BYTE,
50 SD_BUS_TYPE_BOOLEAN,
51 SD_BUS_TYPE_INT16,
52 SD_BUS_TYPE_UINT16,
53 SD_BUS_TYPE_INT32,
54 SD_BUS_TYPE_UINT32,
55 SD_BUS_TYPE_INT64,
56 SD_BUS_TYPE_UINT64,
57 SD_BUS_TYPE_DOUBLE,
58 SD_BUS_TYPE_STRING,
59 SD_BUS_TYPE_OBJECT_PATH,
60 SD_BUS_TYPE_SIGNATURE,
61 SD_BUS_TYPE_ARRAY,
62 SD_BUS_TYPE_VARIANT,
63 SD_BUS_TYPE_STRUCT_BEGIN,
64 SD_BUS_TYPE_STRUCT_END,
65 SD_BUS_TYPE_DICT_ENTRY_BEGIN,
66 SD_BUS_TYPE_DICT_ENTRY_END,
67 SD_BUS_TYPE_UNIX_FD
68 };
69
70 return !!memchr(valid, c, sizeof(valid));
71}
72
73bool bus_type_is_basic(char c) {
74 static const char valid[] = {
75 SD_BUS_TYPE_BYTE,
76 SD_BUS_TYPE_BOOLEAN,
77 SD_BUS_TYPE_INT16,
78 SD_BUS_TYPE_UINT16,
79 SD_BUS_TYPE_INT32,
80 SD_BUS_TYPE_UINT32,
81 SD_BUS_TYPE_INT64,
82 SD_BUS_TYPE_UINT64,
83 SD_BUS_TYPE_DOUBLE,
84 SD_BUS_TYPE_STRING,
85 SD_BUS_TYPE_OBJECT_PATH,
86 SD_BUS_TYPE_SIGNATURE,
87 SD_BUS_TYPE_UNIX_FD
88 };
89
90 return !!memchr(valid, c, sizeof(valid));
91}
92
b3af9646
LP
93bool bus_type_is_trivial(char c) {
94 static const char valid[] = {
95 SD_BUS_TYPE_BYTE,
96 SD_BUS_TYPE_BOOLEAN,
97 SD_BUS_TYPE_INT16,
98 SD_BUS_TYPE_UINT16,
99 SD_BUS_TYPE_INT32,
100 SD_BUS_TYPE_UINT32,
101 SD_BUS_TYPE_INT64,
102 SD_BUS_TYPE_UINT64,
103 SD_BUS_TYPE_DOUBLE
104 };
105
106 return !!memchr(valid, c, sizeof(valid));
107}
108
de1c301e
LP
109bool bus_type_is_container(char c) {
110 static const char valid[] = {
111 SD_BUS_TYPE_ARRAY,
112 SD_BUS_TYPE_VARIANT,
113 SD_BUS_TYPE_STRUCT,
114 SD_BUS_TYPE_DICT_ENTRY
115 };
116
117 return !!memchr(valid, c, sizeof(valid));
118}
119
120int bus_type_get_alignment(char c) {
121
122 switch (c) {
123 case SD_BUS_TYPE_BYTE:
124 case SD_BUS_TYPE_SIGNATURE:
125 case SD_BUS_TYPE_VARIANT:
126 return 1;
127
128 case SD_BUS_TYPE_INT16:
129 case SD_BUS_TYPE_UINT16:
130 return 2;
131
132 case SD_BUS_TYPE_BOOLEAN:
133 case SD_BUS_TYPE_INT32:
134 case SD_BUS_TYPE_UINT32:
135 case SD_BUS_TYPE_STRING:
136 case SD_BUS_TYPE_OBJECT_PATH:
137 case SD_BUS_TYPE_ARRAY:
138 case SD_BUS_TYPE_UNIX_FD:
139 return 4;
140
141 case SD_BUS_TYPE_INT64:
142 case SD_BUS_TYPE_UINT64:
143 case SD_BUS_TYPE_DOUBLE:
144 case SD_BUS_TYPE_STRUCT:
145 case SD_BUS_TYPE_STRUCT_BEGIN:
146 case SD_BUS_TYPE_DICT_ENTRY:
147 case SD_BUS_TYPE_DICT_ENTRY_BEGIN:
148 return 8;
149 }
150
151 return -EINVAL;
152}
153
154int bus_type_get_size(char c) {
155
156 switch (c) {
157 case SD_BUS_TYPE_BYTE:
158 return 1;
159
160 case SD_BUS_TYPE_INT16:
161 case SD_BUS_TYPE_UINT16:
162 return 2;
163
164 case SD_BUS_TYPE_BOOLEAN:
165 case SD_BUS_TYPE_INT32:
166 case SD_BUS_TYPE_UINT32:
167 case SD_BUS_TYPE_UNIX_FD:
168 return 4;
169
170 case SD_BUS_TYPE_INT64:
171 case SD_BUS_TYPE_UINT64:
172 case SD_BUS_TYPE_DOUBLE:
173 return 8;
174 }
175
176 return -EINVAL;
177}