Author: rinrab
Date: Thu May 29 17:51:37 2025
New Revision: 1925951
URL: http://svn.apache.org/viewvc?rev=1925951&view=rev
Log:
On the 'utf8-cmdline-prototype' branch: Minimize difference between
svn_opt__process_target_array() and svn_client__process_target_array().
* subversion/libsvn_subr/opt.c
(svn_opt__process_target_array):
- Cosmetic/formatting fixes.
- Add separate input_targets var where the targets are collected into.
- Save bad targets into reserved_names var and handle them later.
Modified:
subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c
Modified: subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c?rev=1925951&r1=1925950&r2=1925951&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c Thu May 29 17:51:37 2025
@@ -296,30 +296,33 @@ svn_opt__collect_targets(apr_array_heade
* order to move to libsvn_client while maintaining backward compatibility. */
svn_error_t *
svn_opt__process_target_array(apr_array_header_t **targets_p,
- apr_array_header_t *input_targets,
+ apr_array_header_t *utf8_targets,
const apr_array_header_t *known_targets,
apr_pool_t *pool)
{
int i;
- svn_error_t *err = SVN_NO_ERROR;
- apr_array_header_t *output_targets =
- apr_array_make(pool, DEFAULT_ARRAY_SIZE, sizeof(const char *));
+ apr_array_header_t *input_targets;
+ apr_array_header_t *output_targets;
+ apr_array_header_t *reserved_names = NULL;
/* Step 1: create a master array of targets, and come from concatenating
the targets left by apr_getopt, plus any extra targets (e.g., from the
--targets switch.) */
- SVN_ERR(svn_opt__collect_targets(&input_targets, NULL, input_targets,
- known_targets, pool));
+ SVN_ERR(svn_opt__collect_targets(&input_targets, NULL,
+ utf8_targets, known_targets, pool));
/* Step 2: process each target. */
+ output_targets = apr_array_make(pool, input_targets->nelts,
+ sizeof(const char *));
+
for (i = 0; i < input_targets->nelts; i++)
{
const char *utf8_target = APR_ARRAY_IDX(input_targets, i, const char *);
const char *true_target;
- const char *target; /* after all processing is finished */
const char *peg_rev;
+ const char *target; /* after all processing is finished */
/*
* This is needed so that the target can be properly canonicalized,
@@ -339,15 +342,15 @@ svn_opt__process_target_array(apr_array_
/* URLs and wc-paths get treated differently. */
if (svn_path_is_url(true_target))
{
- SVN_ERR(svn_opt__arg_canonicalize_url(&true_target, true_target,
- pool));
+ SVN_ERR(svn_opt__arg_canonicalize_url(&true_target,
+ true_target, pool));
}
else /* not a url, so treat as a path */
{
const char *base_name;
- SVN_ERR(svn_opt__arg_canonicalize_path(&true_target, true_target,
- pool));
+ SVN_ERR(svn_opt__arg_canonicalize_path(&true_target,
+ true_target, pool));
/* If the target has the same name as a Subversion
working copy administrative dir, skip it. */
@@ -363,9 +366,11 @@ svn_opt__process_target_array(apr_array_
if (0 == strcmp(base_name, ".svn")
|| 0 == strcmp(base_name, "_svn"))
{
- err = svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED,
- err, _("'%s' ends in a reserved name"),
- utf8_target);
+ if (!reserved_names)
+ reserved_names = apr_array_make(pool, 1,
+ sizeof(const char *));
+
+ APR_ARRAY_PUSH(reserved_names, const char *) = utf8_target;
continue;
}
}
@@ -381,7 +386,19 @@ svn_opt__process_target_array(apr_array_
*targets_p = output_targets;
- return err;
+ if (reserved_names)
+ {
+ svn_error_t *err = SVN_NO_ERROR;
+
+ for (i = 0; i < reserved_names->nelts; ++i)
+ err = svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED, err,
+ _("'%s' ends in a reserved name"),
+ APR_ARRAY_IDX(reserved_names, i,
+ const char *));
+ return svn_error_trace(err);
+ }
+
+ return SVN_NO_ERROR;
}
svn_error_t *
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.