mirror of https://github.com/fairyglade/ly.git
Rewrite config.c
This commit is contained in:
parent
13c9aa7c1b
commit
f086faab58
|
@ -33,7 +33,6 @@ pub fn build(b: *std.Build) void {
|
|||
exe.addIncludePath("dep/dragonfail/src");
|
||||
exe.addIncludePath("dep/termbox_next/src");
|
||||
|
||||
exe.addCSourceFile("src/config.c", &c_args);
|
||||
exe.addCSourceFile("src/draw.c", &c_args);
|
||||
exe.addCSourceFile("src/inputs.c", &c_args);
|
||||
exe.addCSourceFile("src/login.c", &c_args);
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
[ly]
|
||||
|
||||
# Animation enabled/disabled
|
||||
#animate = false
|
||||
animate = false
|
||||
|
||||
# The active animation
|
||||
# 0 -> PSX DOOM fire (default)
|
||||
# 1 -> CMatrix
|
||||
#animation = 0
|
||||
animation = 0
|
||||
|
||||
# format string for clock in top right corner (see strftime specification)
|
||||
#clock = %c
|
||||
# Format string for clock in top right corner (see strftime specification)
|
||||
clock =
|
||||
|
||||
# enable/disable big clock
|
||||
#bigclock = true
|
||||
# Enable/disable big clock
|
||||
bigclock = false
|
||||
|
||||
# The character used to mask the password
|
||||
#asterisk = *
|
||||
asterisk = *
|
||||
|
||||
# Erase password input on failure
|
||||
#blank_password = false
|
||||
blank_password = false
|
||||
|
||||
#The `fg` and `bg` color settings take a digit 0-8 corresponding to:
|
||||
# The `fg` and `bg` color settings take a digit 0-8 corresponding to:
|
||||
#define TB_DEFAULT 0x00
|
||||
#define TB_BLACK 0x01
|
||||
#define TB_RED 0x02
|
||||
|
@ -38,103 +40,103 @@
|
|||
# config) will be used by `ly` for `fg = 8`.
|
||||
|
||||
# Background color id
|
||||
#bg = 0
|
||||
bg = 0
|
||||
|
||||
# Foreground color id
|
||||
#fg = 9
|
||||
fg = 9
|
||||
|
||||
# Blank main box background
|
||||
# Setting to false will make it transparent
|
||||
#blank_box = true
|
||||
blank_box = true
|
||||
|
||||
# Remove main box borders
|
||||
#hide_borders = false
|
||||
hide_borders = false
|
||||
|
||||
# Main box margins
|
||||
#margin_box_h = 2
|
||||
#margin_box_v = 1
|
||||
margin_box_h = 2
|
||||
margin_box_v = 1
|
||||
|
||||
# Input boxes length
|
||||
#input_len = 34
|
||||
input_len = 34
|
||||
|
||||
# Max input sizes
|
||||
#max_desktop_len = 100
|
||||
#max_login_len = 255
|
||||
#max_password_len = 255
|
||||
max_desktop_len = 100
|
||||
max_login_len = 255
|
||||
max_password_len = 255
|
||||
|
||||
|
||||
# Input box active by default on startup
|
||||
#default_input = 2
|
||||
default_input = 2
|
||||
|
||||
# Load the saved desktop and username
|
||||
#load = true
|
||||
load = true
|
||||
|
||||
# Save the current desktop and login as defaults
|
||||
#save = true
|
||||
save = true
|
||||
|
||||
# File in which to save and load the default desktop and login
|
||||
#save_file = /etc/ly/save
|
||||
save_file = /etc/ly/save
|
||||
|
||||
|
||||
# Remove F1/F2 command hints
|
||||
#hide_f1_commands = false
|
||||
hide_f1_commands = false
|
||||
|
||||
# Command executed when pressing F1
|
||||
#shutdown_cmd = /sbin/shutdown -a now
|
||||
shutdown_cmd = /sbin/shutdown -a now
|
||||
|
||||
# Command executed when pressing F2
|
||||
#restart_cmd = /sbin/shutdown -r now
|
||||
restart_cmd = /sbin/shutdown -r now
|
||||
|
||||
|
||||
# Active language
|
||||
# Available languages are found in /etc/ly/lang/
|
||||
#lang = en
|
||||
lang = en
|
||||
|
||||
|
||||
# tty in use
|
||||
#tty = 2
|
||||
# TTY in use
|
||||
tty = 2
|
||||
|
||||
# Console path
|
||||
#console_dev = /dev/console
|
||||
console_dev = /dev/console
|
||||
|
||||
# Default path
|
||||
#path = /sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin
|
||||
path = /sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin
|
||||
|
||||
|
||||
# Event timeout in milliseconds
|
||||
#min_refresh_delta = 5
|
||||
min_refresh_delta = 5
|
||||
|
||||
# Service name (set to ly to use the provided pam config file)
|
||||
#service_name = ly
|
||||
service_name = ly
|
||||
|
||||
# Terminal reset command (tput is faster)
|
||||
#term_reset_cmd = /usr/bin/tput reset
|
||||
term_reset_cmd = /usr/bin/tput reset
|
||||
|
||||
# Cookie generator
|
||||
#mcookie_cmd = /usr/bin/mcookie
|
||||
mcookie_cmd = /usr/bin/mcookie
|
||||
|
||||
|
||||
# Wayland setup command
|
||||
#wayland_cmd = /etc/ly/wsetup.sh
|
||||
wayland_cmd = /etc/ly/wsetup.sh
|
||||
|
||||
# Add wayland specifier to session names
|
||||
#wayland_specifier = false
|
||||
wayland_specifier = false
|
||||
|
||||
# Wayland desktop environments
|
||||
#waylandsessions = /usr/share/wayland-sessions
|
||||
waylandsessions = /usr/share/wayland-sessions
|
||||
|
||||
|
||||
# xinitrc
|
||||
#xinitrc = ~/.xinitrc
|
||||
xinitrc = ~/.xinitrc
|
||||
|
||||
# Xorg server command
|
||||
#x_cmd = /usr/bin/X
|
||||
x_cmd = /usr/bin/X
|
||||
|
||||
# Xorg setup command
|
||||
#x_cmd_setup = /etc/ly/xsetup.sh
|
||||
x_cmd_setup = /etc/ly/xsetup.sh
|
||||
|
||||
# Xorg xauthority edition tool
|
||||
#xauth_cmd = /usr/bin/xauth
|
||||
xauth_cmd = /usr/bin/xauth
|
||||
|
||||
# Xorg desktop environments
|
||||
#xsessions = /usr/share/xsessions
|
||||
xsessions = /usr/share/xsessions
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = Bloq Majús
|
||||
err_alloc = falla d'assignació de memòria
|
||||
err_bounds = índex fora de límit
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = alokace paměti selhala
|
||||
err_bounds = index je mimo hranice pole
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = Feststelltaste
|
||||
err_alloc = Speicherzuweisung fehlgeschlagen
|
||||
err_bounds = Listenindex ist außerhalb des Bereichs
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = failed memory allocation
|
||||
err_bounds = out-of-bounds index
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = Bloq Mayús
|
||||
err_alloc = asignación de memoria fallida
|
||||
err_bounds = índice fuera de límites
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
capslock = verr.maj
|
||||
[ly]
|
||||
capslock = verr.maj
|
||||
err_alloc = échec d'allocation mémoire
|
||||
err_bounds = indice hors-limite
|
||||
err_chdir = échec de l'ouverture du répertoire home
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = impossibile allocare memoria
|
||||
err_bounds = indice fuori limite
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = nieudana alokacja pamięci
|
||||
err_bounds = indeks poza granicami
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = erro na atribuição de memória
|
||||
err_bounds = índice fora de limites
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = caixa alta
|
||||
err_alloc = alocação de memória malsucedida
|
||||
err_bounds = índice fora de limites
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = не удалось выделить память
|
||||
err_bounds = за пределами индекса
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = neuspijesna alokacija memorije
|
||||
err_bounds = izvan granica indeksa
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = misslyckad minnesallokering
|
||||
err_bounds = utanför banan index
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = basarisiz bellek ayirma
|
||||
err_bounds = sinirlarin disinda dizin
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
[ly]
|
||||
capslock = capslock
|
||||
err_alloc = невдале виділення пам'яті
|
||||
err_bounds = поза межами індексу
|
||||
|
|
378
src/config.c
378
src/config.c
|
@ -1,378 +0,0 @@
|
|||
#include "configator.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifndef DEBUG
|
||||
#define INI_LANG "/etc/ly/lang/%s.ini"
|
||||
#define INI_CONFIG "/etc/ly/config.ini"
|
||||
#else
|
||||
#define INI_LANG "../res/lang/%s.ini"
|
||||
#define INI_CONFIG "../res/config.ini"
|
||||
#endif
|
||||
|
||||
static void lang_handle(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
if (*((char**)data) != NULL)
|
||||
{
|
||||
free (*((char**)data));
|
||||
}
|
||||
|
||||
*((char**)data) = strdup(*pars);
|
||||
}
|
||||
|
||||
static void config_handle_u8(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
if (strcmp(*pars, "") == 0)
|
||||
{
|
||||
*((uint8_t*)data) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint8_t*)data) = atoi(*pars);
|
||||
}
|
||||
}
|
||||
|
||||
static void config_handle_u16(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
if (strcmp(*pars, "") == 0)
|
||||
{
|
||||
*((uint16_t*)data) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint16_t*)data) = atoi(*pars);
|
||||
}
|
||||
}
|
||||
|
||||
void config_handle_str(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
if (*((char**)data) != NULL)
|
||||
{
|
||||
free(*((char**)data));
|
||||
}
|
||||
|
||||
*((char**)data) = strdup(*pars);
|
||||
}
|
||||
|
||||
static void config_handle_char(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
*((char*)data) = **pars;
|
||||
}
|
||||
|
||||
static void config_handle_bool(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
*((bool*)data) = (strcmp("true", *pars) == 0);
|
||||
}
|
||||
|
||||
void lang_load()
|
||||
{
|
||||
// must be alphabetically sorted
|
||||
struct configator_param map_no_section[] =
|
||||
{
|
||||
{"capslock", &lang.capslock, lang_handle},
|
||||
{"err_alloc", &lang.err_alloc, lang_handle},
|
||||
{"err_bounds", &lang.err_bounds, lang_handle},
|
||||
{"err_chdir", &lang.err_chdir, lang_handle},
|
||||
{"err_console_dev", &lang.err_console_dev, lang_handle},
|
||||
{"err_dgn_oob", &lang.err_dgn_oob, lang_handle},
|
||||
{"err_domain", &lang.err_domain, lang_handle},
|
||||
{"err_hostname", &lang.err_hostname, lang_handle},
|
||||
{"err_mlock", &lang.err_mlock, lang_handle},
|
||||
{"err_null", &lang.err_null, lang_handle},
|
||||
{"err_pam", &lang.err_pam, lang_handle},
|
||||
{"err_pam_abort", &lang.err_pam_abort, lang_handle},
|
||||
{"err_pam_acct_expired", &lang.err_pam_acct_expired, lang_handle},
|
||||
{"err_pam_auth", &lang.err_pam_auth, lang_handle},
|
||||
{"err_pam_authinfo_unavail", &lang.err_pam_authinfo_unavail, lang_handle},
|
||||
{"err_pam_authok_reqd", &lang.err_pam_authok_reqd, lang_handle},
|
||||
{"err_pam_buf", &lang.err_pam_buf, lang_handle},
|
||||
{"err_pam_cred_err", &lang.err_pam_cred_err, lang_handle},
|
||||
{"err_pam_cred_expired", &lang.err_pam_cred_expired, lang_handle},
|
||||
{"err_pam_cred_insufficient", &lang.err_pam_cred_insufficient, lang_handle},
|
||||
{"err_pam_cred_unavail", &lang.err_pam_cred_unavail, lang_handle},
|
||||
{"err_pam_maxtries", &lang.err_pam_maxtries, lang_handle},
|
||||
{"err_pam_perm_denied", &lang.err_pam_perm_denied, lang_handle},
|
||||
{"err_pam_session", &lang.err_pam_session, lang_handle},
|
||||
{"err_pam_sys", &lang.err_pam_sys, lang_handle},
|
||||
{"err_pam_user_unknown", &lang.err_pam_user_unknown, lang_handle},
|
||||
{"err_path", &lang.err_path, lang_handle},
|
||||
{"err_perm_dir", &lang.err_perm_dir, lang_handle},
|
||||
{"err_perm_group", &lang.err_perm_group, lang_handle},
|
||||
{"err_perm_user", &lang.err_perm_user, lang_handle},
|
||||
{"err_pwnam", &lang.err_pwnam, lang_handle},
|
||||
{"err_user_gid", &lang.err_user_gid, lang_handle},
|
||||
{"err_user_init", &lang.err_user_init, lang_handle},
|
||||
{"err_user_uid", &lang.err_user_uid, lang_handle},
|
||||
{"err_xsessions_dir", &lang.err_xsessions_dir, lang_handle},
|
||||
{"err_xsessions_open", &lang.err_xsessions_open, lang_handle},
|
||||
{"f1", &lang.f1, lang_handle},
|
||||
{"f2", &lang.f2, lang_handle},
|
||||
{"login", &lang.login, lang_handle},
|
||||
{"logout", &lang.logout, lang_handle},
|
||||
{"numlock", &lang.numlock, lang_handle},
|
||||
{"password", &lang.password, lang_handle},
|
||||
{"shell", &lang.shell, lang_handle},
|
||||
{"wayland", &lang.wayland, lang_handle},
|
||||
{"xinitrc", &lang.xinitrc, lang_handle},
|
||||
};
|
||||
|
||||
uint16_t map_len[] = {45};
|
||||
struct configator_param* map[] =
|
||||
{
|
||||
map_no_section,
|
||||
};
|
||||
|
||||
uint16_t sections_len = 0;
|
||||
struct configator_param* sections = NULL;
|
||||
|
||||
struct configator lang;
|
||||
lang.map = map;
|
||||
lang.map_len = map_len;
|
||||
lang.sections = sections;
|
||||
lang.sections_len = sections_len;
|
||||
|
||||
char file[256];
|
||||
snprintf(file, 256, INI_LANG, config.lang);
|
||||
|
||||
if (access(file, F_OK) != -1)
|
||||
{
|
||||
configator(&lang, file);
|
||||
}
|
||||
}
|
||||
|
||||
void config_load(const char *cfg_path)
|
||||
{
|
||||
if (cfg_path == NULL)
|
||||
{
|
||||
cfg_path = INI_CONFIG;
|
||||
}
|
||||
// must be alphabetically sorted
|
||||
struct configator_param map_no_section[] =
|
||||
{
|
||||
{"animate", &config.animate, config_handle_bool},
|
||||
{"animation", &config.animation, config_handle_u8},
|
||||
{"asterisk", &config.asterisk, config_handle_char},
|
||||
{"bg", &config.bg, config_handle_u8},
|
||||
{"bigclock", &config.bigclock, config_handle_bool},
|
||||
{"blank_box", &config.blank_box, config_handle_bool},
|
||||
{"blank_password", &config.blank_password, config_handle_bool},
|
||||
{"clock", &config.clock, config_handle_str},
|
||||
{"console_dev", &config.console_dev, config_handle_str},
|
||||
{"default_input", &config.default_input, config_handle_u8},
|
||||
{"fg", &config.fg, config_handle_u8},
|
||||
{"hide_borders", &config.hide_borders, config_handle_bool},
|
||||
{"hide_f1_commands", &config.hide_f1_commands, config_handle_bool},
|
||||
{"input_len", &config.input_len, config_handle_u8},
|
||||
{"lang", &config.lang, config_handle_str},
|
||||
{"load", &config.load, config_handle_bool},
|
||||
{"margin_box_h", &config.margin_box_h, config_handle_u8},
|
||||
{"margin_box_v", &config.margin_box_v, config_handle_u8},
|
||||
{"max_desktop_len", &config.max_desktop_len, config_handle_u8},
|
||||
{"max_login_len", &config.max_login_len, config_handle_u8},
|
||||
{"max_password_len", &config.max_password_len, config_handle_u8},
|
||||
{"mcookie_cmd", &config.mcookie_cmd, config_handle_str},
|
||||
{"min_refresh_delta", &config.min_refresh_delta, config_handle_u16},
|
||||
{"path", &config.path, config_handle_str},
|
||||
{"restart_cmd", &config.restart_cmd, config_handle_str},
|
||||
{"save", &config.save, config_handle_bool},
|
||||
{"save_file", &config.save_file, config_handle_str},
|
||||
{"service_name", &config.service_name, config_handle_str},
|
||||
{"shutdown_cmd", &config.shutdown_cmd, config_handle_str},
|
||||
{"term_reset_cmd", &config.term_reset_cmd, config_handle_str},
|
||||
{"tty", &config.tty, config_handle_u8},
|
||||
{"wayland_cmd", &config.wayland_cmd, config_handle_str},
|
||||
{"wayland_specifier", &config.wayland_specifier, config_handle_bool},
|
||||
{"waylandsessions", &config.waylandsessions, config_handle_str},
|
||||
{"x_cmd", &config.x_cmd, config_handle_str},
|
||||
{"xinitrc", &config.xinitrc, config_handle_str},
|
||||
{"x_cmd_setup", &config.x_cmd_setup, config_handle_str},
|
||||
{"xauth_cmd", &config.xauth_cmd, config_handle_str},
|
||||
{"xsessions", &config.xsessions, config_handle_str},
|
||||
};
|
||||
|
||||
uint16_t map_len[] = {34};
|
||||
struct configator_param* map[] =
|
||||
{
|
||||
map_no_section,
|
||||
};
|
||||
|
||||
uint16_t sections_len = 0;
|
||||
struct configator_param* sections = NULL;
|
||||
|
||||
struct configator config;
|
||||
config.map = map;
|
||||
config.map_len = map_len;
|
||||
config.sections = sections;
|
||||
config.sections_len = sections_len;
|
||||
|
||||
configator(&config, (char *) cfg_path);
|
||||
}
|
||||
|
||||
void lang_defaults()
|
||||
{
|
||||
lang.capslock = strdup("capslock");
|
||||
lang.err_alloc = strdup("failed memory allocation");
|
||||
lang.err_bounds = strdup("out-of-bounds index");
|
||||
lang.err_chdir = strdup("failed to open home folder");
|
||||
lang.err_console_dev = strdup("failed to access console");
|
||||
lang.err_dgn_oob = strdup("log message");
|
||||
lang.err_domain = strdup("invalid domain");
|
||||
lang.err_hostname = strdup("failed to get hostname");
|
||||
lang.err_mlock = strdup("failed to lock password memory");
|
||||
lang.err_null = strdup("null pointer");
|
||||
lang.err_pam = strdup("pam transaction failed");
|
||||
lang.err_pam_abort = strdup("pam transaction aborted");
|
||||
lang.err_pam_acct_expired = strdup("account expired");
|
||||
lang.err_pam_auth = strdup("authentication error");
|
||||
lang.err_pam_authinfo_unavail = strdup("failed to get user info");
|
||||
lang.err_pam_authok_reqd = strdup("token expired");
|
||||
lang.err_pam_buf = strdup("memory buffer error");
|
||||
lang.err_pam_cred_err = strdup("failed to set credentials");
|
||||
lang.err_pam_cred_expired = strdup("credentials expired");
|
||||
lang.err_pam_cred_insufficient = strdup("insufficient credentials");
|
||||
lang.err_pam_cred_unavail = strdup("failed to get credentials");
|
||||
lang.err_pam_maxtries = strdup("reached maximum tries limit");
|
||||
lang.err_pam_perm_denied = strdup("permission denied");
|
||||
lang.err_pam_session = strdup("session error");
|
||||
lang.err_pam_sys = strdup("system error");
|
||||
lang.err_pam_user_unknown = strdup("unknown user");
|
||||
lang.err_path = strdup("failed to set path");
|
||||
lang.err_perm_dir = strdup("failed to change current directory");
|
||||
lang.err_perm_group = strdup("failed to downgrade group permissions");
|
||||
lang.err_perm_user = strdup("failed to downgrade user permissions");
|
||||
lang.err_pwnam = strdup("failed to get user info");
|
||||
lang.err_user_gid = strdup("failed to set user GID");
|
||||
lang.err_user_init = strdup("failed to initialize user");
|
||||
lang.err_user_uid = strdup("failed to set user UID");
|
||||
lang.err_xsessions_dir = strdup("failed to find sessions folder");
|
||||
lang.err_xsessions_open = strdup("failed to open sessions folder");
|
||||
lang.f1 = strdup("F1 shutdown");
|
||||
lang.f2 = strdup("F2 reboot");
|
||||
lang.login = strdup("login:");
|
||||
lang.logout = strdup("logged out");
|
||||
lang.numlock = strdup("numlock");
|
||||
lang.password = strdup("password:");
|
||||
lang.shell = strdup("shell");
|
||||
lang.wayland = strdup("wayland");
|
||||
lang.xinitrc = strdup("xinitrc");
|
||||
}
|
||||
|
||||
void config_defaults()
|
||||
{
|
||||
config.animate = false;
|
||||
config.animation = 0;
|
||||
config.asterisk = '*';
|
||||
config.bg = 0;
|
||||
config.bigclock = false;
|
||||
config.blank_box = true;
|
||||
config.blank_password = false;
|
||||
config.clock = NULL;
|
||||
config.console_dev = strdup("/dev/console");
|
||||
config.default_input = LOGIN_INPUT;
|
||||
config.fg = 9;
|
||||
config.hide_borders = false;
|
||||
config.input_len = 34;
|
||||
config.lang = strdup("en");
|
||||
config.load = true;
|
||||
config.margin_box_h = 2;
|
||||
config.margin_box_v = 1;
|
||||
config.max_desktop_len = 100;
|
||||
config.max_login_len = 255;
|
||||
config.max_password_len = 255;
|
||||
config.mcookie_cmd = strdup("/usr/bin/mcookie");
|
||||
config.min_refresh_delta = 5;
|
||||
config.path = strdup("/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin");
|
||||
config.restart_cmd = strdup("/sbin/shutdown -r now");
|
||||
config.save = true;
|
||||
config.save_file = strdup("/etc/ly/save");
|
||||
config.service_name = strdup("ly");
|
||||
config.shutdown_cmd = strdup("/sbin/shutdown -a now");
|
||||
config.term_reset_cmd = strdup("/usr/bin/tput reset");
|
||||
config.tty = 2;
|
||||
config.wayland_cmd = strdup("/etc/ly/wsetup.sh");
|
||||
config.wayland_specifier = false;
|
||||
config.waylandsessions = strdup("/usr/share/wayland-sessions");
|
||||
config.x_cmd = strdup("/usr/bin/X");
|
||||
config.xinitrc = strdup("~/.xinitrc");
|
||||
config.x_cmd_setup = strdup("/etc/ly/xsetup.sh");
|
||||
config.xauth_cmd = strdup("/usr/bin/xauth");
|
||||
config.xsessions = strdup("/usr/share/xsessions");
|
||||
}
|
||||
|
||||
void lang_free()
|
||||
{
|
||||
free(lang.capslock);
|
||||
free(lang.err_alloc);
|
||||
free(lang.err_bounds);
|
||||
free(lang.err_chdir);
|
||||
free(lang.err_console_dev);
|
||||
free(lang.err_dgn_oob);
|
||||
free(lang.err_domain);
|
||||
free(lang.err_hostname);
|
||||
free(lang.err_mlock);
|
||||
free(lang.err_null);
|
||||
free(lang.err_pam);
|
||||
free(lang.err_pam_abort);
|
||||
free(lang.err_pam_acct_expired);
|
||||
free(lang.err_pam_auth);
|
||||
free(lang.err_pam_authinfo_unavail);
|
||||
free(lang.err_pam_authok_reqd);
|
||||
free(lang.err_pam_buf);
|
||||
free(lang.err_pam_cred_err);
|
||||
free(lang.err_pam_cred_expired);
|
||||
free(lang.err_pam_cred_insufficient);
|
||||
free(lang.err_pam_cred_unavail);
|
||||
free(lang.err_pam_maxtries);
|
||||
free(lang.err_pam_perm_denied);
|
||||
free(lang.err_pam_session);
|
||||
free(lang.err_pam_sys);
|
||||
free(lang.err_pam_user_unknown);
|
||||
free(lang.err_path);
|
||||
free(lang.err_perm_dir);
|
||||
free(lang.err_perm_group);
|
||||
free(lang.err_perm_user);
|
||||
free(lang.err_pwnam);
|
||||
free(lang.err_user_gid);
|
||||
free(lang.err_user_init);
|
||||
free(lang.err_user_uid);
|
||||
free(lang.err_xsessions_dir);
|
||||
free(lang.err_xsessions_open);
|
||||
free(lang.f1);
|
||||
free(lang.f2);
|
||||
free(lang.login);
|
||||
free(lang.logout);
|
||||
free(lang.numlock);
|
||||
free(lang.password);
|
||||
free(lang.shell);
|
||||
free(lang.wayland);
|
||||
free(lang.xinitrc);
|
||||
}
|
||||
|
||||
void config_free()
|
||||
{
|
||||
free(config.clock);
|
||||
free(config.console_dev);
|
||||
free(config.lang);
|
||||
free(config.mcookie_cmd);
|
||||
free(config.path);
|
||||
free(config.restart_cmd);
|
||||
free(config.save_file);
|
||||
free(config.service_name);
|
||||
free(config.shutdown_cmd);
|
||||
free(config.term_reset_cmd);
|
||||
free(config.wayland_cmd);
|
||||
free(config.waylandsessions);
|
||||
free(config.x_cmd);
|
||||
free(config.xinitrc);
|
||||
free(config.x_cmd_setup);
|
||||
free(config.xauth_cmd);
|
||||
free(config.xsessions);
|
||||
}
|
|
@ -105,12 +105,4 @@ struct config
|
|||
extern struct lang lang;
|
||||
extern struct config config;
|
||||
|
||||
void config_handle_str(void* data, char** pars, const int pars_count);
|
||||
void lang_load();
|
||||
void config_load(const char *cfg_path);
|
||||
void lang_defaults();
|
||||
void config_defaults();
|
||||
void lang_free();
|
||||
void config_free();
|
||||
|
||||
#endif
|
||||
|
|
40
src/main.zig
40
src/main.zig
|
@ -1,7 +1,7 @@
|
|||
const std = @import("std");
|
||||
const configuration = @import("config.zig");
|
||||
|
||||
pub const c = @cImport({
|
||||
@cInclude("configator.h");
|
||||
@cInclude("dragonfail.h");
|
||||
@cInclude("termbox.h");
|
||||
|
||||
|
@ -42,15 +42,11 @@ pub fn main() !void {
|
|||
config = config_ptr.*;
|
||||
lang = lang_ptr.*;
|
||||
|
||||
// Load configuration
|
||||
c.config_defaults();
|
||||
c.lang_defaults();
|
||||
|
||||
// Initialize error library
|
||||
log_init(c.dgn_init());
|
||||
|
||||
// Parse command line arguments
|
||||
var config_path: []const u8 = undefined;
|
||||
var config_path: []const u8 = "";
|
||||
|
||||
var process_args = try std.process.argsAlloc(allocator);
|
||||
defer std.process.argsFree(allocator, process_args);
|
||||
|
@ -65,26 +61,32 @@ pub fn main() !void {
|
|||
std.debug.print("\n", .{});
|
||||
std.debug.print("If you want to configure Ly, please check the config file, usually located at /etc/ly/config.ini.\n", .{});
|
||||
std.os.exit(0);
|
||||
return;
|
||||
} else if (std.mem.eql(u8, first_arg, "--version") or std.mem.eql(u8, first_arg, "-v")) {
|
||||
std.debug.print("Ly version {s}.\n", .{LY_VERSION});
|
||||
std.os.exit(0);
|
||||
return;
|
||||
} else if (std.mem.eql(u8, first_arg, "--config") or std.mem.eql(u8, first_arg, "-c")) {
|
||||
if (process_args.len != 3) {
|
||||
std.debug.print("Invalid usage! Correct usage: 'ly --config <path>'.\n", .{});
|
||||
std.os.exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
config_path = process_args[2];
|
||||
} else {
|
||||
std.debug.print("Invalid argument: '{s}'.\n", .{first_arg});
|
||||
std.os.exit(1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Load configuration and language
|
||||
try configuration.config_load(config_path);
|
||||
try configuration.lang_load();
|
||||
|
||||
if (c.dgn_catch() != 0) {
|
||||
configuration.config_free();
|
||||
configuration.lang_free();
|
||||
std.os.exit(1);
|
||||
}
|
||||
|
||||
// Initialize inputs
|
||||
var desktop = try allocator.create(c.struct_desktop);
|
||||
defer allocator.destroy(desktop);
|
||||
|
@ -99,16 +101,6 @@ pub fn main() !void {
|
|||
c.input_text(username, config.max_login_len);
|
||||
c.input_text(password, config.max_password_len);
|
||||
|
||||
if (c.dgn_catch() != 0) {
|
||||
c.config_free();
|
||||
c.lang_free();
|
||||
std.os.exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
c.config_load(config_path.ptr);
|
||||
c.lang_load();
|
||||
|
||||
c.desktop_load(desktop);
|
||||
c.load(desktop, username);
|
||||
|
||||
|
@ -338,14 +330,14 @@ pub fn main() !void {
|
|||
|
||||
// Unload configuration
|
||||
c.draw_free(buffer);
|
||||
c.lang_free();
|
||||
configuration.lang_free();
|
||||
|
||||
if (shutdown) {
|
||||
var shutdown_cmd = try std.fmt.allocPrint(allocator, "{s}", .{config.shutdown_cmd});
|
||||
// This will never be freed! But it's fine, we're shutting down the system anyway
|
||||
defer allocator.free(shutdown_cmd);
|
||||
|
||||
c.config_free();
|
||||
configuration.config_free();
|
||||
|
||||
std.process.execv(allocator, &[_][]const u8{ "/bin/sh", "-c", shutdown_cmd }) catch return;
|
||||
} else if (reboot) {
|
||||
|
@ -353,11 +345,11 @@ pub fn main() !void {
|
|||
// This will never be freed! But it's fine, we're rebooting the system anyway
|
||||
defer allocator.free(restart_cmd);
|
||||
|
||||
c.config_free();
|
||||
configuration.config_free();
|
||||
|
||||
std.process.execv(allocator, &[_][]const u8{ "/bin/sh", "-c", restart_cmd }) catch return;
|
||||
} else {
|
||||
c.config_free();
|
||||
configuration.config_free();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
12
src/utils.c
12
src/utils.c
|
@ -19,6 +19,16 @@
|
|||
#include <linux/vt.h>
|
||||
#endif
|
||||
|
||||
static void config_handle_str(void* data, char** pars, const int pars_count)
|
||||
{
|
||||
if (*((char**)data) != NULL)
|
||||
{
|
||||
free(*((char**)data));
|
||||
}
|
||||
|
||||
*((char**)data) = strdup(*pars);
|
||||
}
|
||||
|
||||
void desktop_crawl(
|
||||
struct desktop* target,
|
||||
char* sessions,
|
||||
|
@ -273,4 +283,4 @@ void load(struct desktop* desktop, struct text* login)
|
|||
|
||||
fclose(fp);
|
||||
free(line);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue