Author: rinrab
Date: Mon May 26 12:19:34 2025
New Revision: 1925816
URL: http://svn.apache.org/viewvc?rev=1925816&view=rev
Log:
On the 'utf8-cmdline-prototype' branch: add svn_cmdline__get_utf8_argv
function and platform-specific implementation.
* 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/branches/utf8-cmdline-prototype/subversion/include/private/svn_cmdline_private.h
subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/cmdline.c
Modified:
subversion/branches/utf8-cmdline-prototype/subversion/include/private/svn_cmdline_private.h
URL:
http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/include/private/svn_cmdline_private.h?rev=1925816&r1=1925815&r2=1925816&view=diff
==============================================================================
---
subversion/branches/utf8-cmdline-prototype/subversion/include/private/svn_cmdline_private.h
(original)
+++
subversion/branches/utf8-cmdline-prototype/subversion/include/private/svn_cmdline_private.h
Mon May 26 12:19:34 2025
@@ -286,6 +286,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
@@ -296,14 +302,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/branches/utf8-cmdline-prototype/subversion/libsvn_subr/cmdline.c
URL:
http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/cmdline.c?rev=1925816&r1=1925815&r2=1925816&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/cmdline.c
(original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/cmdline.c
Mon May 26 12:19:34 2025
@@ -1,3 +1,4 @@
+#include "svn_cmdline_private.h"
/*
* cmdline.c : Helpers for command-line programs.
*
@@ -1937,10 +1938,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;
}
@@ -1955,3 +1978,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;
+}