mirror of
https://github.com/fairyglade/ly.git
synced 2025-12-20 19:24:53 +00:00
Only shutdown or restart after deinitializing everything
Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
37
src/main.zig
37
src/main.zig
@@ -22,6 +22,7 @@ const utils = @import("tui/utils.zig");
|
|||||||
const Ini = ini.Ini;
|
const Ini = ini.Ini;
|
||||||
const termbox = interop.termbox;
|
const termbox = interop.termbox;
|
||||||
const unistd = interop.unistd;
|
const unistd = interop.unistd;
|
||||||
|
const temporary_allocator = std.heap.page_allocator;
|
||||||
|
|
||||||
var session_pid: std.posix.pid_t = -1;
|
var session_pid: std.posix.pid_t = -1;
|
||||||
pub fn signalHandler(i: c_int) callconv(.C) void {
|
pub fn signalHandler(i: c_int) callconv(.C) void {
|
||||||
@@ -39,11 +40,32 @@ pub fn signalHandler(i: c_int) callconv(.C) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
|
var shutdown = false;
|
||||||
|
var restart = false;
|
||||||
|
var shutdown_cmd: []const u8 = undefined;
|
||||||
|
var restart_cmd: []const u8 = undefined;
|
||||||
|
|
||||||
|
const stderr = std.io.getStdErr().writer();
|
||||||
|
|
||||||
|
defer {
|
||||||
|
// If we can't shutdown or restart due to an error, we print it to standard error. If that fails, just bail out
|
||||||
|
if (shutdown) {
|
||||||
|
const shutdown_error = std.process.execv(temporary_allocator, &[_][]const u8{ "/bin/sh", "-c", shutdown_cmd });
|
||||||
|
stderr.print("error: couldn't shutdown: {any}\n", .{shutdown_error}) catch std.process.exit(1);
|
||||||
|
} else if (restart) {
|
||||||
|
const restart_error = std.process.execv(temporary_allocator, &[_][]const u8{ "/bin/sh", "-c", restart_cmd });
|
||||||
|
stderr.print("error: couldn't restart: {any}\n", .{restart_error}) catch std.process.exit(1);
|
||||||
|
} else {
|
||||||
|
// The user has quit Ly using Ctrl+C
|
||||||
|
temporary_allocator.free(shutdown_cmd);
|
||||||
|
temporary_allocator.free(restart_cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
|
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
const stderr = std.io.getStdErr().writer();
|
|
||||||
|
|
||||||
// Load arguments
|
// Load arguments
|
||||||
const params = comptime clap.parseParamsComptime(
|
const params = comptime clap.parseParamsComptime(
|
||||||
@@ -138,6 +160,11 @@ pub fn main() !void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These strings only end up getting freed if the user quits Ly using Ctrl+C, which is fine since in the other cases
|
||||||
|
// we end up shutting down or restarting the system
|
||||||
|
shutdown_cmd = try temporary_allocator.dupe(u8, config.shutdown_cmd);
|
||||||
|
restart_cmd = try temporary_allocator.dupe(u8, config.restart_cmd);
|
||||||
|
|
||||||
if (!build_options.enable_x11_support) try info_line.addMessage(lang.no_x11_support, config.bg, config.fg);
|
if (!build_options.enable_x11_support) try info_line.addMessage(lang.no_x11_support, config.bg, config.fg);
|
||||||
|
|
||||||
interop.setNumlock(config.numlock) catch {};
|
interop.setNumlock(config.numlock) catch {};
|
||||||
@@ -277,8 +304,6 @@ pub fn main() !void {
|
|||||||
var run = true;
|
var run = true;
|
||||||
var update = true;
|
var update = true;
|
||||||
var resolution_changed = false;
|
var resolution_changed = false;
|
||||||
var shutdown = false;
|
|
||||||
var restart = false;
|
|
||||||
var auth_fails: u64 = 0;
|
var auth_fails: u64 = 0;
|
||||||
|
|
||||||
// Switch to selected TTY if possible
|
// Switch to selected TTY if possible
|
||||||
@@ -685,12 +710,6 @@ pub fn main() !void {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shutdown) {
|
|
||||||
return std.process.execv(allocator, &[_][]const u8{ "/bin/sh", "-c", config.shutdown_cmd });
|
|
||||||
} else if (restart) {
|
|
||||||
return std.process.execv(allocator, &[_][]const u8{ "/bin/sh", "-c", config.restart_cmd });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn getAuthErrorMsg(err: anyerror, lang: Lang) []const u8 {
|
fn getAuthErrorMsg(err: anyerror, lang: Lang) []const u8 {
|
||||||
|
|||||||
Reference in New Issue
Block a user