struct bus_container {
char enclosing;
+ bool need_offsets:1;
+ /* Indexes into the signature string */
unsigned index, saved_index;
-
char *signature;
- uint32_t *array_size;
- size_t before, begin;
+ size_t before, begin, end;
- size_t *offsets;
- size_t n_offsets, n_allocated;
+ /* dbus1: pointer to the array size value, if this is a value */
+ uint32_t *array_size;
- bool need_offsets;
+ /* gvariant: list of offsets to end of children if this is struct/dict entry/array */
+ size_t *offsets, n_offsets, offsets_allocated, offset_index;
+ size_t item_size;
};
struct bus_header {
void *data;
size_t size;
size_t mapped;
+ size_t allocated;
int memfd;
bool free_this:1;
bool munmap_this:1;
bool free_fds:1;
bool release_kdbus:1;
bool poisoned:1;
- bool is_gvariant:1;
struct bus_header *header;
struct bus_body_part body;
struct bus_container root_container, *containers;
unsigned n_containers;
+ size_t containers_allocated;
struct iovec *iovec;
struct iovec iovec_fixed[2];
return (uint8_t*) m->header + sizeof(struct bus_header);
}
-int bus_message_seal(sd_bus_message *m, uint64_t serial);
+static inline bool BUS_MESSAGE_IS_GVARIANT(sd_bus_message *m) {
+ return m->header->version == 2;
+}
+
+int bus_message_seal(sd_bus_message *m, uint64_t serial, usec_t timeout);
int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz);
int bus_message_read_strv_extend(sd_bus_message *m, char ***l);
int bus_message_to_errno(sd_bus_message *m);
int bus_message_new_synthetic_error(sd_bus *bus, uint64_t serial, const sd_bus_error *e, sd_bus_message **m);
+
+int bus_message_remarshal(sd_bus *bus, sd_bus_message **m);
+
+int bus_message_append_sender(sd_bus_message *m, const char *sender);