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