diff options
Diffstat (limited to 'subversion/libsvn_subr/win32_xlate.c')
-rw-r--r-- | subversion/libsvn_subr/win32_xlate.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/subversion/libsvn_subr/win32_xlate.c b/subversion/libsvn_subr/win32_xlate.c index efe9c05..d95d62e 100644 --- a/subversion/libsvn_subr/win32_xlate.c +++ b/subversion/libsvn_subr/win32_xlate.c @@ -47,9 +47,12 @@ typedef int win32_xlate__dummy; #include "svn_string.h" #include "svn_utf.h" #include "private/svn_atomic.h" +#include "private/svn_subr_private.h" #include "win32_xlate.h" +#include "svn_private_config.h" + static svn_atomic_t com_initialized = 0; /* Initializes COM and keeps COM available until process exit. @@ -74,11 +77,11 @@ initialize_com(void *baton, apr_pool_t* pool) return SVN_NO_ERROR; } -typedef struct win32_xlate_t +struct svn_subr__win32_xlate_t { UINT from_page_id; UINT to_page_id; -} win32_xlate_t; +}; static apr_status_t get_page_id_from_name(UINT *page_id_p, const char *page_name, apr_pool_t *pool) @@ -113,16 +116,26 @@ get_page_id_from_name(UINT *page_id_p, const char *page_name, apr_pool_t *pool) if ((page_name[0] == 'c' || page_name[0] == 'C') && (page_name[1] == 'p' || page_name[1] == 'P')) { - *page_id_p = atoi(page_name + 2); + int page_id; + + err = svn_cstring_atoi(&page_id, page_name + 2); + if (err) + { + apr_status_t saved = err->apr_err; + svn_error_clear(err); + return saved; + } + + *page_id_p = page_id; return APR_SUCCESS; } err = svn_atomic__init_once(&com_initialized, initialize_com, NULL, pool); - if (err) { + apr_status_t saved = err->apr_err; svn_error_clear(err); - return APR_EGENERAL; + return saved; /* probably SVN_ERR_ATOMIC_INIT_FAILURE */ } hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, @@ -153,12 +166,12 @@ get_page_id_from_name(UINT *page_id_p, const char *page_name, apr_pool_t *pool) } apr_status_t -svn_subr__win32_xlate_open(win32_xlate_t **xlate_p, const char *topage, +svn_subr__win32_xlate_open(svn_subr__win32_xlate_t **xlate_p, const char *topage, const char *frompage, apr_pool_t *pool) { UINT from_page_id, to_page_id; apr_status_t apr_err = APR_SUCCESS; - win32_xlate_t *xlate; + svn_subr__win32_xlate_t *xlate; apr_err = get_page_id_from_name(&to_page_id, topage, pool); if (apr_err == APR_SUCCESS) @@ -177,7 +190,7 @@ svn_subr__win32_xlate_open(win32_xlate_t **xlate_p, const char *topage, } apr_status_t -svn_subr__win32_xlate_to_stringbuf(win32_xlate_t *handle, +svn_subr__win32_xlate_to_stringbuf(svn_subr__win32_xlate_t *handle, const char *src_data, apr_size_t src_length, svn_stringbuf_t **dest, |