@@ -434,23 +434,58 @@ void sys_main_c::SpawnProcess(std::filesystem::path cmdName, const char* argList
434434#endif
435435}
436436
437+ std::string GetWineHostVersion ()
438+ {
439+ #ifdef _WIN32
440+ using WineHostVersionFun = void (const char ** /* sysname*/ , const char ** /* release*/ );
441+ HMODULE mod = GetModuleHandleA (" ntdll.dll" );
442+ if (!mod)
443+ return " " ;
444+ auto ptr = GetProcAddress (mod, " wine_get_host_version" );
445+ if (!ptr)
446+ return " " ;
447+ auto fun = (WineHostVersionFun*)ptr;
448+ const char * sysname{};
449+ const char * release{};
450+ fun (&sysname, &release);
451+ return sysname ? sysname : " " ;
452+ #else
453+ return " " ;
454+ #endif
455+ }
456+
437457#if _WIN32 || __linux__
438- void PlatformOpenURL (const char * url)
458+ const char * PlatformOpenURL (const char * url)
439459{
440460#ifdef _WIN32
461+ const std::string wineHost = GetWineHostVersion ();
462+ /*
463+ Wine has some loosely determined maximum length on how long of an URL
464+ can be, so we pick a "safe" maximum and refuse to open anything longer.
465+ */
466+ if ((wineHost == " Linux" || wineHost == " Darwin" ) && strlen (url) > 1500 )
467+ return AllocString (" Did not open URL, length likely too long for the OS." );
441468 ShellExecuteA (NULL , " open" , url, NULL , NULL , SW_SHOWDEFAULT);
469+ return nullptr ;
442470#else
443471#warning LV: URL opening not implemented on this OS.
444472 // TODO(LV): Implement URL opening for other OSes.
473+ return AllocString (" URL opening not implemented on this OS." );
445474#endif
446475}
447476#else
448- void PlatformOpenURL (const char * url);
477+ const char * PlatformOpenURL (const char * url);
449478#endif
450479
451- void sys_main_c::OpenURL (const char * url)
480+ std::optional<std::string> sys_main_c::OpenURL (const char * url)
452481{
453- PlatformOpenURL (url);
482+ if (auto err = PlatformOpenURL (url))
483+ {
484+ std::string ret = err;
485+ FreeString (err);
486+ return ret;
487+ }
488+ return {};
454489}
455490
456491// ==============================
0 commit comments