From dcbc8bc4b79c3870a780691485f24a50cd3dfcb0 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Mon, 4 May 2020 19:32:20 +0200 Subject: [PATCH] Less things in lkt --- src/main/lkt.c | 94 ++++++++++++++------------------------------------ 1 file changed, 25 insertions(+), 69 deletions(-) diff --git a/src/main/lkt.c b/src/main/lkt.c index 5494caa6..0d27efe2 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -80,7 +80,6 @@ read_socket(FILE *sock, char *buff, size_t max_len) size_t i, len; for (i = 0; i < max_len; ++i) { len = fread(buff + i, sizeof(char), 1, sock); - if (buff[i] == '\n' || len != 1) return i; } @@ -134,8 +133,8 @@ create_socket(const char *host, const char *port) if (cx <= 0 || connect(cx, &sock, sock_len)) exit(EXIT_FAILURE); - assert(socket_desc = fdopen(cx, "r+")); - + socket_desc = fdopen(cx, "r+"); + fail_if(!socket_desc, "Failed to connect to lektord"); return socket_desc; } @@ -148,8 +147,7 @@ lkt_connect(void) FILE *sock = create_socket(host, port); recv_len = read_socket(sock, buff, LKT_MESSAGE_MAX); - assert(recv_len > 0); - + fail_if(recv_len == 0, "Failed to connect to lektord"); return sock; } @@ -162,6 +160,20 @@ lkt_skip_key(char *buffer) return ret + len; } +static inline void +send_cmd_with_uri(FILE *sock, char *cmd, int argc, const char **argv) +{ + int i; + char buf[LKT_MESSAGE_MAX] = {0}; + for (i = 1; i < argc - 1; ++i) { + strncat(buf, argv[i], LKT_MESSAGE_MAX - 1); + strncat(buf, " ", LKT_MESSAGE_MAX - 1); + } + strncat(buf, argv[i], LKT_MESSAGE_MAX - 1); + strncat(buf, "\n", LKT_MESSAGE_MAX - 1); + (void) write_socket_format(sock, "%s %s://%s", cmd, argv[0], buf); +} + /* Functions implementing options. */ #define just_send(func, msg) /* Just send a simple string functions */ \ @@ -407,7 +419,8 @@ queue_pop__(struct lkt_cmd_args *args) sock = lkt_connect(); if (!songid) goto error; - exit(write_socket_format(sock, "next\ndeleteid %d\n", songid)); + write_socket_format(sock, "next\ndeleteid %d\n", songid); + exit_with_status(sock, buff); error: exit(EXIT_FAILURE); } @@ -509,20 +522,6 @@ queue_delete__(struct lkt_cmd_args *args) fail("Invalid argument"); } -static inline void -send_cmd_with_uri(FILE *sock, char *cmd, int argc, const char **argv) -{ - int i; - char buf[LKT_MESSAGE_MAX] = {0}; - for (i = 1; i < argc - 1; ++i) { - strncat(buf, argv[i], LKT_MESSAGE_MAX - 1); - strncat(buf, " ", LKT_MESSAGE_MAX - 1); - } - strncat(buf, argv[i], LKT_MESSAGE_MAX - 1); - strncat(buf, "\n", LKT_MESSAGE_MAX - 1); - (void) write_socket_format(sock, "%s %s://%s", cmd, argv[0], buf); -} - noreturn void queue_add__(struct lkt_cmd_args *args) { @@ -678,27 +677,11 @@ queue_list__(struct lkt_cmd_args *args) noreturn void plt_add__(struct lkt_cmd_args *args) { - int i; char buff[2]; FILE *sock = lkt_connect(); - fail_if(args->argc < 3, "Invalid argument, need at least three arguments: plt add <plt> <query>"); fail_if(!lkt_valid_type(args->argv[1]), "Invalid argument, type for the query is invalid"); - - (void) write_socket(sock, "playlistadd ", strlen("playlistadd ")); - (void) write_socket(sock, args->argv[0], strlen(args->argv[0])); - (void) write_socket(sock, " ", sizeof(char)); - (void) write_socket(sock, args->argv[1], strlen(args->argv[1])); - (void) write_socket(sock, "://", 3 * sizeof(char)); - - for (i = 2; i < args->argc - 1; ++i) { - (void) write_socket(sock, args->argv[i], strlen(args->argv[i])); - (void) write_socket(sock, " ", sizeof(char)); - } - - /* Here we have `i == argc - 1`. */ - (void) write_socket(sock, args->argv[i], strlen(args->argv[i])); - (void) write_socket(sock, "\n", sizeof(char)); + send_cmd_with_uri(sock, "playlistadd", args->argc, args->argv); exit_with_status(sock, buff); } @@ -707,22 +690,8 @@ plt_delete__(struct lkt_cmd_args *args) { FILE *sock = lkt_connect(); char buff[2]; - int i; - fail_if(args->argc < 1, "Invalid argument"); - - (void) write_socket(sock, "playlistdelete ", strlen("playlistdelete ")); - (void) write_socket(sock, args->argv[0], strlen(args->argv[0])); - (void) write_socket(sock, " ", sizeof(char)); - - for (i = 1; i < args->argc - 1; ++i) { - (void) write_socket(sock, args->argv[i], strlen(args->argv[i])); - (void) write_socket(sock, " ", sizeof(char)); - } - - /* Here we have `i == argc - 1`. */ - (void) write_socket(sock, args->argv[i], strlen(args->argv[i])); - (void) write_socket(sock, "\n", sizeof(char)); + send_cmd_with_uri(sock, "playlistdelete", args->argc, args->argv); exit_with_status(sock, buff); } @@ -730,14 +699,9 @@ noreturn void plt_destroy__(struct lkt_cmd_args *args) { fail_if(args->argc != 1, "Invalid argument"); - FILE *sock = lkt_connect(); char buff[2]; - const char *name = args->argv[0]; - - (void) write_socket(sock, "rm ", 3 * sizeof(char)); - (void) write_socket(sock, name, strlen(name)); - (void) write_socket(sock, "\n", sizeof(char)); + write_socket_format(sock, "rm %s\n", args->argv[0]); exit_with_status(sock, buff); } @@ -748,11 +712,7 @@ plt_create__(struct lkt_cmd_args *args) FILE *sock = lkt_connect(); char buff[2]; - const char *name = args->argv[0]; - - (void) write_socket(sock, "playlistadd ", strlen("playlistadd ")); - (void) write_socket(sock, name, strlen(name)); - (void) write_socket(sock, "\n", sizeof(char)); + write_socket_format(sock, "playlistadd %s\n", args->argv[0]); exit_with_status(sock, buff); } @@ -914,16 +874,12 @@ parse_args(args_t *args, int argc, const char **argv) args->argc = argc - (got + 1); } -/* Functions that make a command happen on lektor. */ - -/* Playlist functions. */ - int main(int argc, const char **argv) { executable_name = "lkt"; - assert(NULL != setlocale(LC_ALL, "en_US.UTF-8")); /* BECAUSE! */ - assert(!signal(SIGPIPE, sigpipe__)); /* Argument checks. */ + assert(NULL != setlocale(LC_ALL, "en_US.UTF-8")); /* BECAUSE! */ + assert(!signal(SIGPIPE, sigpipe__)); args_t args = { .host = "localhost", -- GitLab