shell/source/unix/exec/shellexec.cxx |   30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

New commits:
commit 89046b35d825220014adee558450e0caf5c6027e
Author:     Stephan Bergmann <[email protected]>
AuthorDate: Tue Jan 30 16:59:03 2024 +0100
Commit:     Michael Stahl <[email protected]>
CommitDate: Thu Feb 1 10:24:15 2024 +0100

    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 <[email protected]>
    Signed-off-by: Xisco Fauli <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162801
    Reviewed-by: Michael Stahl <[email protected]>

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

Reply via email to