mirror of
https://github.com/fairyglade/ly.git
synced 2025-12-20 19:24:53 +00:00
Update to Zig 0.15.0 (closes #829)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
22
src/auth.zig
22
src/auth.zig
@@ -24,12 +24,12 @@ pub const AuthOptions = struct {
|
||||
};
|
||||
|
||||
var xorg_pid: std.posix.pid_t = 0;
|
||||
pub fn xorgSignalHandler(i: c_int) callconv(.C) void {
|
||||
pub fn xorgSignalHandler(i: c_int) callconv(.c) void {
|
||||
if (xorg_pid > 0) _ = std.c.kill(xorg_pid, i);
|
||||
}
|
||||
|
||||
var child_pid: std.posix.pid_t = 0;
|
||||
pub fn sessionSignalHandler(i: c_int) callconv(.C) void {
|
||||
pub fn sessionSignalHandler(i: c_int) callconv(.c) void {
|
||||
if (child_pid > 0) _ = std.c.kill(child_pid, i);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ pub fn authenticate(options: AuthOptions, current_environment: Environment, logi
|
||||
// If we receive SIGTERM, forward it to child_pid
|
||||
const act = std.posix.Sigaction{
|
||||
.handler = .{ .handler = &sessionSignalHandler },
|
||||
.mask = std.posix.empty_sigset,
|
||||
.mask = std.posix.sigemptyset(),
|
||||
.flags = 0,
|
||||
};
|
||||
std.posix.sigaction(std.posix.SIG.TERM, &act, null);
|
||||
@@ -230,7 +230,7 @@ fn loginConv(
|
||||
msg: ?[*]?*const interop.pam.pam_message,
|
||||
resp: ?*?[*]interop.pam.pam_response,
|
||||
appdata_ptr: ?*anyopaque,
|
||||
) callconv(.C) c_int {
|
||||
) callconv(.c) c_int {
|
||||
const message_count: u32 = @intCast(num_msg);
|
||||
const messages = msg.?;
|
||||
|
||||
@@ -299,13 +299,15 @@ fn getXPid(display_num: u8) !i32 {
|
||||
const file = try std.fs.openFileAbsolute(file_name, .{});
|
||||
defer file.close();
|
||||
|
||||
var file_buf: [20]u8 = undefined;
|
||||
var fbs = std.io.fixedBufferStream(&file_buf);
|
||||
var file_buffer: [32]u8 = undefined;
|
||||
var file_reader = file.reader(&file_buffer);
|
||||
var reader = &file_reader.interface;
|
||||
|
||||
_ = try file.reader().streamUntilDelimiter(fbs.writer(), '\n', 20);
|
||||
const line = fbs.getWritten();
|
||||
var buffer: [20]u8 = undefined;
|
||||
var writer = std.Io.Writer.fixed(&buffer);
|
||||
|
||||
return std.fmt.parseInt(i32, std.mem.trim(u8, line, " "), 10);
|
||||
const written = try reader.streamDelimiter(&writer, '\n');
|
||||
return std.fmt.parseInt(i32, std.mem.trim(u8, buffer[0..written], " "), 10);
|
||||
}
|
||||
|
||||
fn createXauthFile(pwd: [:0]const u8) ![:0]const u8 {
|
||||
@@ -452,7 +454,7 @@ fn executeX11Cmd(shell: [*:0]const u8, pw_dir: [*:0]const u8, options: AuthOptio
|
||||
// If we receive SIGTERM, clean up by killing the xorg_pid process
|
||||
const act = std.posix.Sigaction{
|
||||
.handler = .{ .handler = &xorgSignalHandler },
|
||||
.mask = std.posix.empty_sigset,
|
||||
.mask = std.posix.sigemptyset(),
|
||||
.flags = 0,
|
||||
};
|
||||
std.posix.sigaction(std.posix.SIG.TERM, &act, null);
|
||||
|
||||
@@ -40,7 +40,6 @@ const removed_properties = [_][]const u8{
|
||||
};
|
||||
|
||||
var temporary_allocator = std.heap.page_allocator;
|
||||
var buffer = std.mem.zeroes([10 * color_properties.len]u8);
|
||||
|
||||
pub var auto_eight_colors: bool = true;
|
||||
|
||||
@@ -205,21 +204,21 @@ pub fn tryMigrateSaveFile(user_buf: *[32]u8) Save {
|
||||
var file = std.fs.openFileAbsolute(path, .{}) catch return save;
|
||||
defer file.close();
|
||||
|
||||
const reader = file.reader();
|
||||
var file_buffer: [64]u8 = undefined;
|
||||
var file_reader = file.reader(&file_buffer);
|
||||
var reader = &file_reader.interface;
|
||||
|
||||
var user_fbs = std.io.fixedBufferStream(user_buf);
|
||||
reader.streamUntilDelimiter(user_fbs.writer(), '\n', user_buf.len) catch return save;
|
||||
const user = user_fbs.getWritten();
|
||||
if (user.len > 0) save.user = user;
|
||||
var user_writer = std.Io.Writer.fixed(user_buf);
|
||||
var written = reader.streamDelimiter(&user_writer, '\n') catch return save;
|
||||
if (written > 0) save.user = user_buf[0..written];
|
||||
|
||||
var session_buf: [20]u8 = undefined;
|
||||
var session_fbs = std.io.fixedBufferStream(&session_buf);
|
||||
reader.streamUntilDelimiter(session_fbs.writer(), '\n', session_buf.len) catch return save;
|
||||
var session_writer = std.Io.Writer.fixed(&session_buf);
|
||||
written = reader.streamDelimiter(&session_writer, '\n') catch return save;
|
||||
|
||||
const session_index_str = session_fbs.getWritten();
|
||||
var session_index: ?usize = null;
|
||||
if (session_index_str.len > 0) {
|
||||
session_index = std.fmt.parseUnsigned(usize, session_index_str, 10) catch return save;
|
||||
if (written > 0) {
|
||||
session_index = std.fmt.parseUnsigned(usize, session_buf[0..written], 10) catch return save;
|
||||
}
|
||||
save.session_index = session_index;
|
||||
}
|
||||
|
||||
38
src/main.zig
38
src/main.zig
@@ -36,7 +36,7 @@ const temporary_allocator = std.heap.page_allocator;
|
||||
const ly_top_str = "Ly version " ++ build_options.version;
|
||||
|
||||
var session_pid: std.posix.pid_t = -1;
|
||||
fn signalHandler(i: c_int) callconv(.C) void {
|
||||
fn signalHandler(i: c_int) callconv(.c) void {
|
||||
if (session_pid == 0) return;
|
||||
|
||||
// Forward signal to session to clean up
|
||||
@@ -50,7 +50,7 @@ fn signalHandler(i: c_int) callconv(.C) void {
|
||||
std.c.exit(i);
|
||||
}
|
||||
|
||||
fn ttyControlTransferSignalHandler(_: c_int) callconv(.C) void {
|
||||
fn ttyControlTransferSignalHandler(_: c_int) callconv(.c) void {
|
||||
_ = termbox.tb_shutdown();
|
||||
}
|
||||
|
||||
@@ -60,16 +60,20 @@ pub fn main() !void {
|
||||
var shutdown_cmd: []const u8 = undefined;
|
||||
var restart_cmd: []const u8 = undefined;
|
||||
|
||||
const stderr = std.io.getStdErr().writer();
|
||||
var stderr_buffer: [128]u8 = undefined;
|
||||
var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer);
|
||||
var stderr = &stderr_writer.interface;
|
||||
|
||||
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: {s}\n", .{@errorName(shutdown_error)}) catch std.process.exit(1);
|
||||
stderr.flush() 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: {s}\n", .{@errorName(restart_error)}) catch std.process.exit(1);
|
||||
stderr.flush() catch std.process.exit(1);
|
||||
} else {
|
||||
// The user has quit Ly using Ctrl+C
|
||||
temporary_allocator.free(shutdown_cmd);
|
||||
@@ -97,6 +101,7 @@ pub fn main() !void {
|
||||
var diag = clap.Diagnostic{};
|
||||
var res = clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ .diagnostic = &diag, .allocator = allocator }) catch |err| {
|
||||
diag.report(stderr, err) catch {};
|
||||
try stderr.flush();
|
||||
return err;
|
||||
};
|
||||
defer res.deinit();
|
||||
@@ -112,10 +117,12 @@ pub fn main() !void {
|
||||
try clap.help(stderr, clap.Help, ¶ms, .{});
|
||||
|
||||
_ = try stderr.write("Note: if you want to configure Ly, please check the config file, which is located at " ++ build_options.config_directory ++ "/ly/config.ini.\n");
|
||||
try stderr.flush();
|
||||
std.process.exit(0);
|
||||
}
|
||||
if (res.args.version != 0) {
|
||||
_ = try stderr.write("Ly version " ++ build_options.version ++ "\n");
|
||||
try stderr.flush();
|
||||
std.process.exit(0);
|
||||
}
|
||||
|
||||
@@ -222,17 +229,9 @@ pub fn main() !void {
|
||||
log_file = try std.fs.openFileAbsolute("/dev/null", .{ .mode = .write_only });
|
||||
}
|
||||
|
||||
const log_writer = log_file.writer();
|
||||
|
||||
// if (migrator.mapped_config_fields) save_migrated_config: {
|
||||
// var file = try std.fs.cwd().createFile(config_path, .{});
|
||||
// defer file.close();
|
||||
|
||||
// const writer = file.writer();
|
||||
// ini.writeFromStruct(config, writer, null, true, .{}) catch {
|
||||
// break :save_migrated_config;
|
||||
// };
|
||||
// }
|
||||
var log_buffer: [1024]u8 = undefined;
|
||||
var log_file_writer = log_file.writer(&log_buffer);
|
||||
var log_writer = &log_file_writer.interface;
|
||||
|
||||
// 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
|
||||
@@ -249,7 +248,7 @@ pub fn main() !void {
|
||||
|
||||
const act = std.posix.Sigaction{
|
||||
.handler = .{ .handler = &signalHandler },
|
||||
.mask = std.posix.empty_sigset,
|
||||
.mask = std.posix.sigemptyset(),
|
||||
.flags = 0,
|
||||
};
|
||||
std.posix.sigaction(std.posix.SIG.TERM, &act, null);
|
||||
@@ -818,11 +817,16 @@ pub fn main() !void {
|
||||
var file = std.fs.cwd().createFile(save_path, .{}) catch break :save_last_settings;
|
||||
defer file.close();
|
||||
|
||||
var file_buffer: [64]u8 = undefined;
|
||||
var file_writer = file.writer(&file_buffer);
|
||||
var writer = &file_writer.interface;
|
||||
|
||||
const save_data = Save{
|
||||
.user = login.getCurrentUser(),
|
||||
.session_index = session.label.current,
|
||||
};
|
||||
ini.writeFromStruct(save_data, file.writer(), null, .{}) catch break :save_last_settings;
|
||||
ini.writeFromStruct(save_data, writer, null, .{}) catch break :save_last_settings;
|
||||
try writer.flush();
|
||||
|
||||
// Delete previous save file if it exists
|
||||
if (migrator.maybe_save_file) |path| std.fs.cwd().deleteFile(path) catch {};
|
||||
@@ -855,7 +859,7 @@ pub fn main() !void {
|
||||
// Signal action to give up control on the TTY
|
||||
const tty_control_transfer_act = std.posix.Sigaction{
|
||||
.handler = .{ .handler = &ttyControlTransferSignalHandler },
|
||||
.mask = std.posix.empty_sigset,
|
||||
.mask = std.posix.sigemptyset(),
|
||||
.flags = 0,
|
||||
};
|
||||
std.posix.sigaction(std.posix.SIG.CHLD, &tty_control_transfer_act, null);
|
||||
|
||||
Reference in New Issue
Block a user