aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/cmd.c
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2022-08-23 23:01:32 +0200
committerEgor Tensin <Egor.Tensin@gmail.com>2022-08-23 23:01:32 +0200
commitb6d48ea5d51f09c6dd91a9f64f8e46bafab19a2a (patch)
tree12dcf8395e8083aebde80b262e154116febfb366 /src/cmd.c
parentremove redundant code (diff)
downloadcimple-b6d48ea5d51f09c6dd91a9f64f8e46bafab19a2a.tar.gz
cimple-b6d48ea5d51f09c6dd91a9f64f8e46bafab19a2a.zip
cmd -> msg
This I feel better conveys the meaning.
Diffstat (limited to 'src/cmd.c')
-rw-r--r--src/cmd.c192
1 files changed, 0 insertions, 192 deletions
diff --git a/src/cmd.c b/src/cmd.c
deleted file mode 100644
index 3a235db..0000000
--- a/src/cmd.c
+++ /dev/null
@@ -1,192 +0,0 @@
-#include "cmd.h"
-#include "log.h"
-#include "net.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-int cmd_from_argv(struct cmd *cmd, const char *argv[])
-{
- int argc = 0;
-
- for (const char **s = argv; *s; ++s)
- ++argc;
-
- cmd->argc = argc;
- cmd->argv = calloc(argc, sizeof(char *));
-
- if (!cmd->argv) {
- print_errno("calloc");
- return -1;
- }
-
- for (int i = 0; i < argc; ++i) {
- cmd->argv[i] = strdup(argv[i]);
- if (!cmd->argv[i]) {
- print_errno("strdup");
- goto free;
- }
- }
-
- return 0;
-
-free:
- for (int i = 0; i < argc; ++i)
- if (cmd->argv[i])
- free(cmd->argv[i]);
- else
- break;
-
- free(cmd->argv);
- return -1;
-}
-
-static size_t calc_buf_len(int argc, char **argv)
-{
- size_t len = 0;
- for (int i = 0; i < argc; ++i)
- len += strlen(argv[i]) + 1;
- return len;
-}
-
-static int calc_arr_len(const void *buf, size_t len)
-{
- int argc = 0;
- for (const char *it = buf; it < (const char *)buf + len; it += strlen(it) + 1)
- ++argc;
- return argc;
-}
-
-static void arr_pack(char *dest, int argc, char **argv)
-{
- for (int i = 0; i < argc; ++i) {
- strcpy(dest, argv[i]);
- dest += strlen(argv[i]) + 1;
- }
-}
-
-static int arr_unpack(char **argv, int argc, const char *src)
-{
- for (int i = 0; i < argc; ++i) {
- size_t len = strlen(src);
-
- argv[i] = malloc(len);
- if (!argv[i]) {
- print_errno("malloc");
- goto free;
- }
-
- strcpy(argv[i], src);
- src += len + 1;
- }
-
- return 0;
-
-free:
- for (int i = 0; i < argc; ++i)
- if (argv[i])
- free(argv[i]);
- else
- break;
-
- return -1;
-}
-
-int cmd_send(int fd, const struct cmd *cmd)
-{
- int ret = 0;
-
- size_t len = calc_buf_len(cmd->argc, cmd->argv);
- char *buf = malloc(len);
- if (!buf) {
- print_errno("malloc");
- return -1;
- }
- arr_pack(buf, cmd->argc, cmd->argv);
-
- ret = send_buf(fd, buf, len);
- if (ret < 0)
- goto free_buf;
-
-free_buf:
- free(buf);
-
- return ret;
-}
-
-int cmd_send_and_wait_for_result(int fd, const struct cmd *cmd, int *result)
-{
- int ret = 0;
-
- ret = cmd_send(fd, cmd);
- if (ret < 0)
- return ret;
-
- ret = recv_static(fd, result, sizeof(*result));
- if (ret < 0)
- return ret;
-
- return ret;
-}
-
-int cmd_recv(int fd, struct cmd *cmd)
-{
- void *buf;
- size_t len;
- int ret = 0;
-
- ret = recv_buf(fd, &buf, &len);
- if (ret < 0)
- return ret;
-
- cmd->argc = calc_arr_len(buf, len);
- cmd->argv = calloc(cmd->argc, sizeof(char *));
- if (!cmd->argv) {
- print_errno("calloc");
- ret = -1;
- goto free_buf;
- }
-
- ret = arr_unpack(cmd->argv, cmd->argc, buf);
- if (ret < 0)
- goto free_argv;
-
- goto free_buf;
-
-free_argv:
- free(cmd->argv);
-
-free_buf:
- free(buf);
-
- return ret;
-}
-
-int cmd_recv_and_send_result(int fd, cmd_handler handler, void *arg)
-{
- struct cmd cmd;
- int result;
- int ret = 0;
-
- ret = cmd_recv(fd, &cmd);
- if (ret < 0)
- return ret;
-
- result = handler(&cmd, arg);
-
- ret = send_buf(fd, &result, sizeof(result));
- if (ret < 0)
- goto free_cmd;
-
-free_cmd:
- cmd_free(&cmd);
-
- return ret;
-}
-
-void cmd_free(const struct cmd *cmd)
-{
- for (int i = 0; i < cmd->argc; ++i)
- free(cmd->argv[i]);
- free(cmd->argv);
-}