1/*
2 * Copyright 1992, 1993 by TOSHIBA Corp.
3 *
4 * Permission to use, copy, modify, and distribute this software and its
5 * documentation for any purpose and without fee is hereby granted, provided
6 * that the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of TOSHIBA not be used in advertising
9 * or publicity pertaining to distribution of the software without specific,
10 * written prior permission. TOSHIBA make no representations about the
11 * suitability of this software for any purpose.  It is provided "as is"
12 * without express or implied warranty.
13 *
14 * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
16 * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
17 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
19 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
20 * SOFTWARE.
21 *
22 * Author: Katsuhisa Yano	TOSHIBA Corp.
23 *			   	mopi@osa.ilab.toshiba.co.jp
24 * Bug fixes: Bruno Haible	XFree86 Inc.
25 */
26
27#ifdef HAVE_CONFIG_H
28#include <config.h>
29#endif
30#include <X11/Xlib.h>
31#include "XlcPublic.h"
32
33/* Don't use <ctype.h> here because it is locale dependent. */
34
35#define set_toupper(ch) do {  \
36  if (ch >= 'a' && ch <= 'z') \
37    ch = (unsigned char) (ch - 'a' + 'A'); \
38} while (0)
39
40/* Compares two ISO 8859-1 strings, ignoring case of ASCII letters.
41   Like strcasecmp in an ASCII locale. */
42int
43_XlcCompareISOLatin1(
44    const char *str1,
45    const char *str2)
46{
47    unsigned char ch1, ch2;
48
49    for ( ; ; str1++, str2++) {
50	ch1 = (unsigned char) *str1;
51	ch2 = (unsigned char) *str2;
52	if (ch1 == '\0' || ch2 == '\0')
53	    break;
54	set_toupper(ch1);
55	set_toupper(ch2);
56	if (ch1 != ch2)
57	    break;
58    }
59
60    return ch1 - ch2;
61}
62
63/* Compares two ISO 8859-1 strings, at most len bytes of each, ignoring
64   case of ASCII letters. Like strncasecmp in an ASCII locale. */
65int
66_XlcNCompareISOLatin1(
67    const char *str1,
68    const char *str2,
69    int len)
70{
71    unsigned char ch1, ch2;
72
73    for ( ; ; str1++, str2++, len--) {
74	if (len == 0)
75	    return 0;
76	ch1 = (unsigned char) *str1;
77	ch2 = (unsigned char) *str2;
78	if (ch1 == '\0' || ch2 == '\0')
79	    break;
80	set_toupper(ch1);
81	set_toupper(ch2);
82	if (ch1 != ch2)
83	    break;
84    }
85
86    return ch1 - ch2;
87}
88