-typedef struct {
- const char *types;
- unsigned n_struct;
- unsigned n_array;
-} TypeStack;
-
-static int type_stack_push(TypeStack *stack, unsigned max, unsigned *i, const char *types, unsigned n_struct, unsigned n_array) {
- assert(stack);
- assert(max > 0);
-
- if (*i >= max)
- return -EINVAL;
-
- stack[*i].types = types;
- stack[*i].n_struct = n_struct;
- stack[*i].n_array = n_array;
- (*i)++;
-
- return 0;
-}
-
-static int type_stack_pop(TypeStack *stack, unsigned max, unsigned *i, const char **types, unsigned *n_struct, unsigned *n_array) {
- assert(stack);
- assert(max > 0);
- assert(types);
- assert(n_struct);
- assert(n_array);
-
- if (*i <= 0)
- return 0;
-
- (*i)--;
- *types = stack[*i].types;
- *n_struct = stack[*i].n_struct;
- *n_array = stack[*i].n_array;
-
- return 1;
-}
-
-static int message_read_ap(sd_bus_message *m, const char *types, va_list ap) {