Author: ivan
Date: Wed May 20 15:07:02 2026
New Revision: 1934437
Log:
Make `svn --version -v` report actual character encoding used on Windows.
Currently Windows has platform specific code for character set conversion.
On Windows CP_THREAD_ACP used as "locale encoding", while
SVN_APR_LOCALE_CHARSET is used on non-Windows platforms.
* subversion/include/private/svn_utf_private.h
(svn_utf__locale_encoding): New function declaration.
* subversion/libsvn_subr/sysinfo.c
(): Remove #include <apr_portable.h>
(svn_sysinfo__character_encoding): Use svn_utf__locale_encoding()
instead of apr_os_locale_encoding().
* subversion/libsvn_subr/utf.c
(svn_utf__locale_encoding): New. Use
svn_subr__win32_xlate_locale_encoding() on Windows and
apr_os_locale_encoding() on other platforms.
* subversion/libsvn_subr/win32_xlate.c
(svn_subr__win32_xlate_locale_encoding): New. Use GetCPInfoExW()
to get actual codepage for CP_THREAD_ACP.
* subversion/libsvn_subr/win32_xlate.h
(svn_subr__win32_xlate_locale_encoding): New function declaration.
Modified:
subversion/trunk/subversion/include/private/svn_utf_private.h
subversion/trunk/subversion/libsvn_subr/sysinfo.c
subversion/trunk/subversion/libsvn_subr/utf.c
subversion/trunk/subversion/libsvn_subr/win32_xlate.c
subversion/trunk/subversion/libsvn_subr/win32_xlate.h
Modified: subversion/trunk/subversion/include/private/svn_utf_private.h
==============================================================================
--- subversion/trunk/subversion/include/private/svn_utf_private.h Wed May 20 13:44:49 2026 (r1934436)
+++ subversion/trunk/subversion/include/private/svn_utf_private.h Wed May 20 15:07:02 2026 (r1934437)
@@ -93,6 +93,10 @@ svn_utf__cstring_from_utf8_fuzzy(const c
const char *,
apr_pool_t *));
+/* Get the actual name of the character that will be used when
+ * SVN_APR_LOCALE_CHARSET is provided.
+ * Allocate result in POOL. */
+const char *svn_utf__locale_encoding(apr_pool_t *pool);
#if defined(WIN32)
/* On Windows: Convert the UTF-8 string SRC to UTF-16.
Modified: subversion/trunk/subversion/libsvn_subr/sysinfo.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/sysinfo.c Wed May 20 13:44:49 2026 (r1934436)
+++ subversion/trunk/subversion/libsvn_subr/sysinfo.c Wed May 20 15:07:02 2026 (r1934437)
@@ -35,7 +35,6 @@
#include <apr_thread_proc.h>
#include <apr_version.h>
#include <apu_version.h>
-#include <apr_portable.h> /* for apr_os_locale_encoding() */
#include "svn_pools.h"
#include "svn_ctype.h"
@@ -141,7 +140,7 @@ svn_sysinfo__release_name(apr_pool_t *po
const char *
svn_sysinfo__character_encoding(apr_pool_t *pool)
{
- return apr_os_locale_encoding(pool);
+ return svn_utf__locale_encoding(pool);
}
const apr_array_header_t *
Modified: subversion/trunk/subversion/libsvn_subr/utf.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/utf.c Wed May 20 13:44:49 2026 (r1934436)
+++ subversion/trunk/subversion/libsvn_subr/utf.c Wed May 20 15:07:02 2026 (r1934437)
@@ -31,6 +31,7 @@
#include <apr_lib.h>
#include <apr_xlate.h>
#include <apr_atomic.h>
+#include <apr_portable.h> /* for apr_os_locale_encoding() */
#include "svn_hash.h"
#include "svn_string.h"
@@ -1195,6 +1196,16 @@ svn_utf__utf32_to_utf8(const svn_string_
return SVN_NO_ERROR;
}
+const char *
+svn_utf__locale_encoding(apr_pool_t *pool)
+{
+#if defined(WIN32)
+ /* We have special code for xlate on Windows. */
+ return svn_subr__win32_xlate_locale_encoding(pool);
+#else
+ return apr_os_locale_encoding(pool);
+#endif
+}
#ifdef WIN32
Modified: subversion/trunk/subversion/libsvn_subr/win32_xlate.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/win32_xlate.c Wed May 20 13:44:49 2026 (r1934436)
+++ subversion/trunk/subversion/libsvn_subr/win32_xlate.c Wed May 20 15:07:02 2026 (r1934437)
@@ -259,6 +259,23 @@ svn_subr__win32_xlate_to_stringbuf(svn_s
return APR_SUCCESS;
}
+const char *
+svn_subr__win32_xlate_locale_encoding(apr_pool_t *pool)
+{
+ CPINFOEXW cpinfo = { 0 };
+
+ if (GetCPInfoExW(CP_THREAD_ACP, 0, &cpinfo))
+ {
+ return apr_psprintf(pool, "CP%u", (unsigned int)cpinfo.CodePage);
+ }
+ else
+ {
+ /* Fallback to apr_os_default_encoding() like
+ * apr_os_locale_encoding(). */
+ return apr_os_default_encoding(pool);
+ }
+}
+
#else /* !WIN32 */
/* Silence OSX ranlib warnings about object files with no symbols. */
Modified: subversion/trunk/subversion/libsvn_subr/win32_xlate.h
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/win32_xlate.h Wed May 20 13:44:49 2026 (r1934436)
+++ subversion/trunk/subversion/libsvn_subr/win32_xlate.h Wed May 20 15:07:02 2026 (r1934437)
@@ -49,6 +49,9 @@ svn_subr__win32_xlate_to_stringbuf(svn_s
svn_stringbuf_t **dest,
apr_pool_t *pool);
+/* Windows specific implementation of svn_utf__locale_encoding(). */
+const char *svn_subr__win32_xlate_locale_encoding(apr_pool_t *pool);
+
#endif /* WIN32 */
#endif /* SVN_LIBSVN_SUBR_WIN32_XLATE_H */
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.