fix: add manual restart for win32 console builds and fix restart for win32 gui builds
closes #399
This commit is contained in:
parent
b3efc952ee
commit
ab3373ab33
1 changed files with 35 additions and 0 deletions
35
src/main.zig
35
src/main.zig
|
|
@ -1119,6 +1119,7 @@ fn resolve_executable(executable: [:0]const u8) [:0]const u8 {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn restart() noreturn {
|
fn restart() noreturn {
|
||||||
|
if (builtin.os.tag == .windows) return restart_win32();
|
||||||
const executable = resolve_executable(std.mem.span(std.os.argv[0]));
|
const executable = resolve_executable(std.mem.span(std.os.argv[0]));
|
||||||
const argv = [_]?[*:0]const u8{
|
const argv = [_]?[*:0]const u8{
|
||||||
executable,
|
executable,
|
||||||
|
|
@ -1143,6 +1144,40 @@ fn restart_with_sudo() noreturn {
|
||||||
restart_failed(ret);
|
restart_failed(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn restart_win32() noreturn {
|
||||||
|
if (!build_options.gui) return restart_manual();
|
||||||
|
const executable = resolve_executable(std.mem.span(std.os.argv[0]));
|
||||||
|
const argv = [_][]const u8{
|
||||||
|
executable,
|
||||||
|
"--restore-session",
|
||||||
|
};
|
||||||
|
const a = std.heap.c_allocator;
|
||||||
|
var child = std.process.Child.init(&argv, a);
|
||||||
|
child.stdin_behavior = .Inherit;
|
||||||
|
child.stdout_behavior = .Inherit;
|
||||||
|
child.stderr_behavior = .Inherit;
|
||||||
|
child.spawn() catch {
|
||||||
|
std.os.windows.kernel32.ExitProcess(1);
|
||||||
|
};
|
||||||
|
std.os.windows.kernel32.ExitProcess(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn restart_manual() noreturn {
|
||||||
|
const executable = resolve_executable(std.mem.span(std.os.argv[0]));
|
||||||
|
var stderr_buffer: [1024]u8 = undefined;
|
||||||
|
var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer);
|
||||||
|
stderr_writer.interface.print(
|
||||||
|
\\
|
||||||
|
\\ Manual restart required. Run:
|
||||||
|
\\ > {s} --restore-session
|
||||||
|
\\ to restart now.
|
||||||
|
\\
|
||||||
|
\\
|
||||||
|
, .{executable}) catch {};
|
||||||
|
stderr_writer.interface.flush() catch {};
|
||||||
|
exit(234);
|
||||||
|
}
|
||||||
|
|
||||||
fn restart_failed(ret: c_int) noreturn {
|
fn restart_failed(ret: c_int) noreturn {
|
||||||
var stderr_buffer: [1024]u8 = undefined;
|
var stderr_buffer: [1024]u8 = undefined;
|
||||||
var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer);
|
var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue