Cheers Ryan, that was the function I was looking for. :P

The patch has now been updated to use the apr_tokenize_to_argv function. 
Tested and working fine on RH7.1.

Incidentally, what is the best source of documentation/information on the 
apr and apr-utils supplied functions?  I'm currently using a combination of 
grep'ing the source and the docs at http://apr.apache.org/docs/apr-util/ 
and http://apr.apache.org/docs/apr/ -- I don't know how I managed to miss 
that function at the bottom of the page. /me shrugs

Cheers,

JT

>>See bugzilla id #8464 for details....

> There is a function, tokenize_to_argv, which given a string, will pass
> back an argv array.  If we use that, then we get the ability to quote
> the arguments, and there is less duplicate code.  Please re-submit with
> that change, and I will apply the patch.
> 
> Ryan

-- 
+------------------------------------+------------------------------------+
| James Tait                         | ICQ# 17834893                      |
| MUD programmer and Linux advocate  | http://www.wyrddreams.demon.co.uk/ |
+------------------------------------+------------------------------------+


________________________________________________________________________
This email has been scanned for all viruses by the MessageLabs SkyScan
service. For more information on a proactive anti-virus service working
around the clock, around the globe, visit http://www.messagelabs.com
________________________________________________________________________
--- ../httpd-2.0.36-unmodified/modules/mappers/mod_rewrite.c    Mon Apr 22 11:27:01 
2002
+++ modules/mappers/mod_rewrite.c       Mon May 27 17:53:30 2002
@@ -3370,20 +3370,23 @@
     apr_status_t rc;
     apr_procattr_t *procattr;
     apr_proc_t *procnew;
+    char **args;
+
+    rc = apr_tokenize_to_argv(progname, &args, p);
 
     if (((rc = apr_procattr_create(&procattr, p)) != APR_SUCCESS) ||
         ((rc = apr_procattr_io_set(procattr, APR_FULL_BLOCK,
                                   APR_FULL_NONBLOCK,
                                   APR_FULL_NONBLOCK)) != APR_SUCCESS) ||
         ((rc = apr_procattr_dir_set(procattr, 
-                                   ap_make_dirstr_parent(p, progname)))
+                                   ap_make_dirstr_parent(p, args[0])))
          != APR_SUCCESS) ||
         ((rc = apr_procattr_cmdtype_set(procattr, APR_PROGRAM)) != APR_SUCCESS)) {
         /* Something bad happened, give up and go away. */
     }
     else {
         procnew = apr_pcalloc(p, sizeof(*procnew));
-        rc = apr_proc_create(procnew, progname, NULL, NULL, procattr, p);
+        rc = apr_proc_create(procnew, args[0], (const char **)args, NULL, procattr, 
+p);
     
         if (rc == APR_SUCCESS) {
             apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);

Reply via email to