107 lines
2.7 KiB
C
107 lines
2.7 KiB
C
// clang-format off
|
|
|
|
/*
|
|
|
|
* mc | MatterLinux Configuration Manager
|
|
* MatterLinux 2023-2024 (https://matterlinux.xyz)
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
// clang-format on
|
|
|
|
#include <libintl.h>
|
|
#include <locale.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "args.h"
|
|
#include "gen.h"
|
|
#include "lock.h"
|
|
#include "log.h"
|
|
#include "paths.h"
|
|
#include "pull.h"
|
|
#include "util.h"
|
|
|
|
#define _(x) gettext(x)
|
|
|
|
typedef bool (*cmd)();
|
|
struct CmdMap {
|
|
char *name;
|
|
bool lock;
|
|
cmd func;
|
|
};
|
|
|
|
struct CmdMap cmdmap[] = {
|
|
{.name = "mc-pull", .lock = true, .func = pull_cmd},
|
|
{.name = "mc-gen", .lock = false, .func = gen_cmd },
|
|
};
|
|
|
|
int main(int argc, char *argv[]) {
|
|
setbuf(stdout, NULL);
|
|
setlocale(LC_ALL, "");
|
|
textdomain("mc");
|
|
|
|
for (int i = 0; i < sizeof(cmdmap) / sizeof(struct CmdMap); i++) {
|
|
if (strcmp(argv[0], cmdmap[i].name) != 0)
|
|
continue;
|
|
|
|
args_load(argc, argv);
|
|
|
|
if(!paths_load()){
|
|
error(_("Failed to access paths (%s)"), mc_dir);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
if (cmdmap[i].lock) {
|
|
int st = lock();
|
|
switch (st) {
|
|
case ALREADY_LOCKED:
|
|
error(_("Failed to lock, mc is already running"));
|
|
return EXIT_FAILURE;
|
|
case LOCK_ERROR:
|
|
error(_("Failed to lock, did you mess up your directory permissions?"));
|
|
return EXIT_FAILURE;
|
|
}
|
|
}
|
|
|
|
bool ret = cmdmap[i].func();
|
|
unlock();
|
|
|
|
if (!ret) {
|
|
error(_("%s: command failed"), cmdmap[i].name);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
success(_("%s: command successful"), cmdmap[i].name);
|
|
return EXIT_SUCCESS;
|
|
}
|
|
|
|
info(_("MatterLinux Configuration Manager (%s)"), VERSION);
|
|
info(_("Different operations are done using different commands\n"));
|
|
|
|
printf(COLOR_BOLD " mc-pull" COLOR_RESET ": ");
|
|
printf(" %s\n", _("pull down a configuration"));
|
|
|
|
printf(COLOR_BOLD " mc-gen" COLOR_RESET ": ");
|
|
printf(" %s\n\n", _("build the configuration in the current directory"));
|
|
|
|
info(_("Licensed under GPLv3, see <https://www.gnu.org/licenses/> for more "
|
|
"information"));
|
|
return EXIT_SUCCESS;
|
|
}
|