svn commit: r1926218 - in /subversion/trunk: ./ subversion/include/private/svn_cmdline_private.h subversion/libsvn_subr/cmdline.c

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
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;
+}
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.