Hi,
I want to initialize only NLS in Ruby bindings. The bindings
doesn't need to initialize others (apr_pool, ...).
svn_cmdline_init() initializes NLS but this initializes
apr_pool too.
This patch extract NLS initialization code from
svn_cmdline_init() for reusing the code by bindings.
In Ruby bindings, I don't want to call textdomain(). So I
divided the code into svn_nls_environment_init() and
svn_nls_init(). I'll use only svn_nls_environment_init() in
Ruby bindings.
{{{
Extract NLS initialization code from svn_cmdline_init.
* subversion/libsvn_subr/nls.c
  (svn_nls_environment_init): Initialize NLS environment.
  (svn_nls_init): Initialize NLS environment and set up
  text domain.
* subversion/include/svn_nls.h: Add.
* subversion/libsvn_subr/cmdline.c
  (svn_cmdline_init): Extract NLS initialization code.
}}}
Thanks,
--
kou
Index: subversion/include/svn_nls.h
===================================================================
--- subversion/include/svn_nls.h	(revision 0)
+++ subversion/include/svn_nls.h	(revision 0)
@@ -0,0 +1,53 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Copyright (c) 2000-2005 CollabNet.  All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals.  For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_nls.h
+ * @brief Support functions for NLS programs
+ */
+
+
+
+#ifndef SVN_NLS_H
+#define SVN_NLS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** Set up the NLS environment.
+ * If @a error_stream is non-null, print error messages to the stream.
+ * Return @c EXIT_SUCCESS if successful, otherwise @c EXIT_FAILURE.
+ *
+ * @note This function is for bindings. usually use svn_cmdline_init().
+ *       This function should be called after initializing APR.
+ */
+int svn_nls_environment_init (FILE *error_stream);
+
+/** Set up the NLS which includes NLS environment set up.
+ * If @a error_stream is non-null, print error messages to the stream.
+ * Return @c EXIT_SUCCESS if successful, otherwise @c EXIT_FAILURE.
+ *
+ * @note This function is for bindings. usually use svn_cmdline_init().
+ *       This function should be called after initializing APR.
+ */
+int svn_nls_init (FILE *error_stream);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_NLS_H */
Index: subversion/libsvn_subr/cmdline.c
===================================================================
--- subversion/libsvn_subr/cmdline.c	(revision 15306)
+++ subversion/libsvn_subr/cmdline.c	(working copy)
@@ -35,6 +35,7 @@
 #include "svn_path.h"
 #include "svn_pools.h"
 #include "svn_error.h"
+#include "svn_nls.h"
 #include "utf_impl.h"
 
 #include "svn_private_config.h"
@@ -162,72 +163,9 @@
   pool = svn_pool_create (NULL);
   svn_utf_initialize (pool);
 
-#ifdef ENABLE_NLS
-#ifdef WIN32
-  {
-    WCHAR ucs2_path[MAX_PATH];
-    char* utf8_path;
-    const char* internal_path;
-    apr_pool_t* pool;
-    apr_status_t apr_err;
-    apr_size_t inwords, outbytes, outlength;
-    
-    apr_pool_create (&pool, 0);
-    /* get exe name - our locale info will be in '../share/locale' */
-    inwords = GetModuleFileNameW (0, ucs2_path,
-                                  sizeof (ucs2_path) / sizeof(ucs2_path[0]));
-    if (! inwords)
-      {
-        /* We must be on a Win9x machine, so attempt to get an ANSI path,
-           and convert it to Unicode. */
-        CHAR ansi_path[MAX_PATH];
-
-        if (! GetModuleFileNameA (0, ansi_path, sizeof (ansi_path)))
-          goto utf8_error;
-
-        inwords = 
-          MultiByteToWideChar (CP_ACP, 0, ansi_path, -1, ucs2_path,
-                               sizeof (ucs2_path) / sizeof (ucs2_path[0]));
-        if (! inwords)
-          goto utf8_error;
-      }
-
-    outbytes = outlength = 3 * (inwords + 1);
-    utf8_path = apr_palloc (pool, outlength);
-    apr_err = apr_conv_ucs2_to_utf8 (ucs2_path, &inwords,
-                                     utf8_path, &outbytes);
-    if (!apr_err && (inwords > 0 || outbytes == 0))
-      apr_err = APR_INCOMPLETE;
-    if (apr_err)
-      {
-       utf8_error:
-        if (error_stream)
-          fprintf (error_stream, "Can't convert module path to UTF-8");
-        return EXIT_FAILURE;
-      }
-
-    utf8_path[outlength - outbytes] = '\0';
-    internal_path = svn_path_internal_style (utf8_path, pool);
-    /* get base path name */
-    internal_path = svn_path_dirname (internal_path, pool);
-    internal_path = svn_path_join (internal_path, SVN_LOCALE_RELATIVE_PATH,
-                                   pool);
-    bindtextdomain (PACKAGE_NAME, internal_path);    
-    apr_pool_destroy (pool);
-  }
-#else
-  bindtextdomain(PACKAGE_NAME, SVN_LOCALE_DIR);
-#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
-  bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
-#endif
-#endif
-  textdomain(PACKAGE_NAME);
-#endif
-
-  return EXIT_SUCCESS;
+  return svn_nls_init(error_stream);
 }
 
-
 svn_error_t *
 svn_cmdline_cstring_from_utf8 (const char **dest,
                                const char *src,
Index: subversion/libsvn_subr/nls.c
===================================================================
--- subversion/libsvn_subr/nls.c	(revision 0)
+++ subversion/libsvn_subr/nls.c	(revision 0)
@@ -0,0 +1,114 @@
+/*
+ * nls.c :  Helpers for NLS programs.
+ *
+ * ====================================================================
+ * Copyright (c) 2000-2005 CollabNet.  All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals.  For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ */
+
+#include <stdlib.h>
+
+#ifndef WIN32
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#endif
+
+#include <apr_errno.h>
+
+#include "svn_error.h"
+#include "svn_pools.h"
+
+#include "svn_private_config.h"
+
+
+int
+svn_nls_environment_init (FILE *error_stream)
+{
+#ifdef ENABLE_NLS
+#ifdef WIN32
+  {
+    WCHAR ucs2_path[MAX_PATH];
+    char* utf8_path;
+    const char* internal_path;
+    apr_pool_t* pool;
+    apr_status_t apr_err;
+    apr_size_t inwords, outbytes, outlength;
+    
+    apr_pool_create (&pool, 0);
+    /* get exe name - our locale info will be in '../share/locale' */
+    inwords = GetModuleFileNameW (0, ucs2_path,
+                                  sizeof (ucs2_path) / sizeof(ucs2_path[0]));
+    if (! inwords)
+      {
+        /* We must be on a Win9x machine, so attempt to get an ANSI path,
+           and convert it to Unicode. */
+        CHAR ansi_path[MAX_PATH];
+
+        if (! GetModuleFileNameA (0, ansi_path, sizeof (ansi_path)))
+          goto utf8_error;
+
+        inwords = 
+          MultiByteToWideChar (CP_ACP, 0, ansi_path, -1, ucs2_path,
+                               sizeof (ucs2_path) / sizeof (ucs2_path[0]));
+        if (! inwords)
+          goto utf8_error;
+      }
+
+    outbytes = outlength = 3 * (inwords + 1);
+    utf8_path = apr_palloc (pool, outlength);
+    apr_err = apr_conv_ucs2_to_utf8 (ucs2_path, &inwords,
+                                     utf8_path, &outbytes);
+    if (!apr_err && (inwords > 0 || outbytes == 0))
+      apr_err = APR_INCOMPLETE;
+    if (apr_err)
+      {
+       utf8_error:
+        if (error_stream)
+          fprintf (error_stream, "Can't convert module path to UTF-8");
+        return EXIT_FAILURE;
+      }
+
+    utf8_path[outlength - outbytes] = '\0';
+    internal_path = svn_path_internal_style (utf8_path, pool);
+    /* get base path name */
+    internal_path = svn_path_dirname (internal_path, pool);
+    internal_path = svn_path_join (internal_path, SVN_LOCALE_RELATIVE_PATH,
+                                   pool);
+    bindtextdomain (PACKAGE_NAME, internal_path);    
+    apr_pool_destroy (pool);
+  }
+#else
+  bindtextdomain(PACKAGE_NAME, SVN_LOCALE_DIR);
+#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
+  bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
+#endif
+#endif
+#endif
+
+  return EXIT_SUCCESS;
+}
+
+int
+svn_nls_init (FILE *error_stream)
+{
+#ifdef ENABLE_NLS
+  if (svn_nls_environment_init(error_stream) != EXIT_SUCCESS) {
+    return EXIT_FAILURE;
+  }
+  textdomain(PACKAGE_NAME);
+#endif
+
+  return EXIT_SUCCESS;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Jul  9 18:24:21 2005