123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- //! strings implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/strings.h.html
- use core::ptr;
- use crate::header::{ctype, string};
- use crate::platform::types::*;
- #[no_mangle]
- pub unsafe extern "C" fn bcmp(first: *const c_void, second: *const c_void, n: size_t) -> c_int {
- string::memcmp(first, second, n)
- }
- #[no_mangle]
- pub unsafe extern "C" fn bcopy(src: *const c_void, dst: *mut c_void, n: size_t) {
- ptr::copy(src as *const u8, dst as *mut u8, n);
- }
- #[no_mangle]
- pub unsafe extern "C" fn bzero(dst: *mut c_void, n: size_t) {
- ptr::write_bytes(dst as *mut u8, 0, n);
- }
- #[no_mangle]
- pub extern "C" fn ffs(i: c_int) -> c_int {
- if i == 0 {
- return 0;
- }
- 1 + i.trailing_zeros() as c_int
- }
- #[no_mangle]
- pub unsafe extern "C" fn index(s: *const c_char, c: c_int) -> *mut c_char {
- string::strchr(s, c)
- }
- #[no_mangle]
- pub unsafe extern "C" fn rindex(s: *const c_char, c: c_int) -> *mut c_char {
- string::strrchr(s, c)
- }
- #[no_mangle]
- pub unsafe extern "C" fn strcasecmp(first: *const c_char, second: *const c_char) -> c_int {
- strncasecmp(first, second, size_t::max_value())
- }
- #[no_mangle]
- pub unsafe extern "C" fn strncasecmp(
- mut first: *const c_char,
- mut second: *const c_char,
- mut n: size_t,
- ) -> c_int {
- while n > 0 && (*first != 0 || *second != 0) {
- let cmp = ctype::tolower(*first as c_int) - ctype::tolower(*second as c_int);
- if cmp != 0 {
- return cmp;
- }
- first = first.offset(1);
- second = second.offset(1);
- n -= 1;
- }
- 0
- }
|