free(m->fds);
}
+ free(m->cmdline_array);
+
reset_containers(m);
free(m->root_container.signature);
return 0;
}
-const char *sd_bus_message_get_label(sd_bus_message *m) {
+int sd_bus_message_get_pid_starttime(sd_bus_message *m, uint64_t *usec) {
+ if (!m)
+ return -EINVAL;
+ if (m->pid_starttime <= 0)
+ return -ENOENT;
+
+ *usec = m->pid_starttime;
+ return 0;
+}
+
+const char *sd_bus_message_get_selinux_context(sd_bus_message *m) {
if (!m)
return NULL;
return m->label;
}
+int sd_bus_message_get_monotonic_timestamp(sd_bus_message *m, uint64_t *usec) {
+ if (!m)
+ return -EINVAL;
+
+ if (m->monotonic <= 0)
+ return -ENOENT;
+
+ *usec = m->monotonic;
+ return 0;
+}
+
+int sd_bus_message_get_realtime_timestamp(sd_bus_message *m, uint64_t *usec) {
+ if (!m)
+ return -EINVAL;
+
+ if (m->realtime <= 0)
+ return -ENOENT;
+
+ *usec = m->realtime;
+ return 0;
+}
+
+const char *sd_bus_message_get_comm(sd_bus_message *m) {
+ if (!m)
+ return NULL;
+
+ return m->comm;
+}
+
+const char *sd_bus_message_get_tid_comm(sd_bus_message *m) {
+ if (!m)
+ return NULL;
+
+ return m->tid_comm;
+}
+
+const char *sd_bus_message_get_exe(sd_bus_message *m) {
+ if (!m)
+ return NULL;
+
+ return m->exe;
+}
+
+int sd_bus_message_get_cmdline(sd_bus_message *m, char ***cmdline) {
+ size_t n, i;
+ const char *p;
+ bool first;
+
+ if (!m)
+ return -EINVAL;
+
+ if (!m->cmdline)
+ return -ENOENT;
+
+ for (p = m->cmdline, n = 0; p < m->cmdline + m->cmdline_length; p++)
+ if (*p == 0)
+ n++;
+
+ m->cmdline_array = new(char*, n + 1);
+ if (!m->cmdline_array)
+ return -ENOMEM;
+
+ for (p = m->cmdline, i = 0, first = true; p < m->cmdline + m->cmdline_length; p++) {
+ if (first)
+ m->cmdline_array[i++] = (char*) p;
+
+ first = *p == 0;
+ }
+
+ m->cmdline_array[i] = NULL;
+ *cmdline = m->cmdline_array;
+
+ return 0;
+}
+
int sd_bus_message_is_signal(sd_bus_message *m, const char *interface, const char *member) {
if (!m)
return -EINVAL;
int bus_message_seal(sd_bus_message *m, uint64_t serial) {
int r;
+ size_t l, a;
assert(m);
return r;
}
+ l = BUS_MESSAGE_FIELDS_SIZE(m);
+ a = ALIGN8(l) - l;
+
+ if (a > 0) {
+ /* Add padding at the end, since we know the body
+ * needs to start at an 8 byte alignment. */
+ void *p;
+
+ p = message_extend_fields(m, 1, a);
+ if (!p)
+ return -ENOMEM;
+
+ memset(p, 0, a);
+ m->header->fields_size -= a;
+ }
+
m->header->serial = serial;
m->sealed = true;
}
int bus_message_dump(sd_bus_message *m) {
+ char **cmdline = NULL;
unsigned level = 1;
int r;
printf("\tuid=%lu\n", (unsigned long) m->uid);
if (m->gid_valid)
printf("\tgid=%lu\n", (unsigned long) m->gid);
+ if (m->pid_starttime != 0)
+ printf("\tpid_starttime=%llu\n", (unsigned long long) m->pid_starttime);
+ if (m->monotonic != 0)
+ printf("\tmonotonic=%llu\n", (unsigned long long) m->monotonic);
+ if (m->realtime != 0)
+ printf("\trealtime=%llu\n", (unsigned long long) m->realtime);
+ if (m->exe)
+ printf("\texe=[%s]\n", m->exe);
+ if (m->comm)
+ printf("\tcomm=[%s]\n", m->comm);
+ if (m->tid_comm)
+ printf("\ttid_comm=[%s]\n", m->tid_comm);
+ if (m->label)
+ printf("\tlabel=[%s]\n", m->label);
+
+ if (sd_bus_message_get_cmdline(m, &cmdline) >= 0) {
+ char **c;
+
+ fputs("\tcmdline=[", stdout);
+ STRV_FOREACH(c, cmdline) {
+ if (c != cmdline)
+ putchar(' ');
+
+ fputs(*c, stdout);
+ }
+ fputs("]\n", stdout);
+ }
r = sd_bus_message_rewind(m, true);
if (r < 0) {