diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-05-17 19:09:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-17 19:09:10 +0100 |
commit | a9c3a423231e26ea3edee51d5f0bf949ca8e529b (patch) | |
tree | baac0b68f1d2daf66a140dc15d6d731eba64c9dc /src/porting.cpp | |
parent | c1ce4be756e2554051a27f244303377c0a7d69a6 (diff) | |
download | minetest-a9c3a423231e26ea3edee51d5f0bf949ca8e529b.tar.gz minetest-a9c3a423231e26ea3edee51d5f0bf949ca8e529b.tar.bz2 minetest-a9c3a423231e26ea3edee51d5f0bf949ca8e529b.zip |
Add core.open_url() to main menu API (#8592)
Diffstat (limited to 'src/porting.cpp')
-rw-r--r-- | src/porting.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/porting.cpp b/src/porting.cpp index c0381ad06..ef1640467 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -33,22 +33,28 @@ with this program; if not, write to the Free Software Foundation, Inc., #include <wincrypt.h> #include <algorithm> #include <shlwapi.h> + #include <shellapi.h> #endif #if !defined(_WIN32) #include <unistd.h> #include <sys/utsname.h> + #if !defined(__ANDROID__) + #include <spawn.h> + #endif #endif #if defined(__hpux) #define _PSTAT64 #include <sys/pstat.h> #endif +#if defined(__ANDROID__) + #include "porting_android.h" +#endif #include "config.h" #include "debug.h" #include "filesys.h" #include "log.h" #include "util/string.h" -#include "settings.h" #include <list> #include <cstdarg> #include <cstdio> @@ -697,6 +703,28 @@ int mt_snprintf(char *buf, const size_t buf_size, const char *fmt, ...) return c; } +bool openURL(const std::string &url) +{ + if ((url.substr(0, 7) != "http://" && url.substr(0, 8) != "https://") || + url.find_first_of("\r\n") != std::string::npos) { + errorstream << "Invalid url: " << url << std::endl; + return false; + } + +#if defined(_WIN32) + return (intptr_t)ShellExecuteA(NULL, NULL, url.c_str(), NULL, NULL, SW_SHOWNORMAL) > 32; +#elif defined(__ANDROID__) + openURLAndroid(url); + return true; +#elif defined(__APPLE__) + const char *argv[] = {"open", url.c_str(), NULL}; + return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv, environ) == 0; +#else + const char *argv[] = {"xdg-open", url.c_str(), NULL}; + return posix_spawnp(NULL, "xdg-open", NULL, NULL, (char**)argv, environ) == 0; +#endif +} + // Load performance counter frequency only once at startup #ifdef _WIN32 |