update: make things work with libmp update

This commit is contained in:
ngn 2024-08-04 15:55:02 +03:00
parent dc4bfd7e7d
commit 049642d06b
12 changed files with 198 additions and 115 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-01 01:59+0300\n" "POT-Creation-Date: 2024-08-04 15:54+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,29 +17,29 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: src/config.c:70 #: src/config.c:71
#, c-format #, c-format
msgid "Unknown configuration option: %s/%s" msgid "Unknown configuration option: %s/%s"
msgstr "Unknown configuration option: %s/%s" msgstr "Unknown configuration option: %s/%s"
#: src/config.c:78 #: src/config.c:79
#, c-format #, fuzzy
msgid "Failed to access the configuration file: %s" msgid "Failed to access the configuration file: "
msgstr "Failed to access the configuration file: %s" msgstr "Failed to access the configuration file: %s"
#: src/config.c:83 #: src/config.c:84
msgid "Failed to parse the configuration" msgid "Failed to parse the configuration"
msgstr "Failed to parse the configuration" msgstr "Failed to parse the configuration"
#: src/config.c:88 #: src/config.c:89
msgid "Please specify \"tmpdir\" in the configuration" msgid "Please specify \"tmpdir\" in the configuration"
msgstr "Please specify \"tmpdir\" in the configuration" msgstr "Please specify \"tmpdir\" in the configuration"
#: src/config.c:93 #: src/config.c:94
msgid "Please specify \"datadir\" in the configuration" msgid "Please specify \"datadir\" in the configuration"
msgstr "Please specify \"datadir\" in the configuration" msgstr "Please specify \"datadir\" in the configuration"
#: src/config.c:100 #: src/config.c:101
#, c-format #, c-format
msgid "URL not specified for the pool: %s" msgid "URL not specified for the pool: %s"
msgstr "URL not specified for the pool: %s" msgstr "URL not specified for the pool: %s"
@ -73,288 +73,305 @@ msgstr "Please answer with y/n"
msgid "Received a segfault" msgid "Received a segfault"
msgstr "Received a segfault" msgstr "Received a segfault"
#: src/main.c:93 #: src/main.c:97
msgid "Failed to access the root directory, are you running as root?" msgid "Failed to access the root directory, are you running as root?"
msgstr "Failed to access the root directory, are you running as root?" msgstr "Failed to access the root directory, are you running as root?"
#: src/main.c:95 #: src/main.c:101
#, c-format #, fuzzy
msgid "Bad root directory (%s): %s" msgid "Failed to access the data directory ("
msgstr "Bad root directory (%s): %s" msgstr "Failed to access the configuration file: %s"
#: src/main.c:103 #: src/main.c:105
#, c-format #, fuzzy
msgid "Bad datadir (%s): %s" msgid "Failed to access the temp directory ("
msgstr "Bad datadir (%s): %s" msgstr "Failed to open the editor: %s"
#: src/main.c:108 #: src/main.c:109
#, c-format #, fuzzy, c-format
msgid "Bad tmpdir (%s): %s" msgid "Failed to initialize libmp context: %s"
msgstr "Bad tmpdir (%s): %s" msgstr "Failed to install "
#: src/main.c:115 #: src/main.c:120
#, fuzzy
msgid "Failed to create the pools directory ("
msgstr "Failed to open the editor: %s"
#: src/main.c:130
msgid "Failed to add pool " msgid "Failed to add pool "
msgstr "Failed to add pool " msgstr "Failed to add pool "
#: src/main.c:127 #: src/main.c:144
msgid "Failed to lock, matt is already running" msgid "Failed to lock, matt is already running"
msgstr "Failed to lock, matt is already running" msgstr "Failed to lock, matt is already running"
#: src/main.c:131 #: src/main.c:148
msgid "Failed to lock, are you root?" msgid "Failed to lock, are you root?"
msgstr "Failed to lock, are you root?" msgstr "Failed to lock, are you root?"
#: src/main.c:142 #: src/main.c:159
msgid "Command not found: " msgid "Command not found: "
msgstr "Command not found: " msgstr "Command not found: "
#: src/main.c:144 #: src/main.c:161
#, c-format #, c-format
msgid "MatterLinux package manager (version %s)" msgid "MatterLinux package manager (version %s)"
msgstr "MatterLinux package manager (version %s)" msgstr "MatterLinux package manager (version %s)"
#: src/main.c:145 #: src/main.c:162
msgid "Usage: " msgid "Usage: "
msgstr "Usage: " msgstr "Usage: "
#: src/main.c:147 #: src/main.c:164
msgid "Here is a list of available commands:" msgid "Here is a list of available commands:"
msgstr "Here is a list of available commands:" msgstr "Here is a list of available commands:"
#: src/main.c:153 #: src/main.c:170
msgid "To list different options, use commands with " msgid "To list different options, use commands with "
msgstr "To list different options, use commands with " msgstr "To list different options, use commands with "
#: src/main.c:154 #: src/main.c:171
msgid "Here is a list of available global options:" msgid "Here is a list of available global options:"
msgstr "Here is a list of available global options:" msgstr "Here is a list of available global options:"
#: src/main.c:157 src/main.c:158 src/cmd/info.c:42 src/cmd/info.c:43 #: src/main.c:174 src/main.c:175 src/cmd/info.c:43 src/cmd/info.c:44
#: src/cmd/info.c:44 src/cmd/install.c:25 src/cmd/install.c:26 #: src/cmd/info.c:45 src/cmd/install.c:26 src/cmd/install.c:27
#: src/cmd/list.c:13 src/cmd/list.c:14 src/cmd/remove.c:20 src/cmd/remove.c:21 #: src/cmd/list.c:14 src/cmd/list.c:15 src/cmd/remove.c:21 src/cmd/remove.c:22
#: src/cmd/update.c:29 #: src/cmd/update.c:30
#, c-format #, c-format
msgid " " msgid " "
msgstr " " msgstr " "
#: src/main.c:160 #: src/main.c:177
msgid "" msgid ""
"Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information" "Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information"
msgstr "" msgstr ""
"Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information" "Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information"
#: src/util.c:83 #: src/util.c:120
msgid "No available editor to open " msgid "No available editor to open "
msgstr "No available editor to open " msgstr "No available editor to open "
#: src/util.c:90 #: src/util.c:127
#, c-format #, c-format
msgid "Failed to run the editor: %s" msgid "Failed to run the editor: %s"
msgstr "Failed to run the editor: %s" msgstr "Failed to run the editor: %s"
#: src/util.c:95 #: src/util.c:132
#, c-format #, c-format
msgid "Failed to open the editor: %s" msgid "Failed to open the editor: %s"
msgstr "Failed to open the editor: %s" msgstr "Failed to open the editor: %s"
#: src/cmd/info.c:18 src/cmd/info.c:28 src/cmd/install.c:59 src/cmd/remove.c:45 #: src/cmd/info.c:19 src/cmd/info.c:29 src/cmd/install.c:60 src/cmd/remove.c:46
msgid "Package " msgid "Package "
msgstr "Package " msgstr "Package "
#: src/cmd/info.c:41 src/cmd/list.c:12 #: src/cmd/info.c:42 src/cmd/list.c:13
msgid "Listing options for the list command:" msgid "Listing options for the list command:"
msgstr "Listing options for the list command:" msgstr "Listing options for the list command:"
#: src/cmd/info.c:65 #: src/cmd/info.c:66
msgid "Please specify only a single package name" msgid "Please specify only a single package name"
msgstr "Please specify only a single package name" msgstr "Please specify only a single package name"
#: src/cmd/info.c:71 #: src/cmd/info.c:72
msgid "Please specify a single package" msgid "Please specify a single package"
msgstr "Please specify a single package" msgstr "Please specify a single package"
#: src/cmd/info.c:86 #: src/cmd/info.c:87
msgid "Failed to get the changes file for " msgid "Failed to get the changes file for "
msgstr "Failed to get the changes file for " msgstr "Failed to get the changes file for "
#: src/cmd/info.c:92 #: src/cmd/info.c:93
msgid "Failed to access the changes file, is the package installed?" msgid "Failed to access the changes file, is the package installed?"
msgstr "Failed to access the changes file, is the package installed?" msgstr "Failed to access the changes file, is the package installed?"
#: src/cmd/info.c:99 #: src/cmd/info.c:100
msgid "Failed to get the depends list for " msgid "Failed to get the depends list for "
msgstr "Failed to get the depends list for " msgstr "Failed to get the depends list for "
#: src/cmd/info.c:126 #: src/cmd/info.c:127
#, c-format #, c-format
msgid "Name " msgid "Name "
msgstr "Name " msgstr "Name "
#: src/cmd/info.c:127 #: src/cmd/info.c:128
#, c-format #, c-format
msgid "Version " msgid "Version "
msgstr "Version " msgstr "Version "
#: src/cmd/info.c:128 #: src/cmd/info.c:129
#, c-format #, c-format
msgid "Desc " msgid "Desc "
msgstr "Desc " msgstr "Desc "
#: src/cmd/info.c:129 #: src/cmd/info.c:130
#, c-format #, c-format
msgid "Size " msgid "Size "
msgstr "Size " msgstr "Size "
#: src/cmd/info.c:132 #: src/cmd/info.c:133
#, c-format #, c-format
msgid "Depends " msgid "Depends "
msgstr "Depends " msgstr "Depends "
#: src/cmd/info.c:135 #: src/cmd/info.c:136
#, c-format #, c-format
msgid "Changes " msgid "Changes "
msgstr "Changes " msgstr "Changes "
#: src/cmd/info.c:139 src/cmd/info.c:140 #: src/cmd/info.c:140 src/cmd/info.c:141
#, c-format #, c-format
msgid "Installed " msgid "Installed "
msgstr "Installed " msgstr "Installed "
#: src/cmd/info.c:142 src/cmd/info.c:143 #: src/cmd/info.c:143 src/cmd/info.c:144
#, c-format #, c-format
msgid "Up-to-date " msgid "Up-to-date "
msgstr "Up-to-date " msgstr "Up-to-date "
#: src/cmd/install.c:24 #: src/cmd/install.c:25
msgid "Listing options for the install command:" msgid "Listing options for the install command:"
msgstr "Listing options for the install command:" msgstr "Listing options for the install command:"
#: src/cmd/install.c:31 src/cmd/update.c:34 #: src/cmd/install.c:32 src/cmd/update.c:35
msgid "There are no avaliable pools, have you synced yet?" msgid "There are no avaliable pools, have you synced yet?"
msgstr "There are no avaliable pools, have you synced yet?" msgstr "There are no avaliable pools, have you synced yet?"
#: src/cmd/install.c:51 src/cmd/remove.c:47 #: src/cmd/install.c:52 src/cmd/remove.c:48
msgid "Failed to find " msgid "Failed to find "
msgstr "Failed to find " msgstr "Failed to find "
#: src/cmd/install.c:65 #: src/cmd/install.c:66
msgid "Failed to resolve " msgid "Failed to resolve "
msgstr "Failed to resolve " msgstr "Failed to resolve "
#: src/cmd/install.c:71 #: src/cmd/install.c:72
msgid "Nothing to do (no packages to install)" msgid "Nothing to do (no packages to install)"
msgstr "Nothing to do (no packages to install)" msgstr "Nothing to do (no packages to install)"
#: src/cmd/install.c:80 src/cmd/install.c:82 src/cmd/remove.c:67 #: src/cmd/install.c:81 src/cmd/install.c:83 src/cmd/remove.c:68
#: src/cmd/remove.c:69 src/cmd/update.c:55 src/cmd/update.c:57 #: src/cmd/remove.c:70 src/cmd/update.c:56 src/cmd/update.c:58
msgid "Following " msgid "Following "
msgstr "Following " msgstr "Following "
#: src/cmd/install.c:88 src/cmd/remove.c:76 #: src/cmd/install.c:89 src/cmd/remove.c:77
msgid "Total of " msgid "Total of "
msgstr "Total of " msgstr "Total of "
#: src/cmd/install.c:91 src/cmd/update.c:64 #: src/cmd/install.c:92 src/cmd/update.c:65
#, c-format #, c-format
msgid "Root directory is modified, install scripts will be saved in %s" msgid "Root directory is modified, install scripts will be saved in %s"
msgstr "Root directory is modified, install scripts will be saved in %s" msgstr "Root directory is modified, install scripts will be saved in %s"
#: src/cmd/install.c:93 src/cmd/remove.c:77 src/cmd/update.c:66 #: src/cmd/install.c:94 src/cmd/remove.c:78 src/cmd/update.c:67
msgid "Continue?" msgid "Continue?"
msgstr "Continue?" msgstr "Continue?"
#: src/cmd/install.c:94 src/cmd/remove.c:78 src/cmd/update.c:67 #: src/cmd/install.c:95 src/cmd/remove.c:79 src/cmd/update.c:68
msgid "Operation cancelled" msgid "Operation cancelled"
msgstr "Operation cancelled" msgstr "Operation cancelled"
#: src/cmd/install.c:100 src/cmd/install.c:115 src/cmd/remove.c:85 #: src/cmd/install.c:101 src/cmd/install.c:116 src/cmd/remove.c:86
#: src/cmd/update.c:77 src/cmd/update.c:86 src/cmd/update.c:95 #: src/cmd/update.c:78 src/cmd/update.c:87 src/cmd/update.c:96
msgid "(" msgid "("
msgstr "(" msgstr "("
#: src/cmd/install.c:106 src/cmd/update.c:82 #: src/cmd/install.c:107 src/cmd/update.c:83
msgid "Failed to download " msgid "Failed to download "
msgstr "Failed to download " msgstr "Failed to download "
#: src/cmd/install.c:121 src/cmd/update.c:100 #: src/cmd/install.c:122 src/cmd/update.c:101
msgid "Failed to install " msgid "Failed to install "
msgstr "Failed to install " msgstr "Failed to install "
#: src/cmd/install.c:127 #: src/cmd/install.c:128
msgid "Installed " msgid "Installed "
msgstr "Installed " msgstr "Installed "
#: src/cmd/install.c:127 #: src/cmd/install.c:128
msgid "Installed all of the " msgid "Installed all of the "
msgstr "Installed all of the " msgstr "Installed all of the "
#: src/cmd/list.c:27 #: src/cmd/list.c:28
msgid "There no installed packages" msgid "There no installed packages"
msgstr "There no installed packages" msgstr "There no installed packages"
#: src/cmd/list.c:32 #: src/cmd/list.c:33
msgid "Listing " msgid "Listing "
msgstr "Listing " msgstr "Listing "
#: src/cmd/remove.c:19 #: src/cmd/remove.c:20
msgid "Listing options for the remove command:" msgid "Listing options for the remove command:"
msgstr "Listing options for the remove command:" msgstr "Listing options for the remove command:"
#: src/cmd/remove.c:52 #: src/cmd/remove.c:53
msgid "Cannot remove " msgid "Cannot remove "
msgstr "Cannot remove " msgstr "Cannot remove "
#: src/cmd/remove.c:60 #: src/cmd/remove.c:61
msgid "Nothing to do (no packages to remove)" msgid "Nothing to do (no packages to remove)"
msgstr "Nothing to do (no packages to remove)" msgstr "Nothing to do (no packages to remove)"
#: src/cmd/remove.c:91 src/cmd/update.c:91 #: src/cmd/remove.c:92 src/cmd/update.c:92
msgid "Failed to remove " msgid "Failed to remove "
msgstr "Failed to remove " msgstr "Failed to remove "
#: src/cmd/remove.c:97 #: src/cmd/remove.c:98
msgid "Removed " msgid "Removed "
msgstr "Removed " msgstr "Removed "
#: src/cmd/remove.c:97 #: src/cmd/remove.c:98
msgid "Removed all of the " msgid "Removed all of the "
msgstr "Removed all of the " msgstr "Removed all of the "
#: src/cmd/sync.c:19 #: src/cmd/sync.c:20
msgid "Failed to sync " msgid "Failed to sync "
msgstr "Failed to sync " msgstr "Failed to sync "
#: src/cmd/sync.c:28 src/cmd/sync.c:58 #: src/cmd/sync.c:29 src/cmd/sync.c:59
msgid "Synced " msgid "Synced "
msgstr "Synced " msgstr "Synced "
#: src/cmd/sync.c:34 #: src/cmd/sync.c:35
#, c-format #, c-format
msgid "Failed to sync %s: %s" msgid "Failed to sync %s: %s"
msgstr "Failed to sync %s: %s" msgstr "Failed to sync %s: %s"
#: src/cmd/sync.c:46 #: src/cmd/sync.c:47
msgid "There are no pools specified in the configuration" msgid "There are no pools specified in the configuration"
msgstr "There are no pools specified in the configuration" msgstr "There are no pools specified in the configuration"
#: src/cmd/sync.c:54 #: src/cmd/sync.c:55
#, c-format #, c-format
msgid "Failed to sync pools: %s" msgid "Failed to sync pools: %s"
msgstr "Failed to sync pools: %s" msgstr "Failed to sync pools: %s"
#: src/cmd/update.c:28 #: src/cmd/update.c:29
msgid "Listing options for the update command:" msgid "Listing options for the update command:"
msgstr "Listing options for the update command:" msgstr "Listing options for the update command:"
#: src/cmd/update.c:45 #: src/cmd/update.c:46
#, c-format #, c-format
msgid "Failed to get the package update list: %s" msgid "Failed to get the package update list: %s"
msgstr "Failed to get the package update list: %s" msgstr "Failed to get the package update list: %s"
#: src/cmd/update.c:50 #: src/cmd/update.c:51
msgid "All packages are up-to-date" msgid "All packages are up-to-date"
msgstr "All packages are up-to-date" msgstr "All packages are up-to-date"
#: src/cmd/update.c:73 #: src/cmd/update.c:74
msgid "Failed to update " msgid "Failed to update "
msgstr "Failed to update " msgstr "Failed to update "
#, c-format
#~ msgid "Bad root directory (%s): %s"
#~ msgstr "Bad root directory (%s): %s"
#, c-format
#~ msgid "Bad datadir (%s): %s"
#~ msgstr "Bad datadir (%s): %s"
#, c-format
#~ msgid "Bad tmpdir (%s): %s"
#~ msgstr "Bad tmpdir (%s): %s"

View File

@ -7,6 +7,7 @@
#include <stdlib.h> #include <stdlib.h>
#include "../util.h" #include "../util.h"
#include "../intl.h"
#include "../cmd.h" #include "../cmd.h"
#include "../log.h" #include "../log.h"

View File

@ -2,6 +2,7 @@
#include <stdio.h> #include <stdio.h>
#include "../util.h" #include "../util.h"
#include "../intl.h"
#include "../cmd.h" #include "../cmd.h"
#include "../log.h" #include "../log.h"

View File

@ -1,6 +1,7 @@
#include <libmp/all.h> #include <libmp/all.h>
#include <stdio.h> #include <stdio.h>
#include "../intl.h"
#include "../cmd.h" #include "../cmd.h"
#include "../log.h" #include "../log.h"

View File

@ -3,6 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include "../util.h" #include "../util.h"
#include "../intl.h"
#include "../cmd.h" #include "../cmd.h"
#include "../log.h" #include "../log.h"

View File

@ -1,6 +1,7 @@
#include <libmp/all.h> #include <libmp/all.h>
#include <stdio.h> #include <stdio.h>
#include "../intl.h"
#include "../cmd.h" #include "../cmd.h"
#include "../log.h" #include "../log.h"

View File

@ -2,6 +2,7 @@
#include <stdio.h> #include <stdio.h>
#include "../util.h" #include "../util.h"
#include "../intl.h"
#include "../cmd.h" #include "../cmd.h"
#include "../log.h" #include "../log.h"

View File

@ -8,6 +8,7 @@
#include "config.h" #include "config.h"
#include "intl.h" #include "intl.h"
#include "log.h" #include "log.h"
#include "util.h"
bool config_set(config_t *config, char *key, char *value) { bool config_set(config_t *config, char *key, char *value) {
if (eq(key, "tmpdir")) if (eq(key, "tmpdir"))
@ -74,8 +75,8 @@ unknown:
bool config_load(lm_ctx_t *ctx, config_t *config, char *file) { bool config_load(lm_ctx_t *ctx, config_t *config, char *file) {
bzero(config, sizeof(config_t)); bzero(config, sizeof(config_t));
if (!exists(file) || !can_read(file)) { if (access(file, R_OK) != 0) {
error(_("Failed to access the configuration file: %s"), file); error(_("Failed to access the configuration file: " FG_BOLD "%s"), file);
return false; return false;
} }

View File

@ -1,9 +1,10 @@
#include "lock.h"
#include <fcntl.h> #include <fcntl.h>
#include <libmp/util.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include "lock.h"
#include "util.h"
lock_st lock(lm_ctx_t *ctx) { lock_st lock(lm_ctx_t *ctx) {
if (NULL == ctx->data) if (NULL == ctx->data)
return LOCK_ERROR; return LOCK_ERROR;
@ -11,7 +12,7 @@ lock_st lock(lm_ctx_t *ctx) {
char lock_file[strlen(ctx->data) + 10]; char lock_file[strlen(ctx->data) + 10];
join(lock_file, ctx->data, "lock"); join(lock_file, ctx->data, "lock");
if (exists(lock_file)) if (access(lock_file, F_OK) == 0)
return ALREADY_LOCKED; return ALREADY_LOCKED;
if (creat(lock_file, 0600) == -1) if (creat(lock_file, 0600) == -1)
return LOCK_ERROR; return LOCK_ERROR;

View File

@ -22,14 +22,14 @@
// clang-format on // clang-format on
#include <errno.h>
#include <libmp/all.h> #include <libmp/all.h>
#include <libmp/ctx.h>
#include <libmp/error.h>
#include <libmp/util.h>
#include <locale.h> #include <locale.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "args.h" #include "args.h"
#include "cmd.h" #include "cmd.h"
@ -66,10 +66,10 @@ int main(int argc, char *argv[], char *envp[]) {
{.name = "update", .desc = "update installed package(s)", .func = cmd_update }, {.name = "update", .desc = "update installed package(s)", .func = cmd_update },
}; };
char *full_datadir = NULL, *full_tmpdir = NULL, *full_pooldir = NULL;
char *config_file = NULL, *root_dir = NULL; char *config_file = NULL, *root_dir = NULL;
char *full_datadir = NULL, *full_tmpdir = NULL; bool ret = false, r = false;
args_t *args = NULL; args_t *args = NULL;
bool ret = false;
config_t config; config_t config;
set_env(envp); set_env(envp);
@ -88,33 +88,50 @@ int main(int argc, char *argv[], char *envp[]) {
if ((root_dir = args_get_string(args, "root")) == NULL) if ((root_dir = args_get_string(args, "root")) == NULL)
root_dir = "/"; root_dir = "/";
if (!lm_ctx_set_root(&ctx, root_dir)) {
if (LM_ERR_CtxRootNoWrite == lm_error())
error(_("Failed to access the root directory, are you running as root?"));
else
error(_("Bad root directory (%s): %s"), root_dir, lm_strerror());
goto end;
}
full_datadir = join_alloc(root_dir, config.datadir); full_datadir = join_alloc(root_dir, config.datadir);
full_tmpdir = join_alloc(root_dir, config.tmpdir); full_tmpdir = join_alloc(root_dir, config.tmpdir);
if (!lm_ctx_set_data(&ctx, full_datadir)) { if (!lm_ctx_new(&ctx, root_dir, full_tmpdir, full_datadir)) {
error(_("Bad datadir (%s): %s"), full_datadir, lm_strerror()); switch (lm_error()) {
goto end; case LM_ERR_CtxRootFail:
} error(_("Failed to access the root directory, are you running as root?"));
break;
case LM_ERR_CtxDataFail:
error(_("Failed to access the data directory (" FG_BOLD "%s" FG_RESET ")"), full_datadir);
break;
case LM_ERR_CtxTempFail:
error(_("Failed to access the temp directory (" FG_BOLD "%s" FG_RESET ")"), full_tmpdir);
break;
default:
error(_("Failed to initialize libmp context: %s"), lm_strerror());
break;
}
if (!lm_ctx_set_temp(&ctx, full_tmpdir)) {
error(_("Bad tmpdir (%s): %s"), full_tmpdir, lm_strerror());
goto end; goto end;
} }
pool_config_t *pool = config.pools; pool_config_t *pool = config.pools;
full_pooldir = join_alloc(full_datadir, "pools");
if (mkdir(full_pooldir, 0755) < 0 && errno != EEXIST) {
error(_("Failed to create the pools directory (" FG_BOLD "%s" FG_RESET "): %s"), pool->name, strerror(errno));
goto end;
}
while (NULL != pool) { while (NULL != pool) {
if (!lm_ctx_pool_add(&ctx, pool->name, pool->url)) { char *pd = join_alloc(full_pooldir, pool->name);
r = lm_ctx_pool_add(&ctx, pool->name, pool->url, pd);
if (!r) {
error(_("Failed to add pool " FG_BOLD "%s" FG_RESET " to the list: %s"), pool->name, lm_strerror()); error(_("Failed to add pool " FG_BOLD "%s" FG_RESET " to the list: %s"), pool->name, lm_strerror());
goto end; goto end;
} }
free(pd);
pool = pool->next; pool = pool->next;
} }
@ -165,6 +182,7 @@ help:
end: end:
unlock(&ctx); unlock(&ctx);
free(full_pooldir);
free(full_datadir); free(full_datadir);
free(full_tmpdir); free(full_tmpdir);

View File

@ -1,12 +1,13 @@
#include <errno.h> #include <errno.h>
#include <libmp/util.h>
#include <spawn.h> #include <spawn.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h>
#include <wait.h> #include <wait.h>
#include "intl.h"
#include "log.h" #include "log.h"
#include "util.h" #include "util.h"
@ -16,6 +17,16 @@ void set_env(char **envp) {
env = envp; env = envp;
} }
bool eq(char *s1, char *s2) {
if (NULL == s1 || NULL == s2)
return false;
if (strlen(s1) != strlen(s2))
return false;
return strcmp(s1, s2) == 0;
}
bool startswith(char *str, char *sub) { bool startswith(char *str, char *sub) {
size_t strl = strlen(str); size_t strl = strlen(str);
size_t subl = strlen(sub); size_t subl = strlen(sub);
@ -26,6 +37,32 @@ bool startswith(char *str, char *sub) {
return strncmp(sub, str, subl) == 0; return strncmp(sub, str, subl) == 0;
} }
int join(char *res, const char *base, const char *pth) {
int blen = strlen(base);
if ((base[blen - 1] == '/' && pth[0] != '/') || (base[blen - 1] != '/' && pth[0] == '/')) {
return sprintf(res, "%s%s", base, pth);
} else if (base[blen - 1] != '/' && pth[0] != '/') {
return sprintf(res, "%s/%s", base, pth);
} else if (base[blen - 1] == '/' && pth[0] == '/') {
char *basedup = strdup(base);
basedup[blen - 1] = '\0';
return sprintf(res, "%s%s", basedup, pth);
}
return -1;
}
char *join_alloc(char *p1, char *p2) {
char *fp = malloc(strlen(p1) + strlen(p2) + 5);
if (!join(fp, p1, p2)) {
free(fp);
fp = NULL;
}
return fp;
}
void size_to_human(char *buf, long size) { void size_to_human(char *buf, long size) {
char *suffix[] = {"B", "KB", "MB", "GB", "TB"}; char *suffix[] = {"B", "KB", "MB", "GB", "TB"};
char length = sizeof(suffix) / sizeof(suffix[0]); char length = sizeof(suffix) / sizeof(suffix[0]);
@ -58,7 +95,7 @@ char *exists_in_path(char *file) {
char fp[strlen(part) + filesz + 1]; char fp[strlen(part) + filesz + 1];
join(fp, part, file); join(fp, part, file);
if (exists(fp)) if (access(fp, X_OK) == 0)
return strdup(fp); return strdup(fp);
} while ((part = strtok_r(NULL, ":", &save)) != NULL); } while ((part = strtok_r(NULL, ":", &save)) != NULL);

View File

@ -5,6 +5,9 @@
#define LONGSTR_MAX 30 #define LONGSTR_MAX 30
void set_env(char **envp); void set_env(char **envp);
bool eq(char *s1, char *s2);
int join(char *res, const char *base, const char *pth);
char *join_alloc(char *p1, char *p2);
bool startswith(char *str, char *sub); bool startswith(char *str, char *sub);
void size_to_human(char *buf, long size); void size_to_human(char *buf, long size);
char *exists_in_path(char *file); char *exists_in_path(char *file);