Fix bug in strncasecmp
This commit is contained in:
+1
-1
@@ -40,7 +40,7 @@ redox_syscall = { git = "https://gitlab.redox-os.org/redox-os/syscall.git", bran
|
||||
spin = "0.4"
|
||||
|
||||
[features]
|
||||
default = ["trace"]
|
||||
#default = ["trace"]
|
||||
trace = []
|
||||
|
||||
[profile.dev]
|
||||
|
||||
@@ -76,14 +76,14 @@ pub unsafe extern "C" fn strncasecmp(
|
||||
mut second: *const c_char,
|
||||
mut n: size_t,
|
||||
) -> c_int {
|
||||
while *first & !32 == *second & !32 {
|
||||
if n == 0 || *first == 0 && *second == 0 {
|
||||
return 0;
|
||||
while n > 0 && (*first != 0 || *second != 0) {
|
||||
if *first & !32 != *second & !32 {
|
||||
return -1;
|
||||
}
|
||||
|
||||
first = first.offset(1);
|
||||
second = second.offset(1);
|
||||
n -= 1;
|
||||
}
|
||||
-1
|
||||
0
|
||||
}
|
||||
|
||||
@@ -11,8 +11,12 @@ int main() {
|
||||
bcopy("hi", new, 3); // include nul byte
|
||||
|
||||
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));
|
||||
|
||||
bzero(new, 1);
|
||||
assert(*new == 0);
|
||||
|
||||
Reference in New Issue
Block a user