Branch data Line data Source code
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 : 20 : 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 : 20 : return !!memchr(valid, c, sizeof(valid));
31 : : }
32 : :
33 : 29382 : 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 : 29382 : return !!memchr(valid, c, sizeof(valid));
51 : : }
52 : :
53 : 24 : 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 : 24 : return !!memchr(valid, c, sizeof(valid));
67 : : }
68 : :
69 : 2500 : 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 : 2500 : return !!memchr(valid, c, sizeof(valid));
78 : : }
79 : :
80 : 1272 : int bus_type_get_alignment(char c) {
81 : :
82 [ + - + + : 1272 : switch (c) {
- ]
83 : 280 : case SD_BUS_TYPE_BYTE:
84 : : case SD_BUS_TYPE_SIGNATURE:
85 : : case SD_BUS_TYPE_VARIANT:
86 : 280 : return 1;
87 : :
88 : 0 : case SD_BUS_TYPE_INT16:
89 : : case SD_BUS_TYPE_UINT16:
90 : 0 : return 2;
91 : :
92 : 468 : 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 : 468 : return 4;
100 : :
101 : 524 : 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 : 524 : return 8;
109 : : }
110 : :
111 : 0 : return -EINVAL;
112 : : }
113 : :
114 : 656 : int bus_type_get_size(char c) {
115 : :
116 [ + - + + : 656 : switch (c) {
- ]
117 : 280 : case SD_BUS_TYPE_BYTE:
118 : 280 : return 1;
119 : :
120 : 0 : case SD_BUS_TYPE_INT16:
121 : : case SD_BUS_TYPE_UINT16:
122 : 0 : return 2;
123 : :
124 : 224 : 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 : 224 : return 4;
129 : :
130 : 152 : case SD_BUS_TYPE_INT64:
131 : : case SD_BUS_TYPE_UINT64:
132 : : case SD_BUS_TYPE_DOUBLE:
133 : 152 : return 8;
134 : : }
135 : :
136 : 0 : return -EINVAL;
137 : : }
|