~ubuntu-branches/ubuntu/vivid/diffutils/vivid

« back to all changes in this revision

Viewing changes to lib/strcasecmp.c

  • Committer: Bazaar Package Importer
  • Author(s): Santiago Vila
  • Date: 2010-02-13 11:49:00 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100213114900-09lz8jx6wct52qp8
Tags: 1:2.9-1
* New upstream release, now under GPL version 3 or later.
* There is now a --tab-size option. Closes: #82923.
* Manpage for cmp describes exit status. Closes: #200614.
* Manpage for diff describes exit status. Closes: #228441, #473233.
* The file de.po is now more recent. Closes: #313686.
* Fixed bad sdiff behaviour. Closes: #320222.
* Added wdiff to Suggests. Closes: #324627.
* Fixed cmp behaviour regarding stdout and stderr. Closes: #356083.
* The file ru.po is now more recent. Closes: #409274.
* The file es.po is now more recent. Closes: #418005, #481708.
* The file nl.po is now more recent. Closes: #427370.
* Modified watch file to use http instead of ftp.
* Removed .comment section from executables.
* Added Homepage field to control file.

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.
 
1
/* -*- buffer-read-only: t -*- vi: set ro: */
 
2
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 
3
#line 1
 
4
/* Case-insensitive string comparison function.
 
5
   Copyright (C) 1998-1999, 2005-2007, 2009-2010 Free Software Foundation, Inc.
3
6
 
4
7
   This program is free software; you can redistribute it and/or modify
5
8
   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)
 
9
   the Free Software Foundation; either version 3, or (at your option)
7
10
   any later version.
8
11
 
9
12
   This program is distributed in the hope that it will be useful,
13
16
 
14
17
   You should have received a copy of the GNU General Public License
15
18
   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>
 
19
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
20
 
 
21
#include <config.h>
 
22
 
 
23
/* Specification.  */
 
24
#include <string.h>
 
25
 
33
26
#include <ctype.h>
 
27
#include <limits.h>
34
28
 
35
29
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
36
30
 
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.  */
 
31
/* Compare strings S1 and S2, ignoring case, returning less than, equal to or
 
32
   greater than zero if S1 is lexicographically less than, equal to or greater
 
33
   than S2.
 
34
   Note: This function does not work with multibyte strings!  */
41
35
 
42
36
int
43
 
STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N)
 
37
strcasecmp (const char *s1, const char *s2)
44
38
{
45
 
  register const unsigned char *p1 = (const unsigned char *) s1;
46
 
  register const unsigned char *p2 = (const unsigned char *) s2;
 
39
  const unsigned char *p1 = (const unsigned char *) s1;
 
40
  const unsigned char *p2 = (const unsigned char *) s2;
47
41
  unsigned char c1, c2;
48
42
 
49
 
  if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0))
 
43
  if (p1 == p2)
50
44
    return 0;
51
45
 
52
46
  do
54
48
      c1 = TOLOWER (*p1);
55
49
      c2 = TOLOWER (*p2);
56
50
 
57
 
      if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0')
58
 
        break;
 
51
      if (c1 == '\0')
 
52
        break;
59
53
 
60
54
      ++p1;
61
55
      ++p2;
62
56
    }
63
57
  while (c1 == c2);
64
58
 
65
 
  return c1 - c2;
 
59
  if (UCHAR_MAX <= INT_MAX)
 
60
    return c1 - c2;
 
61
  else
 
62
    /* On machines where 'char' and 'int' are types of the same size, the
 
63
       difference of two 'unsigned char' values - including the sign bit -
 
64
       doesn't fit in an 'int'.  */
 
65
    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
66
66
}