📄 utf.c
字号:
if (node->handle) { err = convert_to_stringbuf(node, src->data, src->len, dest, pool); if (! err) err = check_utf8((*dest)->data, (*dest)->len, pool); } else { err = check_non_ascii(src->data, src->len, pool); if (! err) *dest = svn_stringbuf_dup(src, pool); } put_xlate_handle_node(node, SVN_UTF_NTOU_XLATE_HANDLE, pool); return err;}svn_error_t *svn_utf_string_to_utf8(const svn_string_t **dest, const svn_string_t *src, apr_pool_t *pool){ svn_stringbuf_t *destbuf; xlate_handle_node_t *node; svn_error_t *err; SVN_ERR(get_ntou_xlate_handle_node(&node, pool)); if (node->handle) { err = convert_to_stringbuf(node, src->data, src->len, &destbuf, pool); if (! err) err = check_utf8(destbuf->data, destbuf->len, pool); if (! err) *dest = svn_string_create_from_buf(destbuf, pool); } else { err = check_non_ascii(src->data, src->len, pool); if (! err) *dest = svn_string_dup(src, pool); } put_xlate_handle_node(node, SVN_UTF_NTOU_XLATE_HANDLE, pool); return err;}/* Common implementation for svn_utf_cstring_to_utf8, svn_utf_cstring_to_utf8_ex, svn_utf_cstring_from_utf8 and svn_utf_cstring_from_utf8_ex. Convert SRC to DEST using NODE->handle as the translator and allocating from POOL. */static svn_error_t *convert_cstring(const char **dest, const char *src, xlate_handle_node_t *node, apr_pool_t *pool){ if (node->handle) { svn_stringbuf_t *destbuf; SVN_ERR(convert_to_stringbuf(node, src, strlen(src), &destbuf, pool)); *dest = destbuf->data; } else { apr_size_t len = strlen(src); SVN_ERR(check_non_ascii(src, len, pool)); *dest = apr_pstrmemdup(pool, src, len); } return SVN_NO_ERROR;}svn_error_t *svn_utf_cstring_to_utf8(const char **dest, const char *src, apr_pool_t *pool){ xlate_handle_node_t *node; svn_error_t *err; SVN_ERR(get_ntou_xlate_handle_node(&node, pool)); err = convert_cstring(dest, src, node, pool); put_xlate_handle_node(node, SVN_UTF_NTOU_XLATE_HANDLE, pool); SVN_ERR(err); SVN_ERR(check_cstring_utf8(*dest, pool)); return SVN_NO_ERROR;}svn_error_t *svn_utf_cstring_to_utf8_ex2(const char **dest, const char *src, const char *frompage, apr_pool_t *pool){ xlate_handle_node_t *node; svn_error_t *err; const char *convset_key = get_xlate_key(SVN_APR_UTF8_CHARSET, frompage, pool); SVN_ERR(get_xlate_handle_node(&node, SVN_APR_UTF8_CHARSET, frompage, convset_key, pool)); err = convert_cstring(dest, src, node, pool); put_xlate_handle_node(node, convset_key, pool); SVN_ERR(err); SVN_ERR(check_cstring_utf8(*dest, pool)); return SVN_NO_ERROR;}svn_error_t *svn_utf_cstring_to_utf8_ex(const char **dest, const char *src, const char *frompage, const char *convset_key, apr_pool_t *pool){ return svn_utf_cstring_to_utf8_ex2(dest, src, frompage, pool);}svn_error_t *svn_utf_stringbuf_from_utf8(svn_stringbuf_t **dest, const svn_stringbuf_t *src, apr_pool_t *pool){ xlate_handle_node_t *node; svn_error_t *err; SVN_ERR(get_uton_xlate_handle_node(&node, pool)); if (node->handle) { err = check_utf8(src->data, src->len, pool); if (! err) err = convert_to_stringbuf(node, src->data, src->len, dest, pool); } else { err = check_non_ascii(src->data, src->len, pool); if (! err) *dest = svn_stringbuf_dup(src, pool); } put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool); return err;}svn_error_t *svn_utf_string_from_utf8(const svn_string_t **dest, const svn_string_t *src, apr_pool_t *pool){ svn_stringbuf_t *dbuf; xlate_handle_node_t *node; svn_error_t *err; SVN_ERR(get_uton_xlate_handle_node(&node, pool)); if (node->handle) { err = check_utf8(src->data, src->len, pool); if (! err) err = convert_to_stringbuf(node, src->data, src->len, &dbuf, pool); if (! err) *dest = svn_string_create_from_buf(dbuf, pool); } else { err = check_non_ascii(src->data, src->len, pool); if (! err) *dest = svn_string_dup(src, pool); } put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool); return err;}svn_error_t *svn_utf_cstring_from_utf8(const char **dest, const char *src, apr_pool_t *pool){ xlate_handle_node_t *node; svn_error_t *err; SVN_ERR(check_utf8(src, strlen(src), pool)); SVN_ERR(get_uton_xlate_handle_node(&node, pool)); err = convert_cstring(dest, src, node, pool); put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool); return err;}svn_error_t *svn_utf_cstring_from_utf8_ex2(const char **dest, const char *src, const char *topage, apr_pool_t *pool){ xlate_handle_node_t *node; svn_error_t *err; const char *convset_key = get_xlate_key(topage, SVN_APR_UTF8_CHARSET, pool); SVN_ERR(check_utf8(src, strlen(src), pool)); SVN_ERR(get_xlate_handle_node(&node, topage, SVN_APR_UTF8_CHARSET, convset_key, pool)); err = convert_cstring(dest, src, node, pool); put_xlate_handle_node(node, convset_key, pool); return err;}svn_error_t *svn_utf_cstring_from_utf8_ex(const char **dest, const char *src, const char *topage, const char *convset_key, apr_pool_t *pool){ return svn_utf_cstring_from_utf8_ex2(dest, src, topage, pool);}const char *svn_utf__cstring_from_utf8_fuzzy(const char *src, apr_pool_t *pool, svn_error_t *(*convert_from_utf8) (const char **, const char *, apr_pool_t *)){ const char *escaped, *converted; svn_error_t *err; escaped = fuzzy_escape(src, strlen(src), pool); /* Okay, now we have a *new* UTF-8 string, one that's guaranteed to contain only 7-bit bytes :-). Recode to native... */ err = convert_from_utf8(((const char **) &converted), escaped, pool); if (err) { svn_error_clear(err); return escaped; } else return converted; /* ### Check the client locale, maybe we can avoid that second * conversion! See Ulrich Drepper's patch at * http://subversion.tigris.org/issues/show_bug.cgi?id=807. */}const char *svn_utf_cstring_from_utf8_fuzzy(const char *src, apr_pool_t *pool){ return svn_utf__cstring_from_utf8_fuzzy(src, pool, svn_utf_cstring_from_utf8);}svn_error_t *svn_utf_cstring_from_utf8_stringbuf(const char **dest, const svn_stringbuf_t *src, apr_pool_t *pool){ svn_stringbuf_t *destbuf; SVN_ERR(svn_utf_stringbuf_from_utf8(&destbuf, src, pool)); *dest = destbuf->data; return SVN_NO_ERROR;}svn_error_t *svn_utf_cstring_from_utf8_string(const char **dest, const svn_string_t *src, apr_pool_t *pool){ svn_stringbuf_t *dbuf; xlate_handle_node_t *node; svn_error_t *err; SVN_ERR(get_uton_xlate_handle_node(&node, pool)); if (node->handle) { err = check_utf8(src->data, src->len, pool); if (! err) err = convert_to_stringbuf(node, src->data, src->len, &dbuf, pool); if (! err) *dest = dbuf->data; } else { err = check_non_ascii(src->data, src->len, pool); if (! err) *dest = apr_pstrmemdup(pool, src->data, src->len); } put_xlate_handle_node(node, SVN_UTF_UTON_XLATE_HANDLE, pool); return err;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -