~ubuntu-branches/ubuntu/lucid/patch/lucid

« back to all changes in this revision

Viewing changes to strcasecmp.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Fedrowitz
  • Date: 2003-05-20 21:13:37 UTC
  • mto: (2.1.1 warty) (5.1.1 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20030520211337-y8hw3rhs6dq3j9xu
Tags: upstream-2.5.9
ImportĀ upstreamĀ versionĀ 2.5.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}