]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/libsystemd/sd-bus/bus-type.c
Merge pull request #11827 from keszybz/pkgconfig-variables
[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_basic(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_UNIX_FD
48 };
49
50 return !!memchr(valid, c, sizeof(valid));
51 }
52
53 bool bus_type_is_trivial(char c) {
54 static const char valid[] = {
55 SD_BUS_TYPE_BYTE,
56 SD_BUS_TYPE_BOOLEAN,
57 SD_BUS_TYPE_INT16,
58 SD_BUS_TYPE_UINT16,
59 SD_BUS_TYPE_INT32,
60 SD_BUS_TYPE_UINT32,
61 SD_BUS_TYPE_INT64,
62 SD_BUS_TYPE_UINT64,
63 SD_BUS_TYPE_DOUBLE
64 };
65
66 return !!memchr(valid, c, sizeof(valid));
67 }
68
69 bool bus_type_is_container(char c) {
70 static const char valid[] = {
71 SD_BUS_TYPE_ARRAY,
72 SD_BUS_TYPE_VARIANT,
73 SD_BUS_TYPE_STRUCT,
74 SD_BUS_TYPE_DICT_ENTRY
75 };
76
77 return !!memchr(valid, c, sizeof(valid));
78 }
79
80 int bus_type_get_alignment(char c) {
81
82 switch (c) {
83 case SD_BUS_TYPE_BYTE:
84 case SD_BUS_TYPE_SIGNATURE:
85 case SD_BUS_TYPE_VARIANT:
86 return 1;
87
88 case SD_BUS_TYPE_INT16:
89 case SD_BUS_TYPE_UINT16:
90 return 2;
91
92 case SD_BUS_TYPE_BOOLEAN:
93 case SD_BUS_TYPE_INT32:
94 case SD_BUS_TYPE_UINT32:
95 case SD_BUS_TYPE_STRING:
96 case SD_BUS_TYPE_OBJECT_PATH:
97 case SD_BUS_TYPE_ARRAY:
98 case SD_BUS_TYPE_UNIX_FD:
99 return 4;
100
101 case SD_BUS_TYPE_INT64:
102 case SD_BUS_TYPE_UINT64:
103 case SD_BUS_TYPE_DOUBLE:
104 case SD_BUS_TYPE_STRUCT:
105 case SD_BUS_TYPE_STRUCT_BEGIN:
106 case SD_BUS_TYPE_DICT_ENTRY:
107 case SD_BUS_TYPE_DICT_ENTRY_BEGIN:
108 return 8;
109 }
110
111 return -EINVAL;
112 }
113
114 int bus_type_get_size(char c) {
115
116 switch (c) {
117 case SD_BUS_TYPE_BYTE:
118 return 1;
119
120 case SD_BUS_TYPE_INT16:
121 case SD_BUS_TYPE_UINT16:
122 return 2;
123
124 case SD_BUS_TYPE_BOOLEAN:
125 case SD_BUS_TYPE_INT32:
126 case SD_BUS_TYPE_UINT32:
127 case SD_BUS_TYPE_UNIX_FD:
128 return 4;
129
130 case SD_BUS_TYPE_INT64:
131 case SD_BUS_TYPE_UINT64:
132 case SD_BUS_TYPE_DOUBLE:
133 return 8;
134 }
135
136 return -EINVAL;
137 }