diff options
author | marha <marha@users.sourceforge.net> | 2012-06-08 09:33:13 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-06-08 09:33:13 +0200 |
commit | 990bc3f015a4f8fce2eb918375defcd44980a845 (patch) | |
tree | 8e8301f19482b52cc00bd95b4593522cc93267af /libX11/src/xlibi18n/lcPrTxt.c | |
parent | 1af6fc1b5d93e54d6674de8b5870448b29f139a7 (diff) | |
download | vcxsrv-990bc3f015a4f8fce2eb918375defcd44980a845.tar.gz vcxsrv-990bc3f015a4f8fce2eb918375defcd44980a845.tar.bz2 vcxsrv-990bc3f015a4f8fce2eb918375defcd44980a845.zip |
Used synchronise script to update files
Diffstat (limited to 'libX11/src/xlibi18n/lcPrTxt.c')
-rw-r--r-- | libX11/src/xlibi18n/lcPrTxt.c | 580 |
1 files changed, 290 insertions, 290 deletions
diff --git a/libX11/src/xlibi18n/lcPrTxt.c b/libX11/src/xlibi18n/lcPrTxt.c index 1b7627cf8..ae8f258c9 100644 --- a/libX11/src/xlibi18n/lcPrTxt.c +++ b/libX11/src/xlibi18n/lcPrTxt.c @@ -1,290 +1,290 @@ -/* - * Copyright 1992, 1993 by TOSHIBA Corp. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of TOSHIBA not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. TOSHIBA make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING - * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL - * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR - * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * - * Author: Katsuhisa Yano TOSHIBA Corp. - * mopi@osa.ilab.toshiba.co.jp - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include "Xlibint.h" -#include "XlcPubI.h" -#include <X11/Xutil.h> -#include <X11/Xatom.h> - -static XPointer * -alloc_list( - Bool is_wide_char, - int count, - int nitems) -{ - if (is_wide_char) { - wchar_t **wstr_list; - - wstr_list = (wchar_t **) Xmalloc(count * sizeof(wchar_t *)); - if (wstr_list == NULL) - return (XPointer *) NULL; - - *wstr_list = (wchar_t *) Xmalloc(nitems * sizeof(wchar_t)); - if (*wstr_list == NULL) { - Xfree(wstr_list); - return (XPointer *) NULL; - } - - return (XPointer *) wstr_list; - } else { - char **str_list; - - str_list = (char **) Xmalloc(count * sizeof(char *)); - if (str_list == NULL) - return (XPointer *) NULL; - - *str_list = (char *) Xmalloc(nitems); - if (*str_list == NULL) { - Xfree(str_list); - return (XPointer *) NULL; - } - - return (XPointer *) str_list; - } -} - -static void -copy_list( - Bool is_wide_char, - XPointer text, - XPointer *list, - int count) -{ - int length; - - if (is_wide_char) { - wchar_t *wc_text, *wstr, **wstr_list; - - wc_text = (wchar_t *) text; - wstr_list = (wchar_t **) list; - - for (wstr = *wstr_list; count > 0; count--, wstr_list++) { - _Xwcscpy(wstr, wc_text); - *wstr_list = wstr; - length = _Xwcslen(wstr) + 1; - wstr += length; - wc_text += length; - } - } else { - char *mb_text, *str, **str_list; - - mb_text = (char *) text; - str_list = (char **) list; - - for (str = *str_list; count > 0; count--, str_list++) { - strcpy(str, mb_text); - *str_list = str; - length = strlen(str) + 1; - str += length; - mb_text += length; - } - } -} - -static int -_XTextPropertyToTextList( - XLCd lcd, - Display *dpy, - const XTextProperty *text_prop, - const char *to_type, - XPointer **list_ret, - int *count_ret) -{ - XlcConv conv = NULL; - const char *from_type; - XPointer from, to, buf; - char *str_ptr, *last_ptr; - Atom encoding; - int from_left, to_left, buf_len, ret, len; - int unconv_num, nitems = text_prop->nitems; - Bool is_wide_char = False, do_strcpy = False; - - if (strcmp(XlcNWideChar, to_type) == 0) - is_wide_char = True; - - if (nitems <= 0) { - *list_ret = NULL; - *count_ret = 0; - return Success; - } - - if (text_prop->format != 8) - return XConverterNotFound; - - encoding = text_prop->encoding; - if (encoding == XA_STRING) - from_type = XlcNString; - else if (encoding == XInternAtom(dpy, "UTF8_STRING", False)) - from_type = XlcNUtf8String; - else if (encoding == XInternAtom(dpy, "COMPOUND_TEXT", False)) - from_type = XlcNCompoundText; - else if (encoding == XInternAtom(dpy, XLC_PUBLIC(lcd, encoding_name), False)) - from_type = XlcNMultiByte; - else - return XConverterNotFound; - - if (is_wide_char) { - buf_len = (text_prop->nitems + 1) * sizeof(wchar_t);; - } else { - if (strcmp(to_type, XlcNUtf8String) == 0) - buf_len = text_prop->nitems * 6 + 1; - else - buf_len = text_prop->nitems * XLC_PUBLIC(lcd, mb_cur_max) + 1; - } - buf = (XPointer) Xmalloc(buf_len); - if (buf == NULL) - return XNoMemory; - to = buf; - to_left = buf_len; - - /* can be XlcNMultiByte to XlcNMultiByte, - or XlcNUtf8String to XlcNUtf8String */ - if (!strcmp(from_type, to_type)) { - do_strcpy = True; - } else { - conv = _XlcOpenConverter(lcd, from_type, lcd, to_type); - if (conv == NULL) { - Xfree(buf); - return XConverterNotFound; - } - } - - last_ptr = str_ptr = (char *) text_prop->value; - unconv_num = *count_ret = 0; - - while (1) { - if (nitems == 0 || *str_ptr == 0) { - from = (XPointer) last_ptr; - from_left = str_ptr - last_ptr; - last_ptr = str_ptr; - - if (do_strcpy) { - len = min(from_left, to_left); - strncpy(to, from, len); - from += len; - to += len; - from_left -= len; - to_left -= len; - ret = 0; - } else { - ret = _XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0); - } - - if (ret < 0) - continue; - - unconv_num += ret; - (*count_ret)++; - - if (nitems == 0) - break; - last_ptr = ++str_ptr; - if (is_wide_char) { - *((wchar_t *)to) = (wchar_t) 0; - to += sizeof(wchar_t); - to_left -= sizeof(wchar_t); - } else { - *((char *)to) = '\0'; - to++; - to_left--; - } - if (! do_strcpy) - _XlcResetConverter(conv); - } else - str_ptr++; - - nitems--; - } - - if (! do_strcpy) - _XlcCloseConverter(conv); - - if (is_wide_char) { - *((wchar_t *) to) = (wchar_t) 0; - to_left -= sizeof(wchar_t); - } else { - *((char *) to) = '\0'; - to_left--; - } - - *list_ret = alloc_list(is_wide_char, *count_ret, buf_len - to_left); - if (*list_ret) - copy_list(is_wide_char, buf, *list_ret, *count_ret); - - Xfree(buf); - - return unconv_num; -} - -int -_XmbTextPropertyToTextList( - XLCd lcd, - Display *dpy, - const XTextProperty *text_prop, - char ***list_ret, - int *count_ret) -{ - return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNMultiByte, - (XPointer **) list_ret, count_ret); -} - -int -_XwcTextPropertyToTextList( - XLCd lcd, - Display *dpy, - const XTextProperty *text_prop, - wchar_t ***list_ret, - int *count_ret) -{ - return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNWideChar, - (XPointer **) list_ret, count_ret); -} - -int -_Xutf8TextPropertyToTextList( - XLCd lcd, - Display *dpy, - const XTextProperty *text_prop, - char ***list_ret, - int *count_ret) -{ - return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNUtf8String, - (XPointer **) list_ret, count_ret); -} - -void -_XwcFreeStringList( - XLCd lcd, - wchar_t **list) -{ - if (list) { - if (*list) - Xfree(*list); - Xfree(list); - } -} +/*
+ * Copyright 1992, 1993 by TOSHIBA Corp.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of TOSHIBA not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. TOSHIBA make no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Katsuhisa Yano TOSHIBA Corp.
+ * mopi@osa.ilab.toshiba.co.jp
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "Xlibint.h"
+#include "XlcPubI.h"
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+
+static XPointer *
+alloc_list(
+ Bool is_wide_char,
+ int count,
+ int nitems)
+{
+ if (is_wide_char) {
+ wchar_t **wstr_list;
+
+ wstr_list = (wchar_t **) Xmalloc(count * sizeof(wchar_t *));
+ if (wstr_list == NULL)
+ return (XPointer *) NULL;
+
+ *wstr_list = (wchar_t *) Xmalloc(nitems * sizeof(wchar_t));
+ if (*wstr_list == NULL) {
+ Xfree(wstr_list);
+ return (XPointer *) NULL;
+ }
+
+ return (XPointer *) wstr_list;
+ } else {
+ char **str_list;
+
+ str_list = (char **) Xmalloc(count * sizeof(char *));
+ if (str_list == NULL)
+ return (XPointer *) NULL;
+
+ *str_list = (char *) Xmalloc(nitems);
+ if (*str_list == NULL) {
+ Xfree(str_list);
+ return (XPointer *) NULL;
+ }
+
+ return (XPointer *) str_list;
+ }
+}
+
+static void
+copy_list(
+ Bool is_wide_char,
+ XPointer text,
+ XPointer *list,
+ int count)
+{
+ int length;
+
+ if (is_wide_char) {
+ wchar_t *wc_text, *wstr, **wstr_list;
+
+ wc_text = (wchar_t *) text;
+ wstr_list = (wchar_t **) list;
+
+ for (wstr = *wstr_list; count > 0; count--, wstr_list++) {
+ _Xwcscpy(wstr, wc_text);
+ *wstr_list = wstr;
+ length = _Xwcslen(wstr) + 1;
+ wstr += length;
+ wc_text += length;
+ }
+ } else {
+ char *mb_text, *str, **str_list;
+
+ mb_text = (char *) text;
+ str_list = (char **) list;
+
+ for (str = *str_list; count > 0; count--, str_list++) {
+ strcpy(str, mb_text);
+ *str_list = str;
+ length = strlen(str) + 1;
+ str += length;
+ mb_text += length;
+ }
+ }
+}
+
+static int
+_XTextPropertyToTextList(
+ XLCd lcd,
+ Display *dpy,
+ const XTextProperty *text_prop,
+ const char *to_type,
+ XPointer **list_ret,
+ int *count_ret)
+{
+ XlcConv conv = NULL;
+ const char *from_type;
+ XPointer from, to, buf;
+ char *str_ptr, *last_ptr;
+ Atom encoding;
+ int from_left, to_left, buf_len, ret, len;
+ int unconv_num, nitems = text_prop->nitems;
+ Bool is_wide_char = False, do_strcpy = False;
+
+ if (strcmp(XlcNWideChar, to_type) == 0)
+ is_wide_char = True;
+
+ if (nitems <= 0) {
+ *list_ret = NULL;
+ *count_ret = 0;
+ return Success;
+ }
+
+ if (text_prop->format != 8)
+ return XConverterNotFound;
+
+ encoding = text_prop->encoding;
+ if (encoding == XA_STRING)
+ from_type = XlcNString;
+ else if (encoding == XInternAtom(dpy, "UTF8_STRING", False))
+ from_type = XlcNUtf8String;
+ else if (encoding == XInternAtom(dpy, "COMPOUND_TEXT", False))
+ from_type = XlcNCompoundText;
+ else if (encoding == XInternAtom(dpy, XLC_PUBLIC(lcd, encoding_name), False))
+ from_type = XlcNMultiByte;
+ else
+ return XConverterNotFound;
+
+ if (is_wide_char) {
+ buf_len = (text_prop->nitems + 1) * sizeof(wchar_t);;
+ } else {
+ if (strcmp(to_type, XlcNUtf8String) == 0)
+ buf_len = text_prop->nitems * 6 + 1;
+ else
+ buf_len = text_prop->nitems * XLC_PUBLIC(lcd, mb_cur_max) + 1;
+ }
+ buf = (XPointer) Xmalloc(buf_len);
+ if (buf == NULL)
+ return XNoMemory;
+ to = buf;
+ to_left = buf_len;
+
+ /* can be XlcNMultiByte to XlcNMultiByte,
+ or XlcNUtf8String to XlcNUtf8String */
+ if (!strcmp(from_type, to_type)) {
+ do_strcpy = True;
+ } else {
+ conv = _XlcOpenConverter(lcd, from_type, lcd, to_type);
+ if (conv == NULL) {
+ Xfree(buf);
+ return XConverterNotFound;
+ }
+ }
+
+ last_ptr = str_ptr = (char *) text_prop->value;
+ unconv_num = *count_ret = 0;
+
+ while (1) {
+ if (nitems == 0 || *str_ptr == 0) {
+ from = (XPointer) last_ptr;
+ from_left = str_ptr - last_ptr;
+ last_ptr = str_ptr;
+
+ if (do_strcpy) {
+ len = min(from_left, to_left);
+ strncpy(to, from, len);
+ from += len;
+ to += len;
+ from_left -= len;
+ to_left -= len;
+ ret = 0;
+ } else {
+ ret = _XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0);
+ }
+
+ if (ret < 0)
+ continue;
+
+ unconv_num += ret;
+ (*count_ret)++;
+
+ if (nitems == 0)
+ break;
+ last_ptr = ++str_ptr;
+ if (is_wide_char) {
+ *((wchar_t *)to) = (wchar_t) 0;
+ to += sizeof(wchar_t);
+ to_left -= sizeof(wchar_t);
+ } else {
+ *((char *)to) = '\0';
+ to++;
+ to_left--;
+ }
+ if (! do_strcpy)
+ _XlcResetConverter(conv);
+ } else
+ str_ptr++;
+
+ nitems--;
+ }
+
+ if (! do_strcpy)
+ _XlcCloseConverter(conv);
+
+ if (is_wide_char) {
+ *((wchar_t *) to) = (wchar_t) 0;
+ to_left -= sizeof(wchar_t);
+ } else {
+ *((char *) to) = '\0';
+ to_left--;
+ }
+
+ *list_ret = alloc_list(is_wide_char, *count_ret, buf_len - to_left);
+ if (*list_ret)
+ copy_list(is_wide_char, buf, *list_ret, *count_ret);
+
+ Xfree(buf);
+
+ return unconv_num;
+}
+
+int
+_XmbTextPropertyToTextList(
+ XLCd lcd,
+ Display *dpy,
+ const XTextProperty *text_prop,
+ char ***list_ret,
+ int *count_ret)
+{
+ return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNMultiByte,
+ (XPointer **) list_ret, count_ret);
+}
+
+int
+_XwcTextPropertyToTextList(
+ XLCd lcd,
+ Display *dpy,
+ const XTextProperty *text_prop,
+ wchar_t ***list_ret,
+ int *count_ret)
+{
+ return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNWideChar,
+ (XPointer **) list_ret, count_ret);
+}
+
+int
+_Xutf8TextPropertyToTextList(
+ XLCd lcd,
+ Display *dpy,
+ const XTextProperty *text_prop,
+ char ***list_ret,
+ int *count_ret)
+{
+ return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNUtf8String,
+ (XPointer **) list_ret, count_ret);
+}
+
+void
+_XwcFreeStringList(
+ XLCd lcd,
+ wchar_t **list)
+{
+ if (list) {
+ if (*list)
+ Xfree(*list);
+ Xfree(list);
+ }
+}
|