diff options
author | Hein-Pieter van Braam <hp@tmm.cx> | 2017-02-17 19:24:42 +0100 |
---|---|---|
committer | Hein-Pieter van Braam <hp@tmm.cx> | 2017-02-18 12:41:26 +0100 |
commit | d0c2015fe11f920874661ec24c518aa36c99b470 (patch) | |
tree | 4f07fa3085b92d13a766e42a4b0105615e8949ff /platform/x11 | |
parent | 9a5442a22630e346df44a3df6bc1bbbd03c787dd (diff) |
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.
Diffstat (limited to 'platform/x11')
-rw-r--r-- | platform/x11/godot_x11.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/platform/x11/godot_x11.cpp b/platform/x11/godot_x11.cpp index f85ba17020..b727ecbd17 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(); } |