Skip to content

Commit

Permalink
Fix Godot returned status code on unexpected error
Browse files Browse the repository at this point in the history
  • Loading branch information
touilleMan committed Feb 25, 2021
1 parent ee5ea64 commit 0e4abcb
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 1 deletion.
5 changes: 5 additions & 0 deletions core/os/os.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,11 @@ int OS::get_exit_code() const {

void OS::set_exit_code(int p_code) {
_exit_code = p_code;
_is_custom_exit_code = true;
}

bool OS::is_custom_exit_code() {
return _is_custom_exit_code;
}

String OS::get_locale() const {
Expand Down
5 changes: 4 additions & 1 deletion core/os/os.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include "core/templates/vector.h"

#include <stdarg.h>
#include <stdlib.h>

class OS {
static OS *singleton;
Expand All @@ -53,7 +54,8 @@ class OS {
bool _debug_stdout = false;
String _local_clipboard;
bool _no_window = false;
int _exit_code = 0;
int _exit_code = EXIT_FAILURE; // unexpected exit is marked as failure
bool _is_custom_exit_code = false;
int _orientation;
bool _allow_hidpi = false;
bool _allow_layered = false;
Expand Down Expand Up @@ -268,6 +270,7 @@ class OS {

virtual int get_exit_code() const;
virtual void set_exit_code(int p_code);
virtual bool is_custom_exit_code();

virtual int get_processor_count() const;

Expand Down
4 changes: 4 additions & 0 deletions scene/main/scene_tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
#include "window.h"

#include <stdio.h>
#include <stdlib.h>

void SceneTreeTimer::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_time_left", "time"), &SceneTreeTimer::set_time_left);
Expand Down Expand Up @@ -538,6 +539,9 @@ void SceneTree::quit(int p_exit_code) {
// Override the exit code if a positive argument is given (the default is `-1`).
// This is a shorthand for calling `set_exit_code()` on the OS singleton then quitting.
OS::get_singleton()->set_exit_code(p_exit_code);
} else if (!OS::get_singleton()->is_custom_exit_code()) {
// Must customize exit code, otherwise it will default to a non-zero value
OS::get_singleton()->set_exit_code(EXIT_SUCCESS);
}

_quit = true;
Expand Down

0 comments on commit 0e4abcb

Please sign in to comment.