svn commit: r1925816 - in /subversion/branches/utf8-cmdline-prototype/subversion: include/private/svn_cmdline_private.h libsvn_subr/cmdline.c

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