- write_token(fd, PROTO_VERSION);
- write_token(fd, PATH_MAX);
- write_token(fd, ARG_MAX);
- write_token(fd, ctx->from.uid);
- write_token(fd, ctx->to.uid);
- bin_size = strlen(ctx->from.bin) + 1;
- write_token(fd, bin_size);
- len = write(fd, ctx->from.bin, bin_size);
- if (len != bin_size) {
- PLOGE("write(bin)");
- return -1;
- }
- cmd = get_command(&ctx->to);
- cmd_size = strlen(cmd) + 1;
- write_token(fd, cmd_size);
- len = write(fd, cmd, cmd_size);
- if (len != cmd_size) {
- PLOGE("write(cmd)");
- return -1;
- }
+#define write_string_data(fd, name, data) \
+do { \
+ write_data(fd, name, strlen(name)); \
+ write_data(fd, data, strlen(data)); \
+} while (0)
+
+// stringify everything.
+#define write_token(fd, name, data) \
+do { \
+ char buf[16]; \
+ snprintf(buf, sizeof(buf), "%d", data); \
+ write_string_data(fd, name, buf); \
+} while (0)
+
+ write_token(fd, "version", PROTO_VERSION);
+ write_token(fd, "binary.version", VERSION_CODE);
+ write_token(fd, "pid", ctx->from.pid);
+ write_string_data(fd, "from.name", ctx->from.name);
+ write_string_data(fd, "to.name", ctx->to.name);
+ write_token(fd, "from.uid", ctx->from.uid);
+ write_token(fd, "to.uid", ctx->to.uid);
+ write_string_data(fd, "from.bin", ctx->from.bin);
+ // TODO: Fix issue where not using -c does not result a in a command
+ write_string_data(fd, "command", get_command(&ctx->to));
+ write_token(fd, "eof", PROTO_VERSION);