From b6e3f6cb5d1051777c35988f201e6730525e3389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Wed, 19 Jun 2024 23:52:56 +0900 Subject: =?UTF-8?q?=E6=8E=83=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/common.c (limited to 'src/common.c') diff --git a/src/common.c b/src/common.c new file mode 100644 index 0000000..acb0a45 --- /dev/null +++ b/src/common.c @@ -0,0 +1,60 @@ +#include "common.h" + +#include +#include +#include + +long long int run_command_lld(const char *command) { + char buf[128]; + long long int res = 0; + + FILE *p = popen(command, "r"); + if (!p) { + fprintf(stderr, "コマンドを実効に失敗: %s", command); + return 0; + } + + while (fgets(buf, sizeof(buf), p) != NULL) { + buf[strcspn(buf, "\n")] = '\0'; + } + + res = atoll(buf); + pclose(p); + + return res; +} + +const char *run_command_s(const char *command) { + char buf[128]; + char *out = NULL; + size_t outsize = 0; + + FILE *p = popen(command, "r"); + if (!p) { + fprintf(stderr, "コマンドを実効に失敗: %s", command); + return NULL; + } + + while (fgets(buf, sizeof(buf), p) != NULL) { + buf[strcspn(buf, "\n")] = '\0'; + + size_t len = strlen(buf); + char *nout = realloc(out, outsize + len + 1); + if (nout == NULL) { + perror("メモリの役割に失敗"); + free(out); + pclose(p); + return NULL; + } + + out = nout; + + memccpy(out + outsize, buf, sizeof(buf), len); + outsize += len; + out[outsize] = '\0'; + } + + pclose(p); + + return out; +} -- cgit v1.2.3