summaryrefslogtreecommitdiff
path: root/userland/libc/string/strncmp.c
blob: fd4618938ff8bfea7dee0c92113d58ca3817bccc (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
#include <string.h>

int strncmp(const char *s1, const char *s2, size_t n) {
  // 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) && n > 0; n--) {
    if (*s1 != *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;
}