Author: rinrab
Date: Sat Jun 7 17:41:22 2025
New Revision: 1926218
URL: http://svn.apache.org/viewvc?rev=1926218&view=rev
Log:
In the trunk: Add svn_cmdline__get_utf8_argv() function and
platform-specific implementations.
(merged from utf8-cmdline-prototype@r1925816)
* subversion/include/private/svn_cmdline_private.h
(svn_cmdline__win32_get_utf8_argv,
svn_cmdline__default_get_utf8_argv): Define functions.
(svn_cmdline__get_utf8_argv): Add non-platform-dependent wrapper.
* subversion/libsvn_subr/cmdline.c
(svn_cmdline__win32_get_utf8_argv,
svn_cmdline__default_get_utf8_argv): Implement functions.
No real usages yet.
Modified:
subversion/trunk/ (props changed)
subversion/trunk/subversion/include/private/svn_cmdline_private.h
subversion/trunk/subversion/libsvn_subr/cmdline.c
Propchange: subversion/trunk/
------------------------------------------------------------------------------
Merged /subversion/branches/utf8-cmdline-prototype:r1925816
Modified: subversion/trunk/subversion/include/private/svn_cmdline_private.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_cmdline_private.h?rev=1926218&r1=1926217&r2=1926218&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_cmdline_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_cmdline_private.h Sat Jun
7 17:41:22 2025
@@ -289,6 +289,12 @@ svn_cmdline__win32_get_cstring_argv(cons
int argc,
const wchar_t *argv[],
apr_pool_t *result_pool);
+
+svn_error_t *
+svn_cmdline__win32_get_utf8_argv(const char **utf8_argv_p[],
+ int argc,
+ const wchar_t *argv[],
+ apr_pool_t *result_pool);
#endif
/* Default platform-agnostic handler that normalizes command line arguments
@@ -299,14 +305,22 @@ svn_cmdline__default_get_cstring_argv(co
const char *argv[],
apr_pool_t *result_pool);
+svn_error_t *
+svn_cmdline__default_get_utf8_argv(const char **utf8_argv_p[],
+ int argc,
+ const char *argv[],
+ apr_pool_t *result_pool);
+
#if defined(WIN32) && defined(_MSC_VER)
typedef wchar_t svn_cmdline__argv_char_t;
#define SVN_CMDLINE__MAIN wmain
#define svn_cmdline__get_cstring_argv svn_cmdline__win32_get_cstring_argv
+#define svn_cmdline__get_utf8_argv svn_cmdline__win32_get_utf8_argv
#else
typedef char svn_cmdline__argv_char_t;
#define SVN_CMDLINE__MAIN main
#define svn_cmdline__get_cstring_argv svn_cmdline__default_get_cstring_argv
+#define svn_cmdline__get_utf8_argv svn_cmdline__default_get_utf8_argv
#endif
#ifdef __cplusplus
Modified: subversion/trunk/subversion/libsvn_subr/cmdline.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/cmdline.c?rev=1926218&r1=1926217&r2=1926218&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/trunk/subversion/libsvn_subr/cmdline.c Sat Jun 7 17:41:22 2025
@@ -1,3 +1,4 @@
+#include "svn_cmdline_private.h"
/*
* cmdline.c : Helpers for command-line programs.
*
@@ -1429,10 +1430,32 @@ svn_cmdline__win32_get_cstring_argv(cons
APR_ARRAY_PUSH(cstring_argv, const char *) = cstring_arg;
}
+}
+
+svn_error_t *
+svn_cmdline__win32_get_utf8_argv(const char **utf8_argv_p[],
+ int argc,
+ const wchar_t *argv[],
+ apr_pool_t *result_pool)
+{
+ apr_array_header_t *utf8_argv;
+ int i;
+
+ utf8_argv = apr_array_make(result_pool, argc + 1, sizeof(const char *));
+
+ for (i = 0; i < argc; i++)
+ {
+ const wchar_t *arg = argv[i];
+ char *utf8_arg;
- APR_ARRAY_PUSH(cstring_argv, const char *) = NULL;
+ SVN_ERR(svn_utf__win32_utf16_to_utf8(&utf8_arg, arg, NULL, result_pool));
- *cstring_argv_p = (const char **)cstring_argv->elts;
+ APR_ARRAY_PUSH(utf8_argv, const char *) = utf8_arg;
+ }
+
+ APR_ARRAY_PUSH(utf8_argv, const char *) = NULL;
+
+ *utf8_argv_p = (const char **)utf8_argv->elts;
return SVN_NO_ERROR;
}
@@ -1447,3 +1470,30 @@ svn_cmdline__default_get_cstring_argv(co
*cstring_argv_p = argv;
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_cmdline__default_get_utf8_argv(const char **utf8_argv_p[],
+ int argc,
+ const char *argv[],
+ apr_pool_t *result_pool)
+{
+ apr_array_header_t *utf8_argv;
+ int i;
+
+ utf8_argv = apr_array_make(result_pool, argc + 1, sizeof(const char *));
+
+ for (i = 0; i < argc; i++)
+ {
+ const char *arg = argv[i];
+ char *utf8_arg;
+
+ SVN_ERR(svn_utf_cstring_to_utf8(&utf8_arg, arg, result_pool));
+
+ APR_ARRAY_PUSH(utf8_argv, const char *) = utf8_arg;
+ }
+
+ APR_ARRAY_PUSH(utf8_argv, const char *) = NULL;
+
+ *utf8_argv_p = (const char **)utf8_argv->elts;
+ return SVN_NO_ERROR;
+}