| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | /**************************************************************************//*  godot_linuxbsd.cpp                                                    *//**************************************************************************//*                         This file is part of:                          *//*                             GODOT ENGINE                               *//*                        https://godotengine.org                         *//**************************************************************************//* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). *//* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  *//*                                                                        *//* Permission is hereby granted, free of charge, to any person obtaining  *//* a copy of this software and associated documentation files (the        *//* "Software"), to deal in the Software without restriction, including    *//* without limitation the rights to use, copy, modify, merge, publish,    *//* distribute, sublicense, and/or sell copies of the Software, and to     *//* permit persons to whom the Software is furnished to do so, subject to  *//* the following conditions:                                              *//*                                                                        *//* The above copyright notice and this permission notice shall be         *//* included in all copies or substantial portions of the Software.        *//*                                                                        *//* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        *//* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     *//* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *//* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   *//* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   *//* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      *//* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 *//**************************************************************************/#include "os_linuxbsd.h"#include "main/main.h"#include <limits.h>#include <locale.h>#include <stdlib.h>#include <unistd.h>#if defined(SANITIZERS_ENABLED)#include <sys/resource.h>#endifint main(int argc, char *argv[]) {#if defined(SANITIZERS_ENABLED)	// Note: Set stack size to be at least 30 MB (vs 8 MB default) to avoid overflow, address sanitizer can increase stack usage up to 3 times.	struct rlimit stack_lim = { 0x1E00000, 0x1E00000 };	setrlimit(RLIMIT_STACK, &stack_lim);#endif	OS_LinuxBSD os;	setlocale(LC_CTYPE, "");	// We must override main when testing is enabled	TEST_MAIN_OVERRIDE	char *cwd = (char *)malloc(PATH_MAX);	ERR_FAIL_NULL_V(cwd, ERR_OUT_OF_MEMORY);	char *ret = getcwd(cwd, PATH_MAX);	Error err = Main::setup(argv[0], argc - 1, &argv[1]);	if (err != OK) {		free(cwd);		if (err == ERR_HELP) { // Returned by --help and --version, so success.			return 0;		}		return 255;	}	if (Main::start()) {		os.set_exit_code(EXIT_SUCCESS);		os.run(); // it is actually the OS that decides how to run	}	Main::cleanup();	if (ret) { // Previous getcwd was successful		if (chdir(cwd) != 0) {			ERR_PRINT("Couldn't return to previous working directory.");		}	}	free(cwd);	return os.get_exit_code();}
 |