summaryrefslogtreecommitdiff
path: root/userland/libc/string/strcasecmp.c
blob: 6420dbf2f1032366558a77997030dc0c9dcd23aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <ctype.h>
#include <strings.h>

int strcasecmp(const char *s1, const char *s2) {
  // The strcmp() function shall compare the string pointed to by s1
  // to the string pointed to by s2.
  int l1, l2, rc;
  l1 = l2 = rc = 0;
  for (; (*s1 || *s2);) {
    if (tolower(*s1) != tolower(*s2))
      rc++;
    if (*s1) {
      l1++;
      s1++;
    }
    if (*s2) {
      l2++;
      s2++;
    }
  }

  // Upon completion, strcmp() shall return an integer greater than,
  // equal to, or less than 0, if the string pointed to by s1 is
  // greater than, equal to, or less than the string pointed to by
  // s2, respectively.
  if (l2 > l1)
    return -rc;
  return rc;
}