diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-05-16 03:30:35 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-05-16 03:30:35 -0400 |
commit | f3d855e9bc118f0b2fad8c1ff3e539ba77e1eabb (patch) | |
tree | 81d770bf1a020891743933cda842fe655d5707df /src/runesc.c | |
parent | eabb10d017c312c5fac5446fbac5a1c23af94ae3 (diff) | |
download | runes-f3d855e9bc118f0b2fad8c1ff3e539ba77e1eabb.tar.gz runes-f3d855e9bc118f0b2fad8c1ff3e539ba77e1eabb.zip |
add a message type for killing the daemon
and make ./runesc --kill-daemon send that message
Diffstat (limited to 'src/runesc.c')
-rw-r--r-- | src/runesc.c | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/src/runesc.c b/src/runesc.c index 7cbc456..dc4e69f 100644 --- a/src/runesc.c +++ b/src/runesc.c @@ -1,5 +1,6 @@ #include <stddef.h> #include <stdlib.h> +#include <string.h> #include "runes.h" @@ -8,33 +9,62 @@ extern char **environ; +static void runes_client_send_kill_daemon_message(int s); +static void runes_client_send_new_term_message(int s, int argc, char *argv[]); + int main (int argc, char *argv[]) { - char *name, *buf; + char *name; int s; - size_t len; + + name = runes_get_daemon_socket_name(); + s = runes_socket_client_open(name); + + if (argc > 1 && !strcmp(argv[1], "--kill-daemon")) { + runes_client_send_kill_daemon_message(s); + } + else { + runes_client_send_new_term_message(s, argc, argv); + } + + runes_socket_client_close(s); + +#ifdef RUNES_VALGRIND + free(name); +#endif + + return 0; +} + +static void runes_client_send_kill_daemon_message(int s) +{ + if (!runes_protocol_send_packet(s, RUNES_PROTOCOL_KILL_DAEMON, "", 0)) { + runes_warn("couldn't send packet"); + } +} + +static void runes_client_send_new_term_message(int s, int argc, char *argv[]) +{ struct runes_protocol_new_term_message msg; + char *buf; + size_t len; msg.argc = argc; msg.argv = argv; msg.envp = environ; msg.cwd = runes_getcwd(); - name = runes_get_daemon_socket_name(); - s = runes_socket_client_open(name); - if (!runes_protocol_create_new_term_message(&msg, &buf, &len)) { - runes_warn("couldn't create message"); - } - else { + if (runes_protocol_create_new_term_message(&msg, &buf, &len)) { if (!runes_protocol_send_packet(s, RUNES_PROTOCOL_NEW_TERM, buf, len)) { runes_warn("couldn't send packet"); - free(buf); } } + else { + runes_warn("couldn't create message"); + } +#ifdef RUNES_VALGRIND free(buf); free(msg.cwd); - runes_socket_client_close(s); - - return 0; +#endif } |