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;
+}


Reply via email to