Change i32 as exit code to u8

This avoids nasty surprises with negative numbers on some unix-alikes
due to two's complement.
This commit is contained in:
MultisampledNight
2021-12-17 19:06:24 +01:00
parent e0b3cf2abc
commit f88fba0253
6 changed files with 16 additions and 13 deletions

View File

@@ -87,9 +87,11 @@ pub enum ControlFlow {
WaitUntil(Instant),
/// Send a `LoopDestroyed` event and stop the event loop. This variant is *sticky* - once set,
/// `control_flow` cannot be changed from `Exit`, and any future attempts to do so will result
/// in the `control_flow` parameter being reset to `Exit`. The contained number will be used as
/// exit code, if the platform supports that (this means _not_ ios, android and wasm32).
Exit(i32),
/// in the `control_flow` parameter being reset to `Exit`.
/// The contained number will be used as exit code, if the platform supports that (this
/// _excludes_ ios, android and wasm32), it's an [`u8`] to prevent some weird surprises as
/// described in [`std::process::exit`].
Exit(u8),
}
impl Default for ControlFlow {

View File

@@ -22,7 +22,8 @@ pub trait EventLoopExtRunReturn {
/// Initializes the `winit` event loop.
///
/// Unlike `run`, this function accepts non-`'static` (i.e. non-`move`) closures and returns
/// control flow to the caller when `control_flow` is set to `ControlFlow::Exit`.
/// control flow to the caller when `control_flow` is set to `ControlFlow::Exit`, where its
/// content representing the exit code is the return value.
///
/// # Caveats
/// Despite its appearance at first glance, this is *not* a perfect replacement for
@@ -33,7 +34,7 @@ pub trait EventLoopExtRunReturn {
/// underlying OS APIs, which cannot be hidden by `winit` without severe stability repercussions.
///
/// You are strongly encouraged to use `run`, unless the use of this is absolutely necessary.
fn run_return<F>(&mut self, event_handler: F) -> i32
fn run_return<F>(&mut self, event_handler: F) -> u8
where
F: FnMut(
Event<'_, Self::UserEvent>,
@@ -45,7 +46,7 @@ pub trait EventLoopExtRunReturn {
impl<T> EventLoopExtRunReturn for EventLoop<T> {
type UserEvent = T;
fn run_return<F>(&mut self, event_handler: F) -> i32
fn run_return<F>(&mut self, event_handler: F) -> u8
where
F: FnMut(
Event<'_, Self::UserEvent>,

View File

@@ -655,7 +655,7 @@ impl<T: 'static> EventLoop<T> {
x11_or_wayland!(match self; EventLoop(evlp) => evlp.create_proxy(); as EventLoopProxy)
}
pub fn run_return<F>(&mut self, callback: F) -> i32
pub fn run_return<F>(&mut self, callback: F) -> u8
where
F: FnMut(crate::event::Event<'_, T>, &RootELW<T>, &mut ControlFlow),
{

View File

@@ -207,10 +207,10 @@ impl<T: 'static> EventLoop<T> {
F: FnMut(Event<'_, T>, &RootEventLoopWindowTarget<T>, &mut ControlFlow) + 'static,
{
let exit_code = self.run_return(callback);
process::exit(exit_code);
process::exit(i32::from(exit_code));
}
pub fn run_return<F>(&mut self, mut callback: F) -> i32
pub fn run_return<F>(&mut self, mut callback: F) -> u8
where
F: FnMut(Event<'_, T>, &RootEventLoopWindowTarget<T>, &mut ControlFlow),
{

View File

@@ -258,7 +258,7 @@ impl<T: 'static> EventLoop<T> {
&self.target
}
pub fn run_return<F>(&mut self, mut callback: F) -> i32
pub fn run_return<F>(&mut self, mut callback: F) -> u8
where
F: FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
{
@@ -391,7 +391,7 @@ impl<T: 'static> EventLoop<T> {
F: 'static + FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
{
let exit_code = self.run_return(callback);
::std::process::exit(exit_code);
::std::process::exit(i32::from(exit_code));
}
fn drain_events<F>(&mut self, callback: &mut F, control_flow: &mut ControlFlow)

View File

@@ -189,10 +189,10 @@ impl<T: 'static> EventLoop<T> {
F: 'static + FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
{
let exit_code = self.run_return(event_handler);
::std::process::exit(exit_code);
::std::process::exit(i32::from(exit_code));
}
pub fn run_return<F>(&mut self, mut event_handler: F) -> i32
pub fn run_return<F>(&mut self, mut event_handler: F) -> u8
where
F: FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
{