From d722d1b0e605be6b84f37053d05d43d40fe6d88c Mon Sep 17 00:00:00 2001 From: Vivien Didelot Date: Tue, 2 Oct 2018 18:13:06 -0400 Subject: [PATCH] i3-msg: check reply in quiet mode i3-msg currently exits right after sending the IPC message if the quiet flag is set. This means that if an error occurred when issuing a command, e.g. "i3-msg -q foobar", it gets silently ignored. What we really want is to just skip printing but still check the reply. At the same time, explicitly print the reply when we need to, instead of using an exit label. --- i3-msg/main.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/i3-msg/main.c b/i3-msg/main.c index 96edb2c3..9b34b062 100644 --- a/i3-msg/main.c +++ b/i3-msg/main.c @@ -246,9 +246,6 @@ int main(int argc, char *argv[]) { err(EXIT_FAILURE, "IPC: write()"); free(payload); - if (quiet) - return 0; - uint32_t reply_length; uint32_t reply_type; uint8_t *reply; @@ -275,8 +272,9 @@ int main(int argc, char *argv[]) { errx(EXIT_FAILURE, "IPC: Could not parse JSON reply."); } - /* NB: We still fall-through and print the reply, because even if one - * command failed, that doesn’t mean that all commands failed. */ + if (!quiet) { + printf("%.*s\n", reply_length, reply); + } } else if (reply_type == I3_IPC_REPLY_TYPE_CONFIG) { yajl_handle handle = yajl_alloc(&config_callbacks, NULL, NULL); yajl_status state = yajl_parse(handle, (const unsigned char *)reply, reply_length); @@ -289,12 +287,12 @@ int main(int argc, char *argv[]) { case yajl_status_error: errx(EXIT_FAILURE, "IPC: Could not parse JSON reply."); } - - goto exit; + } else { + if (!quiet) { + printf("%.*s\n", reply_length, reply); + } } - printf("%.*s\n", reply_length, reply); -exit: free(reply); close(sockfd);