Support for strncasemp.
Showing
4 changed files
with
70 additions
and
2 deletions
... | @@ -23,7 +23,7 @@ | ... | @@ -23,7 +23,7 @@ |
23 | 23 | ||
24 | * mailbox/attachement.c (message_create_attachment): Use base_name(). | 24 | * mailbox/attachement.c (message_create_attachment): Use base_name(). |
25 | * mailbox/mbx_mbox.c (mbox_tmpfile): Use base_name(). | 25 | * mailbox/mbx_mbox.c (mbox_tmpfile): Use base_name(). |
26 | * configure.in: AC_REP_FUNC(vasprintf). | 26 | * configure.in: AC_REP_FUNC(vasprintf strcasecmp strncasecmp). |
27 | * include/mailutils/Makefile.am: Add property.h, parse822.h. | 27 | * include/mailutils/Makefile.am: Add property.h, parse822.h. |
28 | * lib/vasprintf.c: Taken from libit. | 28 | * lib/vasprintf.c: Taken from libit. |
29 | * lib/basename.c: Taken from libit/fileutils. | 29 | * lib/basename.c: Taken from libit/fileutils. | ... | ... |
... | @@ -68,7 +68,7 @@ AC_FUNC_ALLOCA | ... | @@ -68,7 +68,7 @@ AC_FUNC_ALLOCA |
68 | AC_FUNC_MMAP | 68 | AC_FUNC_MMAP |
69 | # FIXME: Provide the GNU one for loosing platforms | 69 | # FIXME: Provide the GNU one for loosing platforms |
70 | AC_FUNC_FNMATCH | 70 | AC_FUNC_FNMATCH |
71 | AC_REPLACE_FUNCS(snprintf strtok_r vasprintf) | 71 | AC_REPLACE_FUNCS(snprintf strtok_r vasprintf strncasecmp strcasecmp) |
72 | AC_CHECK_FUNCS(mkstemp) | 72 | AC_CHECK_FUNCS(mkstemp) |
73 | 73 | ||
74 | dnl Check for libraries | 74 | dnl Check for libraries | ... | ... |
lib/strcasecmp.c
0 → 100644
1 | /* strcasecmp.c -- case insensitive string comparator | ||
2 | Copyright (C) 1998, 1999 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | #if HAVE_CONFIG_H | ||
19 | # include <config.h> | ||
20 | #endif | ||
21 | |||
22 | #ifdef LENGTH_LIMIT | ||
23 | # define STRXCASECMP_FUNCTION strncasecmp | ||
24 | # define STRXCASECMP_DECLARE_N , size_t n | ||
25 | # define LENGTH_LIMIT_EXPR(Expr) Expr | ||
26 | #else | ||
27 | # define STRXCASECMP_FUNCTION strcasecmp | ||
28 | # define STRXCASECMP_DECLARE_N /* empty */ | ||
29 | # define LENGTH_LIMIT_EXPR(Expr) 0 | ||
30 | #endif | ||
31 | |||
32 | #include <sys/types.h> | ||
33 | #include <ctype.h> | ||
34 | |||
35 | #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) | ||
36 | |||
37 | /* Compare {{no more than N characters of }}strings S1 and S2, | ||
38 | ignoring case, returning less than, equal to or | ||
39 | greater than zero if S1 is lexicographically less | ||
40 | than, equal to or greater than S2. */ | ||
41 | |||
42 | int | ||
43 | STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N) | ||
44 | { | ||
45 | register const unsigned char *p1 = (const unsigned char *) s1; | ||
46 | register const unsigned char *p2 = (const unsigned char *) s2; | ||
47 | unsigned char c1, c2; | ||
48 | |||
49 | if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0)) | ||
50 | return 0; | ||
51 | |||
52 | do | ||
53 | { | ||
54 | c1 = TOLOWER (*p1); | ||
55 | c2 = TOLOWER (*p2); | ||
56 | |||
57 | if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0') | ||
58 | break; | ||
59 | |||
60 | ++p1; | ||
61 | ++p2; | ||
62 | } | ||
63 | while (c1 == c2); | ||
64 | |||
65 | return c1 - c2; | ||
66 | } |
lib/strncasecmp.c
0 → 100644
-
Please register or sign in to post a comment