65 struct blob_attr* attr,
68 switch(blob_id(attr)) {
69 case BLOBMSG_TYPE_INT8:
70 amxc_var_set(int8_t, var, *(int8_t*) data);
73 case BLOBMSG_TYPE_INT16:
74 amxc_var_set(int16_t, var, (int16_t) be16_to_cpu(*(uint16_t*) data));
77 case BLOBMSG_TYPE_INT32:
78 amxc_var_set(int32_t, var, (int32_t) be32_to_cpu(*(uint32_t*) data));
81 case BLOBMSG_TYPE_INT64:
82 amxc_var_set(int64_t, var, (int64_t) be64_to_cpu(*(uint64_t*) data));
85 case BLOBMSG_TYPE_DOUBLE: {
87 v.
u64 = be64_to_cpu(*(uint64_t*) data);
88 amxc_var_set(
double, var, v.
d);
92 case BLOBMSG_TYPE_STRING:
93 amxc_var_set(cstring_t, var, (
const char*) data);
96 case BLOBMSG_TYPE_ARRAY:
97 amxc_var_set_type(var, AMXC_VAR_ID_LIST);
101 case BLOBMSG_TYPE_TABLE:
102 amxc_var_set_type(var, AMXC_VAR_ID_HTABLE);
112 struct blob_attr* attr,
118 if(!blobmsg_check_attr(attr,
false)) {
123 if(blobmsg_name(attr)[0] != 0) {
124 var = amxc_var_add_new_key(var, blobmsg_name(attr));
131 data = blobmsg_data(attr);
132 len = blobmsg_data_len(attr);
139 struct blob_attr* attr,
142 struct blob_attr* pos;
144 __blob_for_each_attr(pos, attr, rem) {
153 struct blob_attr* attr,
156 struct blob_attr* pos;
158 __blob_for_each_attr(pos, attr, rem) {
159 amxc_var_t* item = amxc_var_add_new(var);
168 struct blob_buf* b) {
171 switch(amxc_var_type_of(data)) {
172 case AMXC_VAR_ID_BOOL: {
173 blobmsg_add_u8(b, key, (uint8_t) amxc_var_constcast(
bool, data));
177 case AMXC_VAR_ID_INT8: {
178 blobmsg_add_u8(b, key, (uint8_t) amxc_var_constcast(int8_t, data));
181 case AMXC_VAR_ID_UINT8: {
182 if(amxc_var_constcast(uint8_t, data) > INT8_MAX) {
183 blobmsg_add_u16(b, key, (uint16_t) amxc_var_constcast(uint8_t, data));
185 blobmsg_add_u8(b, key, (uint8_t) amxc_var_constcast(uint8_t, data));
189 case AMXC_VAR_ID_INT16: {
190 blobmsg_add_u16(b, key, (uint16_t) amxc_var_constcast(int16_t, data));
193 case AMXC_VAR_ID_UINT16: {
194 if(amxc_var_constcast(uint16_t, data) > INT16_MAX) {
195 blobmsg_add_u32(b, key, (uint32_t) amxc_var_constcast(uint16_t, data));
197 blobmsg_add_u16(b, key, (uint16_t) amxc_var_constcast(uint16_t, data));
201 case AMXC_VAR_ID_INT32: {
202 blobmsg_add_u32(b, key, (uint32_t) amxc_var_constcast(int32_t, data));
205 case AMXC_VAR_ID_UINT32: {
206 if(amxc_var_constcast(uint32_t, data) > INT32_MAX) {
207 blobmsg_add_u64(b, key, (uint64_t) amxc_var_constcast(uint32_t, data));
209 blobmsg_add_u32(b, key, (uint32_t) amxc_var_constcast(uint32_t, data));
213 case AMXC_VAR_ID_INT64: {
214 blobmsg_add_u64(b, key, (uint64_t) amxc_var_constcast(int64_t, data));
217 case AMXC_VAR_ID_UINT64: {
218 blobmsg_add_u64(b, key, (uint64_t) amxc_var_constcast(uint64_t, data));
222 case AMXC_VAR_ID_HTABLE: {
223 const amxc_htable_t* table = amxc_var_constcast(amxc_htable_t, data);
224 c = blobmsg_open_table(b, key);
226 blobmsg_close_table(b, c);
230 case AMXC_VAR_ID_LIST: {
231 const amxc_llist_t* list = amxc_var_constcast(amxc_llist_t, data);
232 c = blobmsg_open_array(b, key);
234 blobmsg_close_array(b, c);
239 char*
string = amxc_var_dyncast(cstring_t, data);
240 blobmsg_add_string(b, key,
string == NULL ?
"" :
string);
250 struct blob_buf* b) {
253 amxc_htable_for_each(it, table) {
254 const char* key = amxc_htable_it_get_key(it);
255 amxc_var_t* data = amxc_var_from_htable_it(it);
266 struct blob_buf* b) {
269 amxc_llist_for_each(it, list) {
270 amxc_var_t* data = amxc_var_from_llist_it(it);
static void amxb_ubus_set_var(amxc_var_t *var, struct blob_attr *attr, void *data, int len)
int PRIVATE amxb_ubus_format_blob_array(const amxc_llist_t *list, struct blob_buf *b)
int PRIVATE amxb_ubus_parse_blob(amxc_var_t *var, struct blob_attr *attr, bool table)
int PRIVATE amxb_ubus_format_blob_table(const amxc_htable_t *table, struct blob_buf *b)
union _ubus_double ubus_double_t
int PRIVATE amxb_ubus_format_blob(amxc_var_t *data, const char *key, struct blob_buf *b)
int PRIVATE amxb_ubus_parse_blob_array(amxc_var_t *var, struct blob_attr *attr, int len)
int PRIVATE amxb_ubus_parse_blob_table(amxc_var_t *var, struct blob_attr *attr, int len)