new: locale implementation and signal handler
This commit is contained in:
parent
33e59c6644
commit
4bb4496bdc
@ -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-07-31 23:21+0300\n"
|
"POT-Creation-Date: 2024-08-01 01:59+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"
|
||||||
@ -72,56 +72,69 @@ msgstr ""
|
|||||||
msgid "Please answer with y/n"
|
msgid "Please answer with y/n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:74
|
#: src/main.c:48
|
||||||
|
msgid "Received a segfault"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main.c:93
|
||||||
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:76
|
#: src/main.c:95
|
||||||
#, fuzzy, c-format
|
#, fuzzy, c-format
|
||||||
msgid "Bad root directory (%s): %s"
|
msgid "Bad root directory (%s): %s"
|
||||||
msgstr "Havuz dizini kullanmak başarısız oldu: %s"
|
msgstr "Havuz dizini kullanmak başarısız oldu: %s"
|
||||||
|
|
||||||
#: src/main.c:84
|
#: src/main.c:103
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Bad datadir (%s): %s"
|
msgid "Bad datadir (%s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:89
|
#: src/main.c:108
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Bad tmpdir (%s): %s"
|
msgid "Bad tmpdir (%s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:96
|
#: src/main.c:115
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Failed to add pool "
|
msgid "Failed to add pool "
|
||||||
msgstr "Havuzları sekronize etmek başarısız oldu: %s"
|
msgstr "Havuzları sekronize etmek başarısız oldu: %s"
|
||||||
|
|
||||||
#: src/main.c:109
|
#: src/main.c:127
|
||||||
|
msgid "Failed to lock, matt is already running"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/main.c:131
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Failed to lock, are you root?"
|
||||||
|
msgstr "Havuzları sekronize etmek başarısız oldu: %s"
|
||||||
|
|
||||||
|
#: src/main.c:142
|
||||||
msgid "Command not found: "
|
msgid "Command not found: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:111
|
#: src/main.c:144
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "MatterLinux package manager (version %s)"
|
msgid "MatterLinux package manager (version %s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:112
|
#: src/main.c:145
|
||||||
msgid "Usage: "
|
msgid "Usage: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:114
|
#: src/main.c:147
|
||||||
msgid "Here is a list of available commands:"
|
msgid "Here is a list of available commands:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:120
|
#: src/main.c:153
|
||||||
msgid "To list different options, use commands with "
|
msgid "To list different options, use commands with "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:121
|
#: src/main.c:154
|
||||||
msgid "Here is a list of available global options:"
|
msgid "Here is a list of available global options:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:124 src/main.c:125 src/cmd/info.c:42 src/cmd/info.c:43
|
#: src/main.c:157 src/main.c:158 src/cmd/info.c:42 src/cmd/info.c:43
|
||||||
#: src/cmd/info.c:44 src/cmd/install.c:25 src/cmd/install.c:26
|
#: src/cmd/info.c:44 src/cmd/install.c:25 src/cmd/install.c:26
|
||||||
#: src/cmd/list.c:13 src/cmd/list.c:14 src/cmd/remove.c:20 src/cmd/remove.c:21
|
#: src/cmd/list.c:13 src/cmd/list.c:14 src/cmd/remove.c:20 src/cmd/remove.c:21
|
||||||
#: src/cmd/update.c:29
|
#: src/cmd/update.c:29
|
||||||
@ -129,7 +142,7 @@ msgstr ""
|
|||||||
msgid " "
|
msgid " "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/main.c:127
|
#: src/main.c:160
|
||||||
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 ""
|
||||||
|
28
src/lock.c
Normal file
28
src/lock.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "lock.h"
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <libmp/util.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
lock_st lock(lm_ctx_t *ctx) {
|
||||||
|
if (NULL == ctx->data)
|
||||||
|
return LOCK_ERROR;
|
||||||
|
|
||||||
|
char lock_file[strlen(ctx->data) + 10];
|
||||||
|
join(lock_file, ctx->data, "lock");
|
||||||
|
|
||||||
|
if (exists(lock_file))
|
||||||
|
return ALREADY_LOCKED;
|
||||||
|
if (creat(lock_file, 0600) == -1)
|
||||||
|
return LOCK_ERROR;
|
||||||
|
return LOCK_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void unlock(lm_ctx_t *ctx) {
|
||||||
|
if (NULL == ctx->data)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char lock_file[strlen(ctx->data) + 10];
|
||||||
|
join(lock_file, ctx->data, "lock");
|
||||||
|
unlink(lock_file);
|
||||||
|
}
|
11
src/lock.h
Normal file
11
src/lock.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <libmp/all.h>
|
||||||
|
|
||||||
|
typedef enum lock_state {
|
||||||
|
ALREADY_LOCKED = 1,
|
||||||
|
LOCK_SUCCESS = 2,
|
||||||
|
LOCK_ERROR = 3,
|
||||||
|
} lock_st;
|
||||||
|
|
||||||
|
lock_st lock(lm_ctx_t *ctx);
|
||||||
|
void unlock(lm_ctx_t *ctx);
|
41
src/main.c
41
src/main.c
@ -26,6 +26,8 @@
|
|||||||
#include <libmp/ctx.h>
|
#include <libmp/ctx.h>
|
||||||
#include <libmp/error.h>
|
#include <libmp/error.h>
|
||||||
#include <libmp/util.h>
|
#include <libmp/util.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@ -33,10 +35,28 @@
|
|||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "intl.h"
|
#include "intl.h"
|
||||||
|
#include "lock.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
lm_ctx_t ctx;
|
||||||
|
|
||||||
|
void handler(int sig) {
|
||||||
|
unlock(&ctx);
|
||||||
|
printf("\e[?25h\n");
|
||||||
|
if (SIGSEGV == sig)
|
||||||
|
error(_("Received a segfault"));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[], char *envp[]) {
|
int main(int argc, char *argv[], char *envp[]) {
|
||||||
|
signal(SIGSEGV, handler);
|
||||||
|
signal(SIGINT, handler);
|
||||||
|
|
||||||
|
setbuf(stdout, NULL);
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
textdomain("matt");
|
||||||
|
|
||||||
cmd_t commands[] = {
|
cmd_t commands[] = {
|
||||||
{.name = "info", .desc = "show information about a single package", .func = cmd_info },
|
{.name = "info", .desc = "show information about a single package", .func = cmd_info },
|
||||||
{.name = "list", .desc = "list all the installed packages", .func = cmd_list },
|
{.name = "list", .desc = "list all the installed packages", .func = cmd_list },
|
||||||
@ -51,7 +71,6 @@ int main(int argc, char *argv[], char *envp[]) {
|
|||||||
args_t *args = NULL;
|
args_t *args = NULL;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
config_t config;
|
config_t config;
|
||||||
lm_ctx_t ctx;
|
|
||||||
|
|
||||||
set_env(envp);
|
set_env(envp);
|
||||||
lm_ctx_init(&ctx);
|
lm_ctx_init(&ctx);
|
||||||
@ -100,10 +119,24 @@ int main(int argc, char *argv[], char *envp[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < sizeof(commands) / sizeof(cmd_t); i++) {
|
for (int i = 0; i < sizeof(commands) / sizeof(cmd_t); i++) {
|
||||||
if (eq(commands[i].name, args->list[0].value)) {
|
if (!eq(commands[i].name, args->list[0].value))
|
||||||
ret = commands[i].func(&ctx, &config, args);
|
continue;
|
||||||
|
|
||||||
|
switch (lock(&ctx)) {
|
||||||
|
case ALREADY_LOCKED:
|
||||||
|
error(_("Failed to lock, matt is already running"));
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
case LOCK_ERROR:
|
||||||
|
error(_("Failed to lock, are you root?"));
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = commands[i].func(&ctx, &config, args);
|
||||||
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
error(_("Command not found: " FG_BOLD "%s"), args->list[0].value);
|
error(_("Command not found: " FG_BOLD "%s"), args->list[0].value);
|
||||||
@ -130,6 +163,8 @@ help:
|
|||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
unlock(&ctx);
|
||||||
|
|
||||||
free(full_datadir);
|
free(full_datadir);
|
||||||
free(full_tmpdir);
|
free(full_tmpdir);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user