summaryrefslogtreecommitdiff
path: root/platform/windows
diff options
context:
space:
mode:
authorRicardo Subtil <ricasubtil@gmail.com>2021-09-19 11:29:56 +0100
committerRicardo Subtil <ricasubtil@gmail.com>2021-09-19 11:29:56 +0100
commitc4787a8e6deaf13c838562db8fd4739c4d66b86c (patch)
treed4347ec2124dad0bea379b274e536d3c3a7d3fae /platform/windows
parent0e5b0c025ce3d4ad8082cbeb5394423854c2e25f (diff)
Fix shell_open not returning errors on Windows
Diffstat (limited to 'platform/windows')
-rw-r--r--platform/windows/os_windows.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 2a0a509d43..78b7be8a30 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -557,8 +557,27 @@ String OS_Windows::get_stdin_string(bool p_block) {
}
Error OS_Windows::shell_open(String p_uri) {
- ShellExecuteW(nullptr, nullptr, (LPCWSTR)(p_uri.utf16().get_data()), nullptr, nullptr, SW_SHOWNORMAL);
- return OK;
+ INT_PTR ret = (INT_PTR)ShellExecuteW(nullptr, nullptr, (LPCWSTR)(p_uri.utf16().get_data()), nullptr, nullptr, SW_SHOWNORMAL);
+ if (ret > 32) {
+ return OK;
+ } else {
+ switch (ret) {
+ case ERROR_FILE_NOT_FOUND:
+ case SE_ERR_DLLNOTFOUND:
+ return ERR_FILE_NOT_FOUND;
+ case ERROR_PATH_NOT_FOUND:
+ return ERR_FILE_BAD_PATH;
+ case ERROR_BAD_FORMAT:
+ return ERR_FILE_CORRUPT;
+ case SE_ERR_ACCESSDENIED:
+ return ERR_UNAUTHORIZED;
+ case 0:
+ case SE_ERR_OOM:
+ return ERR_OUT_OF_MEMORY;
+ default:
+ return FAILED;
+ }
+ }
}
String OS_Windows::get_locale() const {