define __KERNEL_STRICT_NAMES to avoid inclusion of kernel types on systems that carry...
[cake.git] / compiler / clib / strncasecmp.c
blob57da9a82b97d197f5614c12c37a5308092f73fb2
1 /*
2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3 $Id$
5 ANSI C function strncasecmp().
6 */
8 #include <ctype.h>
9 /*****************************************************************************
11 NAME */
12 #include <string.h>
14 int strncasecmp (
16 /* SYNOPSIS */
17 const char * str1,
18 const char * str2,
19 size_t n)
21 /* FUNCTION
22 Calculate str1 - str2 ignoring case. Upto n characters are taken
23 into account.
25 INPUTS
26 str1, str2 - Strings to compare
28 RESULT
29 The difference of the strings. The difference is 0, if both are
30 equal, < 0 if str1 < str2 and > 0 if str1 > str2. Note that
31 it may be greater then 1 or less than -1.
33 NOTES
34 This function is not part of a library and may thus be called
35 any time.
37 EXAMPLE
39 BUGS
41 SEE ALSO
43 INTERNALS
45 ******************************************************************************/
47 /*
48 If n == 0, then this will never be initialized, but is used
49 later on, so we have to initialize it.
51 int diff = 0;
53 /* No need to check *str2 since: a) str1 is equal str2 (both are 0),
54 then *str1 will terminate the loop b) str1 and str2 are not equal
55 (eg. *str2 is 0), then the diff part will be FALSE. I calculate
56 the diff first since a) it's more probable that the first chars
57 will be different and b) I don't need to initialize diff then. */
58 while (n && !(diff = tolower (*str1) - tolower (*str2)) && *str1)
60 /* advance both strings. I do that here, since doing it in the
61 check above would mean to advance the strings once too often */
62 str1 ++;
63 str2 ++;
65 n--;
68 /* Now return the difference. */
69 return diff;
70 } /* strncasecmp */