diff options
author | 諏訪子 <suwako@076.moe> | 2024-06-19 23:52:56 +0900 |
---|---|---|
committer | 諏訪子 <suwako@076.moe> | 2024-06-19 23:52:56 +0900 |
commit | b6e3f6cb5d1051777c35988f201e6730525e3389 (patch) | |
tree | 98679f1995f7b103f3314ce54fdf0d1c76df6dbd /src/packages.c | |
parent | 8f378429801162d690dc68c0f15b483c1d291838 (diff) |
掃除
Diffstat (limited to 'src/packages.c')
-rw-r--r-- | src/packages.c | 57 |
1 files changed, 7 insertions, 50 deletions
diff --git a/src/packages.c b/src/packages.c index e89eb82..3505815 100644 --- a/src/packages.c +++ b/src/packages.c @@ -1,65 +1,22 @@ #include "packages.h" +#include "common.h" -#include <stdio.h> -#include <stdlib.h> -#include <string.h> +#if defined(__linux__) #include <unistd.h> -#if defined(__linux__) #include "distro.h" - -/*const char *distroname;*/ #endif -const char *run_package_command(const char *command) { - char buf[64]; - 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; -} - -void display_packages() { +const char *display_packages() { #if defined(__OpenBSD__) || defined(__NetBSD__) - printf("%s (pkg_info)", run_package_command("pkg_info -a | wc -l | " - "sed \"s/ //g\"")); + return run_command_s("pkg_info -a | wc -l | sed \"s/ //g\""); #elif defined(__FreeBSD__) || defined(__DragonFly__) - printf("%s (pkg)", run_package_command("pkg info -a | wc -l | " - "sed \"s/ //g\"")); + return run_command_s("pkg info -a | wc -l | sed \"s/ //g\""); #elif defined(__linux__) if (access("/bin/xbps-query", F_OK) != -1) { - printf("%s (xbps-query)", run_package_command("xbps-query -l | wc -l | " - "sed \"s/ //g\"")); + return run_command_s("xbps-query -l | wc -l | sed \"s/ //g\""); } else if (access("/usr/bin/dpkg-query", F_OK) != -1) { - printf("%s (dpkg)", run_package_command("dpkg-query -f '.\n' -W | wc -l | " - "sed \"s/ //g\"")); + return run_command_s("dpkg-query -f '.\n' -W | wc -l | sed \"s/ //g\""); } #endif } |