Author: rinrab Date: Thu May 29 14:09:34 2025 New Revision: 1925934 URL: http://svn.apache.org/viewvc?rev=1925934&view=rev Log: On the 'utf8-cmdline-prototype' branch: use svn_opt_parse_all_args() in args_to_target_array() functions and convert encoding later if needed. This function will properly read arguments from parser and handle errors.
* subversion/libsvn_client/cmdline.c * subversion/libsvn_client/deprecated.c * subversion/libsvn_subr/deprecated.c * subversion/libsvn_subr/opt.c (svn_client_args_to_target_array3, svn_client_args_to_target_array2, svn_opt_args_to_target_array4, svn_opt_args_to_target_array3, svn_opt__args_to_target_array): ditto. Modified: subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/cmdline.c subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/deprecated.c subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/deprecated.c subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c Modified: subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/cmdline.c URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/cmdline.c?rev=1925934&r1=1925933&r2=1925934&view=diff ============================================================================== --- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/cmdline.c (original) +++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/cmdline.c Thu May 29 14:09:34 2025 @@ -372,13 +372,9 @@ svn_client_args_to_target_array3(apr_arr svn_boolean_t keep_last_origpath_on_truepath_collision, apr_pool_t *pool) { - apr_array_header_t *utf8_input_targets = apr_array_make( - pool, os->argc - os->ind, sizeof(const char *)); + apr_array_header_t *utf8_input_targets; - for (; os->ind < os->argc; os->ind++) - { - APR_ARRAY_PUSH(utf8_input_targets, const char *) = os->argv[os->ind]; - } + SVN_ERR(svn_opt_parse_all_args(&utf8_input_targets, os, pool)); return svn_error_trace(svn_client__process_target_array( targets_p, utf8_input_targets, known_targets, ctx, Modified: subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/deprecated.c URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/deprecated.c?rev=1925934&r1=1925933&r2=1925934&view=diff ============================================================================== --- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/deprecated.c (original) +++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_client/deprecated.c Thu May 29 14:09:34 2025 @@ -450,17 +450,21 @@ svn_client_args_to_target_array2(apr_arr svn_boolean_t keep_last_origpath_on_truepath_collision, apr_pool_t *pool) { - apr_array_header_t *utf8_input_targets = apr_array_make( - pool, os->argc - os->ind, sizeof(const char *)); + apr_array_header_t *input_targets; + apr_array_header_t *utf8_input_targets; + int i; - for (; os->ind < os->argc; os->ind++) + SVN_ERR(svn_opt_parse_all_args(&input_targets, os, pool)); + + utf8_input_targets = apr_array_make(pool, input_targets->nelts, + sizeof(const char *)); + + for (i = 0; i < input_targets->nelts; i++) { - /* The apr_getopt targets are still in native encoding. */ - const char *raw_target = os->argv[os->ind]; + const char *raw_target = APR_ARRAY_IDX(input_targets, i, const char *); const char *utf8_target; - SVN_ERR(svn_utf_cstring_to_utf8(&utf8_target, - raw_target, pool)); + SVN_ERR(svn_utf_cstring_to_utf8(&utf8_target, raw_target, pool)); APR_ARRAY_PUSH(utf8_input_targets, const char *) = utf8_target; } Modified: subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/deprecated.c URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/deprecated.c?rev=1925934&r1=1925933&r2=1925934&view=diff ============================================================================== --- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/deprecated.c (original) +++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/deprecated.c Thu May 29 14:09:34 2025 @@ -814,13 +814,9 @@ svn_opt_args_to_target_array4(apr_array_ const apr_array_header_t *known_targets, apr_pool_t *pool) { - apr_array_header_t *utf8_input_targets = - apr_array_make(pool, os->argc - os->ind, sizeof(const char *)); + apr_array_header_t *utf8_input_targets; - for (; os->ind < os->argc; os->ind++) - { - APR_ARRAY_PUSH(utf8_input_targets, const char *) = os->argv[os->ind]; - } + SVN_ERR(svn_opt_parse_all_args(&utf8_input_targets, os, pool)); return svn_error_trace(svn_opt__process_target_array( targets_p, utf8_input_targets, known_targets, pool)); @@ -832,13 +828,18 @@ svn_opt_args_to_target_array3(apr_array_ const apr_array_header_t *known_targets, apr_pool_t *pool) { - apr_array_header_t *utf8_input_targets = - apr_array_make(pool, os->argc - os->ind, sizeof(const char *)); + apr_array_header_t *input_targets; + apr_array_header_t *utf8_input_targets; + int i; + + SVN_ERR(svn_opt_parse_all_args(&input_targets, os, pool)); + + utf8_input_targets = apr_array_make(pool, input_targets->nelts, + sizeof(const char *)); - for (; os->ind < os->argc; os->ind++) + for (i = 0; i < input_targets->nelts; i++) { - /* The apr_getopt targets are still in native encoding. */ - const char *raw_target = os->argv[os->ind]; + const char *raw_target = APR_ARRAY_IDX(input_targets, i, const char *); const char *utf8_target; SVN_ERR(svn_utf_cstring_to_utf8(&utf8_target, raw_target, pool)); 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=1925934&r1=1925933&r2=1925934&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 14:09:34 2025 @@ -224,13 +224,18 @@ svn_opt__args_to_target_array(apr_array_ const apr_array_header_t *known_targets, apr_pool_t *pool) { - apr_array_header_t *utf8_input_targets = - apr_array_make(pool, os->argc - os->ind, sizeof(const char *)); + apr_array_header_t *input_targets; + apr_array_header_t *utf8_input_targets; + int i; - for (; os->ind < os->argc; os->ind++) + SVN_ERR(svn_opt_parse_all_args(&input_targets, os, pool)); + + utf8_input_targets = apr_array_make(pool, input_targets->nelts, + sizeof(const char *)); + + for (i = 0; i < input_targets->nelts; i++) { - /* The apr_getopt targets are still in native encoding. */ - const char *raw_target = os->argv[os->ind]; + const char *raw_target = APR_ARRAY_IDX(input_targets, i, const char *); const char *utf8_target; SVN_ERR(svn_utf_cstring_to_utf8(&utf8_target, raw_target, pool));