Skip to content
Snippets Groups Projects
Verified Commit 9f3aa6d4 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Define wctype_t and wctype

parent 606bfc9c
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@
#define _BITS_WCTYPE_H
#include <stdint.h>
#define __need_wctype_t
#define __need_wint_t
#endif /* _BITS_WCTYPE_H */
......@@ -12,7 +12,8 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
#ifndef __cplusplus
typedef int32_t wchar_t;
#endif /* #ifndef __cplusplus */
typedef int32_t wint_t;
typedef uint32_t wctype_t;
typedef uint32_t wint_t;
typedef long unsigned int size_t;
......
sys_includes = ["stddef.h", "stdint.h", "time.h", "stdio.h" ]
sys_includes = ["wchar.h" ]
include_guard = "_RELIBC_WCTYPE_H"
header = "#include <bits/wctype.h>"
language = "C"
......
//! wchar implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/wchar.h.html
//! wchar implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/wctype.h.html
use crate::platform::types::*;
use crate::{
c_str::CStr,
platform::types::*,
};
mod casecmp;
use casecmp::casemap;
pub const WEOF: wint_t = 0xFFFF_FFFFu32;
pub const WCTYPE_ALNUM: wctype_t = 1;
pub const WCTYPE_ALPHA: wctype_t = 2;
pub const WCTYPE_BLANK: wctype_t = 3;
pub const WCTYPE_CNTRL: wctype_t = 4;
pub const WCTYPE_DIGIT: wctype_t = 5;
pub const WCTYPE_GRAPH: wctype_t = 6;
pub const WCTYPE_LOWER: wctype_t = 7;
pub const WCTYPE_PRINT: wctype_t = 8;
pub const WCTYPE_PUNCT: wctype_t = 9;
pub const WCTYPE_SPACE: wctype_t = 10;
pub const WCTYPE_UPPER: wctype_t = 11;
pub const WCTYPE_XDIGIT: wctype_t = 12;
#[no_mangle]
pub unsafe extern "C" fn wctype(name: *const c_char) -> wctype_t {
let name_cstr = CStr::from_ptr(name);
match name_cstr.to_bytes() {
b"alnum" => WCTYPE_ALNUM,
b"alpha" => WCTYPE_ALPHA,
b"blank" => WCTYPE_BLANK,
b"cntrl" => WCTYPE_CNTRL,
b"digit" => WCTYPE_DIGIT,
b"graph" => WCTYPE_GRAPH,
b"lower" => WCTYPE_LOWER,
b"print" => WCTYPE_PRINT,
b"punct" => WCTYPE_PUNCT,
b"space" => WCTYPE_SPACE,
b"upper" => WCTYPE_UPPER,
b"xdigit" => WCTYPE_XDIGIT,
_ => 0
}
}
#[no_mangle]
pub extern "C" fn towlower(wc: wint_t) -> wint_t {
casemap(wc, 0)
......
......@@ -45,8 +45,8 @@ pub type c_long = i64;
pub type c_ulong = u64;
pub type wchar_t = i32;
pub type wctype_t = u32;
pub type wint_t = u32;
pub type wctype_t = i64;
pub type regoff_t = size_t;
pub type off_t = c_long;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment