diff --git a/src/auth.zig b/src/auth.zig index 4fc46b5..983fea8 100644 --- a/src/auth.zig +++ b/src/auth.zig @@ -32,7 +32,7 @@ pub fn authenticate(config: Config, current_environment: Session.Environment, lo // Set the XDG environment variables setXdgSessionEnv(current_environment.display_server); - try setXdgEnv(tty_str, current_environment.xdg_session_desktop, current_environment.xdg_desktop_names orelse ""); + try setXdgEnv(tty_str, current_environment.xdg_session_desktop orelse "", current_environment.xdg_desktop_names orelse ""); // Open the PAM session var credentials = [_:null]?[*:0]const u8{ login, password }; diff --git a/src/main.zig b/src/main.zig index 80ffb04..60f53fa 100644 --- a/src/main.zig +++ b/src/main.zig @@ -234,13 +234,13 @@ pub fn main() !void { var session = Session.init(allocator, &buffer, lang); defer session.deinit(); - session.addEnvironment(.{ .Name = lang.shell }, "", .shell) catch { + session.addEnvironment(.{ .Name = lang.shell }, null, .shell) catch { try info_line.addMessage(lang.err_alloc, config.error_bg, config.error_fg); }; if (build_options.enable_x11_support) { if (config.xinitrc) |xinitrc| { - session.addEnvironment(.{ .Name = lang.xinitrc, .Exec = xinitrc }, "", .xinitrc) catch { + session.addEnvironment(.{ .Name = lang.xinitrc, .Exec = xinitrc }, null, .xinitrc) catch { try info_line.addMessage(lang.err_alloc, config.error_bg, config.error_fg); }; } diff --git a/src/tui/components/Session.zig b/src/tui/components/Session.zig index 273c18a..fbc2620 100644 --- a/src/tui/components/Session.zig +++ b/src/tui/components/Session.zig @@ -16,8 +16,8 @@ const Session = @This(); pub const Environment = struct { entry_ini: ?Ini(Entry) = null, name: [:0]const u8 = "", - xdg_session_desktop: [:0]const u8 = "", - xdg_desktop_names: ?[:0]const u8 = "", + xdg_session_desktop: ?[:0]const u8 = null, + xdg_desktop_names: ?[:0]const u8 = null, cmd: []const u8 = "", specifier: []const u8 = "", display_server: DisplayServer = .wayland, @@ -26,7 +26,7 @@ pub const Environment = struct { const DesktopEntry = struct { Exec: []const u8 = "", Name: [:0]const u8 = "", - DesktopNames: ?[]const u8 = null, + DesktopNames: ?[:0]u8 = null, }; pub const Entry = struct { @"Desktop Entry": DesktopEntry = .{} }; @@ -44,34 +44,25 @@ pub fn init(allocator: Allocator, buffer: *TerminalBuffer, lang: Lang) Session { pub fn deinit(self: Session) void { for (self.label.list.items) |*environment| { if (environment.entry_ini) |*entry_ini| entry_ini.deinit(); - if (environment.xdg_desktop_names) |desktop_name| self.label.allocator.free(desktop_name); - self.label.allocator.free(environment.xdg_session_desktop); + if (environment.xdg_session_desktop) |session_desktop| self.label.allocator.free(session_desktop); } self.label.deinit(); } -pub fn addEnvironment(self: *Session, entry: DesktopEntry, xdg_session_desktop: []const u8, display_server: DisplayServer) !void { +pub fn addEnvironment(self: *Session, entry: DesktopEntry, xdg_session_desktop: ?[:0]const u8, display_server: DisplayServer) !void { var xdg_desktop_names: ?[:0]const u8 = null; if (entry.DesktopNames) |desktop_names| { - const desktop_names_z = try self.label.allocator.dupeZ(u8, desktop_names); - for (desktop_names_z) |*c| { + for (desktop_names) |*c| { if (c.* == ';') c.* = ':'; } - xdg_desktop_names = desktop_names_z; + xdg_desktop_names = desktop_names; } - errdefer { - if (xdg_desktop_names) |desktop_names| self.label.allocator.free(desktop_names); - } - - const session_desktop = try self.label.allocator.dupeZ(u8, xdg_session_desktop); - errdefer self.label.allocator.free(session_desktop); - try self.label.addItem(.{ .entry_ini = null, .name = entry.Name, - .xdg_session_desktop = session_desktop, + .xdg_session_desktop = xdg_session_desktop, .xdg_desktop_names = xdg_desktop_names, .cmd = entry.Exec, .specifier = switch (display_server) { @@ -83,28 +74,20 @@ pub fn addEnvironment(self: *Session, entry: DesktopEntry, xdg_session_desktop: }); } -pub fn addEnvironmentWithIni(self: *Session, entry_ini: Ini(Entry), xdg_session_desktop: []const u8, display_server: DisplayServer) !void { +pub fn addEnvironmentWithIni(self: *Session, entry_ini: Ini(Entry), xdg_session_desktop: ?[:0]const u8, display_server: DisplayServer) !void { const entry = entry_ini.data.@"Desktop Entry"; var xdg_desktop_names: ?[:0]const u8 = null; if (entry.DesktopNames) |desktop_names| { - const desktop_names_z = try self.label.allocator.dupeZ(u8, desktop_names); - for (desktop_names_z) |*c| { + for (desktop_names) |*c| { if (c.* == ';') c.* = ':'; } - xdg_desktop_names = desktop_names_z; + xdg_desktop_names = desktop_names; } - errdefer { - if (xdg_desktop_names) |desktop_names| self.label.allocator.free(desktop_names); - } - - const session_desktop = try self.label.allocator.dupeZ(u8, xdg_session_desktop); - errdefer self.label.allocator.free(session_desktop); - try self.label.addItem(.{ .entry_ini = entry_ini, .name = entry.Name, - .xdg_session_desktop = session_desktop, + .xdg_session_desktop = xdg_session_desktop, .xdg_desktop_names = xdg_desktop_names, .cmd = entry.Exec, .specifier = switch (display_server) { @@ -139,7 +122,10 @@ pub fn crawl(self: *Session, path: []const u8, display_server: DisplayServer) !v xdg_session_desktop = std.fs.path.stem(item.name); } - try self.addEnvironmentWithIni(entry_ini, xdg_session_desktop, display_server); + const session_desktop = try self.label.allocator.dupeZ(u8, xdg_session_desktop); + errdefer self.label.allocator.free(session_desktop); + + try self.addEnvironmentWithIni(entry_ini, session_desktop, display_server); } }