svn commit: r1929716 - apr/apr/trunk/threadproc/win32

[email protected] Thu, 13 Nov 2025 16:44:47 -0000
Newsgroups gmane.comp.apache.apr.cvs
Message-ID <176305228726.3571750.10440139905017057630@svn02-us-east.apache.org>
Author: ivan
Date: Thu Nov 13 16:44:46 2025
New Revision: 1929716

Log:
Refactoring in apr_proc_create() for Windows. No behavior changes expected.

* threadproc/win32/proc.c
  (apr_proc_create): Move progname to argv0 conversion to each case.

Modified:
   apr/apr/trunk/threadproc/win32/proc.c

Modified: apr/apr/trunk/threadproc/win32/proc.c
==============================================================================
--- apr/apr/trunk/threadproc/win32/proc.c	Thu Nov 13 15:12:38 2025	(r1929715)
+++ apr/apr/trunk/threadproc/win32/proc.c	Thu Nov 13 16:44:46 2025	(r1929716)
@@ -479,7 +479,6 @@ APR_DECLARE(apr_status_t) apr_proc_creat
 {
     apr_status_t rv;
     apr_size_t i;
-    const char *argv0;
     char *cmdline;
     apr_wchar_t *pEnvBlock;
     PROCESS_INFORMATION pi;
@@ -550,15 +549,18 @@ APR_DECLARE(apr_status_t) apr_proc_creat
         }
     }
 
-    if (has_space(progname)) {
-        argv0 = apr_pstrcat(pool, "\"", progname, "\"", NULL);
-    }
-    else {
-        argv0 = progname;
-    }
-
     if (attr->cmdtype == APR_SHELLCMD || attr->cmdtype == APR_SHELLCMD_ENV) {
-        char *shellcmd = getenv("COMSPEC");
+        const char *argv0;
+        char *shellcmd;
+
+        if (has_space(progname)) {
+            argv0 = apr_pstrcat(pool, "\"", progname, "\"", NULL);
+        }
+        else {
+            argv0 = progname;
+        }
+
+        shellcmd = getenv("COMSPEC");
         if (!shellcmd) {
             if (attr->errfn) {
                 attr->errfn(pool, APR_EINVAL, "COMSPEC envar is not set");
@@ -600,6 +602,15 @@ APR_DECLARE(apr_status_t) apr_proc_creat
         if (i >= 4 && (strcasecmp(progname + i - 4, ".bat") == 0
                     || strcasecmp(progname + i - 4, ".cmd") == 0))
         {
+            const char *argv0;
+
+            if (has_space(progname)) {
+                argv0 = apr_pstrcat(pool, "\"", progname, "\"", NULL);
+            }
+            else {
+                argv0 = progname;
+            }
+
             char *shellcmd = getenv("COMSPEC");
             if (!shellcmd) {
                 if (attr->errfn) {
@@ -648,6 +659,15 @@ APR_DECLARE(apr_status_t) apr_proc_creat
             }
         }
         else {
+            const char *argv0;
+
+            if (has_space(progname)) {
+                argv0 = apr_pstrcat(pool, "\"", progname, "\"", NULL);
+            }
+            else {
+                argv0 = progname;
+            }
+
             /* A simple command we are directly invoking.
              * Handle the args, seperate from argv0 */
             cmdline = apr_pstrdup(pool, argv0);