diff options
author | Stephan Bergmann <stephan.bergmann@allotropia.de> | 2024-01-30 16:59:03 +0100 |
---|---|---|
committer | Stephan Bergmann <stephan.bergmann@allotropia.de> | 2024-01-31 09:33:27 +0100 |
commit | 2b1f5fa987f02ec8014dbf6837c6b090faf11f2d (patch) | |
tree | 9377bee0cfd1fa3606681ea6c2223e7d9046a03a /shell/source | |
parent | e4cf6c324cd7491444576ee57d60475d0c4f239c (diff) |
tdf#159307 Let non-URIS_ONLY execute() handle .app directories on macOS
Change-Id: I873daed9347b5e5bee4a630474438fce2cc73fec
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162768
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
Diffstat (limited to 'shell/source')
-rw-r--r-- | shell/source/unix/exec/shellexec.cxx | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/shell/source/unix/exec/shellexec.cxx b/shell/source/unix/exec/shellexec.cxx index 71137c7d6703..153827a003a7 100644 --- a/shell/source/unix/exec/shellexec.cxx +++ b/shell/source/unix/exec/shellexec.cxx @@ -207,12 +207,32 @@ void SAL_CALL ShellExec::execute( const OUString& aCommand, const OUString& aPar + aCommand, getXWeak(), 0); } else { +#if defined MACOSX + auto usingOpen = false; + if (OString pathname8; + aCommand.convertToString( + &pathname8, RTL_TEXTENCODING_UTF8, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)) + { + if (struct stat st; stat(pathname8.getStr(), &st) == 0 && S_ISDIR(st.st_mode)) { + usingOpen = true; + aBuffer.append("open -a "); + } + } +#endif escapeForShell(aBuffer, OUStringToOString(aCommand, osl_getThreadTextEncoding())); - aBuffer.append(" "); - if( nFlags != 42 ) - escapeForShell(aBuffer, OUStringToOString(aParameter, osl_getThreadTextEncoding())); - else - aBuffer.append(OUStringToOString(aParameter, osl_getThreadTextEncoding())); + if (!aParameter.isEmpty()) { + aBuffer.append(" "); +#if defined MACOSX + if (usingOpen) { + aBuffer.append("--args "); + } +#endif + if( nFlags != 42 ) + escapeForShell(aBuffer, OUStringToOString(aParameter, osl_getThreadTextEncoding())); + else + aBuffer.append(OUStringToOString(aParameter, osl_getThreadTextEncoding())); + } } // Prefer DESKTOP_LAUNCH when available |