1 /*
2 * Copyright (C) 2001 Thomas Roessler <roessler@does-not-exist.org>
3 *
4 * This program is free software; you can redistribute it
5 * and/or modify it under the terms of the GNU General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later
8 * version.
9 *
10 * This program is distributed in the hope that it will be
11 * useful, but WITHOUT ANY WARRANTY; without even the implied
12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13 * PURPOSE. See the GNU General Public License for more
14 * details.
15 *
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the Free
18 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 *
21 */
22
23
24 /*
25 * Versions of the string comparison functions which are
26 * locale-insensitive.
27 */
28
29 #if HAVE_CONFIG_H
30 # include "config.h"
31 #endif
32
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include "ascii.h"
36
ascii_isupper(int c)37 int ascii_isupper (int c)
38 {
39 return (c >= 'A') && (c <= 'Z');
40 }
41
ascii_islower(int c)42 int ascii_islower (int c)
43 {
44 return (c >= 'a') && (c <= 'z');
45 }
46
ascii_toupper(int c)47 int ascii_toupper (int c)
48 {
49 if (ascii_islower (c))
50 return c & ~32;
51
52 return c;
53 }
54
ascii_tolower(int c)55 int ascii_tolower (int c)
56 {
57 if (ascii_isupper (c))
58 return c | 32;
59
60 return c;
61 }
62
ascii_strcasecmp(const char * a,const char * b)63 int ascii_strcasecmp (const char *a, const char *b)
64 {
65 int i;
66
67 if (a == b)
68 return 0;
69 if (a == NULL && b)
70 return -1;
71 if (b == NULL && a)
72 return 1;
73
74 for (; *a || *b; a++, b++)
75 {
76 if ((i = ascii_tolower (*a) - ascii_tolower (*b)))
77 return i;
78 }
79
80 return 0;
81 }
82
ascii_strncasecmp(const char * a,const char * b,int n)83 int ascii_strncasecmp (const char *a, const char *b, int n)
84 {
85 int i, j;
86
87 if (a == b)
88 return 0;
89 if (a == NULL && b)
90 return -1;
91 if (b == NULL && a)
92 return 1;
93
94 for (j = 0; (*a || *b) && j < n; a++, b++, j++)
95 {
96 if ((i = ascii_tolower (*a) - ascii_tolower (*b)))
97 return i;
98 }
99
100 return 0;
101 }
102