Skip to content

Commit

Permalink
Fix strcasecmp return value
Browse files Browse the repository at this point in the history
  • Loading branch information
jD91mZM2 committed Oct 17, 2018
1 parent 3c2121d commit bfa068d
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
5 changes: 3 additions & 2 deletions src/header/strings/mod.rs
Expand Up @@ -77,8 +77,9 @@ pub unsafe extern "C" fn strncasecmp(
mut n: size_t,
) -> c_int {
while n > 0 && (*first != 0 || *second != 0) {
if *first & !32 != *second & !32 {
return -1;
let cmp = (*first & !32) as c_int - (*second & !32) as c_int;
if cmp != 0 {
return cmp;
}

first = first.offset(1);
Expand Down
14 changes: 9 additions & 5 deletions tests/strings.c
Expand Up @@ -12,11 +12,15 @@ int main() {

assert(!strcasecmp("hi", new));
assert(strcasecmp("he", new));
assert(!strcasecmp("hello", "HEllO"));
assert(strcasecmp("hello", "HEllOo"));
assert(!strncasecmp("hello", "Hello World", 5));
assert(!strncasecmp("FLOOR0_1", "FLOOR0_1FLOOR4_1", 8));
assert(strncasecmp("FL00RO_1", "FLOOR0_1FLOOR4_1", 8));

assert(strcasecmp("hello", "HEllO") == 0);
assert(strcasecmp("hello", "HEllOo") < 0);
assert(strcasecmp("5", "5") == 0);
assert(strcasecmp("5", "4") > 0);
assert(strcasecmp("5", "6") < 0);
assert(strncasecmp("hello", "Hello World", 5) == 0);
assert(strncasecmp("FLOOR0_1", "FLOOR0_1FLOOR4_1", 8) == 0);
assert(strncasecmp("FL00RO_1", "FLOOR0_1FLOOR4_1", 8) < 0);

bzero(new, 1);
assert(*new == 0);
Expand Down

0 comments on commit bfa068d

Please sign in to comment.