mutt stable branch with some hacks
at master 106 lines 2.2 kB view raw
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 37inline int ascii_isupper (int c) 38{ 39 return (c >= 'A') && (c <= 'Z'); 40} 41 42inline int ascii_islower (int c) 43{ 44 return (c >= 'a') && (c <= 'z'); 45} 46 47inline int ascii_toupper (int c) 48{ 49 if (ascii_islower (c)) 50 return c & ~32; 51 52 return c; 53} 54 55inline int ascii_tolower (int c) 56{ 57 if (ascii_isupper (c)) 58 return c | 32; 59 60 return c; 61} 62 63int 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 88int 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}