]> granicus.if.org Git - mutt/blob - ascii.c
Convert pgp_app_handler to use buffer pool.
[mutt] / ascii.c
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
37 inline int ascii_isupper (int c)
38 {
39   return (c >= 'A') && (c <= 'Z');
40 }
41
42 inline int ascii_islower (int c)
43 {
44   return (c >= 'a') && (c <= 'z');
45 }
46
47 inline int ascii_toupper (int c)
48 {
49   if (ascii_islower (c))
50     return c & ~32;
51
52   return c;
53 }
54
55 inline int ascii_tolower (int c)
56 {
57   if (ascii_isupper (c))
58     return c | 32;
59
60   return c;
61 }
62
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++)
75   {
76     if ((i = ascii_tolower (*a) - ascii_tolower (*b)))
77       return i;
78     /* test for NUL here rather that in the for loop in order to detect unqual
79      * length strings (see http://dev.mutt.org/trac/ticket/3601)
80      */
81     if (!*a)
82       break;
83   }
84
85   return 0;
86 }
87
88 int ascii_strncasecmp (const char *a, const char *b, int n)
89 {
90   int i, j;
91
92   if (a == b)
93     return 0;
94   if (a == NULL && b)
95     return -1;
96   if (b == NULL && a)
97     return 1;
98
99   for (j = 0; (*a || *b) && j < n; a++, b++, j++)
100   {
101     if ((i = ascii_tolower (*a) - ascii_tolower (*b)))
102       return i;
103   }
104
105   return 0;
106 }