Re: [PATCH] Quote filename passed to $EDITOR
From: Scott Lamb <slamb_at_slamb.org>
Date: 2002-07-23 19:55:49 CEST
On Tue, Jul 23, 2002 at 11:37:56AM -0500, cmpilato@collab.net wrote:
Ehh? This strikes me as a much better way to do it. Below is a patch
--
Scott Lamb
Index: ./subversion/clients/cmdline/util.c
===================================================================
--- ./subversion/clients/cmdline/util.c
+++ ./subversion/clients/cmdline/util.c Tue Jul 23 12:46:07 2002
@@ -348,15 +348,18 @@
apr_pool_t *pool)
{
const char *editor = NULL;
- const char *cmd;
apr_file_t *tmp_file;
const char *tmpfile_name;
const char *contents_native, *tmpfile_native;
+ const char *args[3];
apr_status_t apr_err, apr_err2;
apr_size_t written;
apr_finfo_t finfo_before, finfo_after;
svn_error_t *err = SVN_NO_ERROR;
- int sys_err;
+ apr_procattr_t *attr = NULL;
+ apr_proc_t proc;
+ int exitcode;
+ apr_exit_why_e exitwhy;
/* Try to find an editor in the environment. */
editor = getenv ("SVN_EDITOR");
@@ -416,14 +419,49 @@
}
/* Now, run the editor command line. */
- cmd = apr_psprintf (pool, "%s \"%s\"", editor, tmpfile_native);
- sys_err = system (cmd);
- if (sys_err != 0)
+ apr_err = apr_procattr_create(&attr, pool);
+ if (apr_err)
+ {
+ err = svn_error_createf (apr_err, 0, NULL, pool,
+ "apr_procattr_create failed");
+ goto cleanup;
+ }
+
+ apr_err = apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
+ if (apr_err)
+ {
+ err = svn_error_createf (apr_err, 0, NULL, pool,
+ "apr_procattr_cmdtype_set failed");
+ goto cleanup;
+ }
+
+ args[0] = editor;
+ args[1] = tmpfile_native;
+ args[2] = NULL;
+ apr_err = apr_proc_create(&proc, editor, args, NULL, attr, pool);
+ if (apr_err)
+ {
+ err = svn_error_createf (apr_err, 0, NULL, pool,
+ "apr_proc_create('%s %s') failed",
+ editor, tmpfile_native);
+ goto cleanup;
+ }
+
+ while ((apr_err = apr_proc_wait(&proc, &exitcode, &exitwhy, APR_WAIT))
+ == APR_CHILD_NOTDONE) ;
+ if (apr_err != APR_CHILD_DONE)
+ {
+ err = svn_error_createf (apr_err, 0, NULL, pool,
+ "apr_proc_wait failed");
+ goto cleanup;
+ }
+
+ if (exitwhy != APR_PROC_EXIT
+ || (exitcode != 0 && exitcode != APR_ENOTIMPL))
{
- /* Extracting any meaning from sys_err is platform specific, so just
- use the raw value. */
err = svn_error_createf (SVN_ERR_EXTERNAL_PROGRAM, 0, NULL, pool,
- "system('%s') returned %d", cmd, sys_err);
+ "abnormal exit from '%s %s': %d",
+ editor, tmpfile_native, exitcode);
goto cleanup;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Jul 23 19:56:17 2002
|
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.