diff options
| author | Pedro F. Giffuni <pfg@FreeBSD.org> | 2013-07-27 19:57:20 +0000 |
|---|---|---|
| committer | Pedro F. Giffuni <pfg@FreeBSD.org> | 2013-07-27 19:57:20 +0000 |
| commit | fb6b9b91d11dacb448979bb7770182f1731e9f99 (patch) | |
| tree | 68fe5e9d8970b82717478c7e904a7456bbaad7f5 /strcasecmp.c | |
| parent | fea6cc68e36068e834e86474181b1e8edbae89df (diff) | |
Virgin import of patch-2.5.9, the last official GPLv2 release.vendor/misc-GNU/patch/2.5.9vendor/misc-GNU/patch
As in previous imports we dropped the mkinstall and pc directories
as they are of no use to us.
Differently from previous imports, patch.1 was not renamed and
is maintained with its original name (patch.man). If we ever
merge this into the main tree, care must be taken to rename
it back.
Notes
Notes:
svn path=/vendor/patch/dist/; revision=253717
svn path=/vendor/patch/2.5.9/; revision=253718; tag=vendor/misc-GNU/patch/2.5.9
Diffstat (limited to 'strcasecmp.c')
| -rw-r--r-- | strcasecmp.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/strcasecmp.c b/strcasecmp.c new file mode 100644 index 000000000000..ae7601de0fcf --- /dev/null +++ b/strcasecmp.c @@ -0,0 +1,66 @@ +/* strcasecmp.c -- case insensitive string comparator + Copyright (C) 1998, 1999 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef LENGTH_LIMIT +# define STRXCASECMP_FUNCTION strncasecmp +# define STRXCASECMP_DECLARE_N , size_t n +# define LENGTH_LIMIT_EXPR(Expr) Expr +#else +# define STRXCASECMP_FUNCTION strcasecmp +# define STRXCASECMP_DECLARE_N /* empty */ +# define LENGTH_LIMIT_EXPR(Expr) 0 +#endif + +#include <sys/types.h> +#include <ctype.h> + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare {{no more than N characters of }}strings S1 and S2, + ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less + than, equal to or greater than S2. */ + +int +STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0)) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + return c1 - c2; +} |
