]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/libsystemd/sd-bus/bus-type.c
pkgconfig: define variables relative to ${prefix}/${rootprefix}/${sysconfdir}
[thirdparty/systemd.git] / src / libsystemd / sd-bus / bus-type.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #include <errno.h>
4
5 #include "sd-bus.h"
6
7 #include "bus-type.h"
8
9 bool bus_type_is_valid(char c) {
10 static const char valid[] = {
11 SD_BUS_TYPE_BYTE,
12 SD_BUS_TYPE_BOOLEAN,
13 SD_BUS_TYPE_INT16,
14 SD_BUS_TYPE_UINT16,
15 SD_BUS_TYPE_INT32,
16 SD_BUS_TYPE_UINT32,
17 SD_BUS_TYPE_INT64,
18 SD_BUS_TYPE_UINT64,
19 SD_BUS_TYPE_DOUBLE,
20 SD_BUS_TYPE_STRING,
21 SD_BUS_TYPE_OBJECT_PATH,
22 SD_BUS_TYPE_SIGNATURE,
23 SD_BUS_TYPE_ARRAY,
24 SD_BUS_TYPE_VARIANT,
25 SD_BUS_TYPE_STRUCT,
26 SD_BUS_TYPE_DICT_ENTRY,
27 SD_BUS_TYPE_UNIX_FD
28 };
29
30 return !!memchr(valid, c, sizeof(valid));
31 }
32
33 bool bus_type_is_valid_in_signature(char c) {
34 static const char valid[] = {
35 SD_BUS_TYPE_BYTE,
36 SD_BUS_TYPE_BOOLEAN,
37 SD_BUS_TYPE_INT16,
38 SD_BUS_TYPE_UINT16,
39 SD_BUS_TYPE_INT32,
40 SD_BUS_TYPE_UINT32,
41 SD_BUS_TYPE_INT64,
42 SD_BUS_TYPE_UINT64,
43 SD_BUS_TYPE_DOUBLE,
44 SD_BUS_TYPE_STRING,
45 SD_BUS_TYPE_OBJECT_PATH,
46 SD_BUS_TYPE_SIGNATURE,
47 SD_BUS_TYPE_ARRAY,
48 SD_BUS_TYPE_VARIANT,
49 SD_BUS_TYPE_STRUCT_BEGIN,
50 SD_BUS_TYPE_STRUCT_END,
51 SD_BUS_TYPE_DICT_ENTRY_BEGIN,
52 SD_BUS_TYPE_DICT_ENTRY_END,
53 SD_BUS_TYPE_UNIX_FD
54 };
55
56 return !!memchr(valid, c, sizeof(valid));
57 }
58
59 bool bus_type_is_basic(char c) {
60 static const char valid[] = {
61 SD_BUS_TYPE_BYTE,
62 SD_BUS_TYPE_BOOLEAN,
63 SD_BUS_TYPE_INT16,
64 SD_BUS_TYPE_UINT16,
65 SD_BUS_TYPE_INT32,
66 SD_BUS_TYPE_UINT32,
67 SD_BUS_TYPE_INT64,
68 SD_BUS_TYPE_UINT64,
69 SD_BUS_TYPE_DOUBLE,
70 SD_BUS_TYPE_STRING,
71 SD_BUS_TYPE_OBJECT_PATH,
72 SD_BUS_TYPE_SIGNATURE,
73 SD_BUS_TYPE_UNIX_FD
74 };
75
76 return !!memchr(valid, c, sizeof(valid));
77 }
78
79 bool bus_type_is_trivial(char c) {
80 static const char valid[] = {
81 SD_BUS_TYPE_BYTE,
82 SD_BUS_TYPE_BOOLEAN,
83 SD_BUS_TYPE_INT16,
84 SD_BUS_TYPE_UINT16,
85 SD_BUS_TYPE_INT32,
86 SD_BUS_TYPE_UINT32,
87 SD_BUS_TYPE_INT64,
88 SD_BUS_TYPE_UINT64,
89 SD_BUS_TYPE_DOUBLE
90 };
91
92 return !!memchr(valid, c, sizeof(valid));
93 }
94
95 bool bus_type_is_container(char c) {
96 static const char valid[] = {
97 SD_BUS_TYPE_ARRAY,
98 SD_BUS_TYPE_VARIANT,
99 SD_BUS_TYPE_STRUCT,
100 SD_BUS_TYPE_DICT_ENTRY
101 };
102
103 return !!memchr(valid, c, sizeof(valid));
104 }
105
106 int bus_type_get_alignment(char c) {
107
108 switch (c) {
109 case SD_BUS_TYPE_BYTE:
110 case SD_BUS_TYPE_SIGNATURE:
111 case SD_BUS_TYPE_VARIANT:
112 return 1;
113
114 case SD_BUS_TYPE_INT16:
115 case SD_BUS_TYPE_UINT16:
116 return 2;
117
118 case SD_BUS_TYPE_BOOLEAN:
119 case SD_BUS_TYPE_INT32:
120 case SD_BUS_TYPE_UINT32:
121 case SD_BUS_TYPE_STRING:
122 case SD_BUS_TYPE_OBJECT_PATH:
123 case SD_BUS_TYPE_ARRAY:
124 case SD_BUS_TYPE_UNIX_FD:
125 return 4;
126
127 case SD_BUS_TYPE_INT64:
128 case SD_BUS_TYPE_UINT64:
129 case SD_BUS_TYPE_DOUBLE:
130 case SD_BUS_TYPE_STRUCT:
131 case SD_BUS_TYPE_STRUCT_BEGIN:
132 case SD_BUS_TYPE_DICT_ENTRY:
133 case SD_BUS_TYPE_DICT_ENTRY_BEGIN:
134 return 8;
135 }
136
137 return -EINVAL;
138 }
139
140 int bus_type_get_size(char c) {
141
142 switch (c) {
143 case SD_BUS_TYPE_BYTE:
144 return 1;
145
146 case SD_BUS_TYPE_INT16:
147 case SD_BUS_TYPE_UINT16:
148 return 2;
149
150 case SD_BUS_TYPE_BOOLEAN:
151 case SD_BUS_TYPE_INT32:
152 case SD_BUS_TYPE_UINT32:
153 case SD_BUS_TYPE_UNIX_FD:
154 return 4;
155
156 case SD_BUS_TYPE_INT64:
157 case SD_BUS_TYPE_UINT64:
158 case SD_BUS_TYPE_DOUBLE:
159 return 8;
160 }
161
162 return -EINVAL;
163 }