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