From: Vivien Didelot Date: Tue, 2 Oct 2018 22:13:06 +0000 (-0400) Subject: i3-msg: check reply in quiet mode X-Git-Tag: 4.16~25^2~1 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d722d1b0e605be6b84f37053d05d43d40fe6d88c;p=i3%2Fi3 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. --- 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);