aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHein-Pieter van Braam2017-02-17 19:24:42 +0100
committerRémi Verschelde2017-03-18 20:12:42 +0100
commitdffdf28349920a97f8f1fe9d759d9a478ee99f1d (patch)
tree068c0673aa13753006423515d2518bc39afd9bc4
parent02d711eb610a49c0632b874f0de3e868b074f091 (diff)
downloadgodot-dffdf28349920a97f8f1fe9d759d9a478ee99f1d.tar.gz
godot-dffdf28349920a97f8f1fe9d759d9a478ee99f1d.tar.zst
godot-dffdf28349920a97f8f1fe9d759d9a478ee99f1d.zip
X11 return to cwd at exit
During runtime godot calls chdir() several times. This doesn't really matter normally but when using tools such as gprof the location of the profiling data is kind of hard to intuit. With this PR we simply store the current working directory at start and restore it once we're almost done exiting. This doesn't use the OS abstractions as when we need to get the current workdir we haven't yet initialized it (by necessity). This would break if we tried to build X11 for windows, but since the X11 target is hardcoded to use the UNIX abstractions I don't think it matters. (cherry picked from commit d0c2015fe11f920874661ec24c518aa36c99b470)
-rw-r--r--platform/x11/godot_x11.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/platform/x11/godot_x11.cpp b/platform/x11/godot_x11.cpp
index f85ba1702..b727ecbd1 100644
--- a/platform/x11/godot_x11.cpp
+++ b/platform/x11/godot_x11.cpp
@@ -26,6 +26,9 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+#include <unistd.h>
+#include <limits.h>
+
#include "main/main.h"
#include "os_x11.h"
@@ -33,6 +36,9 @@ int main(int argc, char* argv[]) {
OS_X11 os;
+ char *cwd = (char*)malloc(PATH_MAX);
+ getcwd(cwd, PATH_MAX);
+
Error err = Main::setup(argv[0],argc-1,&argv[1]);
if (err!=OK)
return 255;
@@ -41,5 +47,8 @@ int main(int argc, char* argv[]) {
os.run(); // it is actually the OS that decides how to run
Main::cleanup();
+ chdir(cwd);
+ free(cwd);
+
return os.get_exit_code();
}