diff --git a/src/Platform.cpp b/src/Platform.cpp index d8ded1d56..d5cdf725a 100644 --- a/src/Platform.cpp +++ b/src/Platform.cpp @@ -91,25 +91,22 @@ void DoRestart() void OpenURI(ByteString uri) { #if defined(WIN) - ShellExecute(0, "OPEN", uri.c_str(), NULL, NULL, 0); -#elif defined(MACOSX) - char *cmd = (char*)malloc(7+uri.length()); - strcpy(cmd, "open "); - strappend(cmd, (char*)uri.c_str()); - if (system(cmd)) + if ((int)ShellExecute(NULL, NULL, uri.c_str(), NULL, NULL, SW_SHOWNORMAL) <= 32) { - fprintf(stderr, "system(cmd) return non-zero value\n"); + fprintf(stderr, "cannot open URI: ShellExecute(...) failed\n"); + } +#elif defined(MACOSX) + if (system(("open \"" + uri + "\"").c_str())) + { + fprintf(stderr, "cannot open URI: system(...) failed\n"); } #elif defined(LIN) - char *cmd = (char*)malloc(11+uri.length()); - strcpy(cmd, "xdg-open "); - strappend(cmd, (char*)uri.c_str()); - if (system(cmd)) + if (system(("xdg-open \"" + uri + "\"").c_str())) { - fprintf(stderr, "system(cmd) return non-zero value\n"); + fprintf(stderr, "cannot open URI: system(...) failed\n"); } #else - printf("Cannot open browser\n"); + fprintf(stderr, "cannot open URI: not implemented\n"); #endif } diff --git a/src/gui/options/OptionsView.cpp b/src/gui/options/OptionsView.cpp index 2253b6eda..e1e726a01 100644 --- a/src/gui/options/OptionsView.cpp +++ b/src/gui/options/OptionsView.cpp @@ -11,6 +11,7 @@ #include #endif #include "SDLCompat.h" +#include "Platform.h" #include "gui/Style.h" #include "gui/interface/Button.h" @@ -290,22 +291,15 @@ OptionsView::OptionsView(): currentY+=20; ui::Button * dataFolderButton = new ui::Button(ui::Point(8, currentY), ui::Point(90, 16), "Open Data Folder"); dataFolderButton->SetActionCallback({ [] { -//one of these should always be defined -#ifdef WIN - const char* openCommand = "explorer "; -#elif MACOSX - const char* openCommand = "open "; -//#elif LIN -#else - const char* openCommand = "xdg-open "; -#endif - char* workingDirectory = new char[FILENAME_MAX+strlen(openCommand)]; - sprintf(workingDirectory, "%s\"%s\"", openCommand, getcwd(NULL, 0)); - if (system(workingDirectory)) + auto *cwd = getcwd(NULL, 0); + if (cwd) { - fprintf(stderr, "system(cmd) return non-zero value\n"); + Platform::OpenURI(cwd); + } + else + { + fprintf(stderr, "cannot open data folder: getcwd(...) failed\n"); } - delete[] workingDirectory; } }); scrollPanel->AddChild(dataFolderButton);