diff --git a/src/main/lkt.c b/src/main/lkt.c index 0ec6f25bf6141901f63b5f6cc027375eb58b7335..5d8647b6f637ec98d5a15ef2a609c1799b7f5e78 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -1,5 +1,6 @@ #define _POSIX_C_SOURCE 200809L +#include <lektor/defines.h> #include <lektor/net.h> #include <lektor/cmd.h> #include <arpa/inet.h> @@ -221,11 +222,11 @@ create_socket(const char *host, const char *port) static FILE * lkt_connect(void) { - char buff[1024]; - size_t buff_len = 1024, recv_len; + char buff[LKT_MESSAGE_MAX]; + size_t recv_len; FILE *sock = create_socket(host, port); - recv_len = read_socket(sock, buff, buff_len); + recv_len = read_socket(sock, buff, LKT_MESSAGE_MAX); assert(recv_len > 0); @@ -254,8 +255,8 @@ clear__(struct lkt_cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the clear command takes no arguments"); - static const char *const cmd__ = "clear\nclose\n"; - lkt_send_and_exit(cmd__, strlen(cmd__)); + static const char cmd__[] = "clear\nclose\n"; + lkt_send_and_exit(cmd__, sizeof(cmd__)); } @@ -264,8 +265,8 @@ next__(struct lkt_cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the next command takes no arguments"); - static const char *const cmd__ = "next\nclose\n"; - lkt_send_and_exit(cmd__, strlen(cmd__)); + static const char cmd__[] = "next\nclose\n"; + lkt_send_and_exit(cmd__, sizeof(cmd__)); /* In bytes. */ } noreturn void @@ -273,8 +274,17 @@ prev__(struct lkt_cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the previous command takes no arguments"); - static const char *const cmd__ = "previous\nclose\n"; - lkt_send_and_exit(cmd__, strlen(cmd__)); + static const char cmd__[] = "previous\nclose\n"; + lkt_send_and_exit(cmd__, sizeof(cmd__)); /* In bytes. */ +} + +noreturn void +stop__(struct lkt_cmd_args *args) +{ + if (args->argc != 0) + fail("Invalid argument, the stop command takes no arguments"); + static const char cmd__[] = "stop\nclose\n"; + lkt_send_and_exit(cmd__, sizeof(cmd__)); /* In bytes. */ } noreturn void @@ -287,22 +297,21 @@ play__(struct lkt_cmd_args *args) if (args->argc != 0) pos = atoi(args->argv[0]); - static const char *const status__ = "status\n"; - static const char *const cmd_play__ = "play\nclose\n"; - static const char *const cmd_play_from__ = "play %d\nclose\n"; - static const char *const cmd_pause__ = "pause\nclose\n"; + static const char status__[] = "status\n"; + static const char cmd_play__[] = "play\nclose\n"; + static const char cmd_play_from__[] = "play %d\nclose\n"; + static const char cmd_pause__[] = "pause\nclose\n"; - const size_t buff_len = 1024; - char buff[buff_len]; + char buff[LKT_MESSAGE_MAX]; FILE *sock = lkt_connect(); - if (write_socket(sock, status__, strlen(status__))) + if (write_socket(sock, status__, sizeof(status__))) /* In bytes. */ goto error; for (;;) { - memset(buff, 0, buff_len * sizeof(char)); - if (read_socket(sock, buff, buff_len - 1) <= 0) + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + if (read_socket(sock, buff, LKT_MESSAGE_MAX - 1) <= 0) exit(EXIT_FAILURE); size_t len = strcspn(buff, LKT_KEY_VALUE_SEP); @@ -312,13 +321,13 @@ play__(struct lkt_cmd_args *args) if (STR_NMATCH(lkt_skip_key(buff), "stop", 4)) { if (!pos) - lkt_send_and_exit(cmd_play__, strlen(cmd_play__)); + lkt_send_and_exit(cmd_play__, sizeof(cmd_play__)); /* In bytes. */ else exit(write_socket_format(lkt_connect(), cmd_play_from__, pos)); } else - lkt_send_and_exit(cmd_pause__, strlen(cmd_pause__)); + lkt_send_and_exit(cmd_pause__, sizeof(cmd_pause__)); /* In bytes. */ goto error; } @@ -334,30 +343,28 @@ current__(struct lkt_cmd_args *args) if (args->argc != 0) fail("Invalid argument, the current command takes no arguments"); - static const char *const current_song__ = "currentsong\n"; - const size_t buff_len = 1024; - char buff[buff_len]; + static const char current_song__[] = "currentsong\n"; + char buff[LKT_MESSAGE_MAX]; char *mem = NULL; FILE *sock = lkt_connect(); - if (write_socket(sock, current_song__, strlen(current_song__))) + if (write_socket(sock, current_song__, sizeof(current_song__))) /* In bytes. */ goto error; - assert(mem = calloc(6 * buff_len, sizeof(char))); - assert(memset(mem, 0, 6 * buff_len * sizeof(char))); + assert(mem = calloc(6 * LKT_MESSAGE_MAX, sizeof(char))); + assert(memset(mem, 0, 6 * LKT_MESSAGE_MAX * sizeof(char))); char *const title = &mem[0]; - char *const author = &mem[buff_len]; - char *const source = &mem[2 * buff_len]; - char *const type = &mem[3 * buff_len]; - char *const category = &mem[4 * buff_len]; - char *const language = &mem[5 * buff_len]; - + char *const author = &mem[LKT_MESSAGE_MAX]; + char *const source = &mem[2 * LKT_MESSAGE_MAX]; + char *const type = &mem[3 * LKT_MESSAGE_MAX]; + char *const category = &mem[4 * LKT_MESSAGE_MAX]; + char *const language = &mem[5 * LKT_MESSAGE_MAX]; for (;;) { - memset(buff, 0, buff_len * sizeof(char)); - if (read_socket(sock, buff, buff_len - 1) <= 0) + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + if (read_socket(sock, buff, LKT_MESSAGE_MAX - 1) <= 0) goto error; const size_t len = strcspn(buff, LKT_KEY_VALUE_SEP); @@ -411,8 +418,7 @@ status__(struct lkt_cmd_args *args) static const char *const status_str__ = "status\n"; int ret = EXIT_FAILURE, it = 0; - const size_t buff_len = 1024; - char buff[buff_len]; + char buff[LKT_MESSAGE_MAX]; char flags[24]; bool play = false, stopped = true; @@ -430,8 +436,8 @@ status__(struct lkt_cmd_args *args) #define assign_int(str, var) if (! strncmp(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; } for (;;) { - memset(buff, 0, buff_len * sizeof(char)); - if (read_socket(sock, buff, buff_len - 1) <= 0) + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + if (read_socket(sock, buff, LKT_MESSAGE_MAX - 1) <= 0) goto error; size_t len = strcspn(buff, LKT_KEY_VALUE_SEP); @@ -519,8 +525,7 @@ check: noreturn void add__(struct lkt_cmd_args *args) { - const size_t buff_len = 1025; - char buff[buff_len]; + char buff[LKT_MESSAGE_MAX]; int i; if (args->argc < 1) @@ -545,8 +550,8 @@ add__(struct lkt_cmd_args *args) write_socket(sock, "\n", sizeof(char)); for (;;) { - memset(buff, 0, buff_len * sizeof(char)); - assert(read_socket(sock, buff, buff_len - 1) > 0); + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + assert(read_socket(sock, buff, LKT_MESSAGE_MAX - 1) > 0); if (! strncmp(buff, "OK", 2)) exit(EXIT_SUCCESS); @@ -559,8 +564,7 @@ add__(struct lkt_cmd_args *args) noreturn void list__(struct lkt_cmd_args *args) { - const size_t buff_len = 1025; - char buff[buff_len]; + char buff[LKT_MESSAGE_MAX]; if (args->argc == 0) args->argv = LKT_QUEUE_DEFAULT; @@ -575,8 +579,8 @@ list__(struct lkt_cmd_args *args) write_socket(sock, "\n", sizeof(char)); for (;;) { - memset(buff, 0, buff_len * sizeof(char)); - assert(read_socket(sock, buff, buff_len - 1) > 0); + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + assert(read_socket(sock, buff, LKT_MESSAGE_MAX - 1) > 0); if (! strncmp(buff, "OK", 2)) exit(EXIT_SUCCESS); @@ -708,8 +712,7 @@ search_with_cmd__(struct lkt_cmd_args *args, const char *cmd) fail("Invalid type for the query"); FILE *sock = lkt_connect(); - const size_t buff_len = 1025; - char buff[buff_len]; + char buff[LKT_MESSAGE_MAX]; int i; write_socket(sock, cmd, strlen(cmd)); @@ -719,8 +722,8 @@ search_with_cmd__(struct lkt_cmd_args *args, const char *cmd) write_socket(sock, "\n", sizeof("\n") / sizeof(char)); for (;;) { - memset(buff, 0, buff_len * sizeof(char)); - assert(read_socket(sock, buff, buff_len - 1) > 0); + memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); + assert(read_socket(sock, buff, LKT_MESSAGE_MAX - 1) > 0); if (! strncmp(buff, "OK", 2)) exit(EXIT_SUCCESS); @@ -807,6 +810,7 @@ static struct lkt_cmd_opt options_[] = { { .name = "add", .call = add__ }, { .name = "shuffle", .call = shuffle__ }, { .name = "status", .call = status__ }, + { .name = "stop", .call = stop__ }, { .name = "plt", .call = plt__ }, { .name = "search", .call = search__ }, LKT_OPT_NULL,