From 0b4b3cd55ce83be04c8836cf63413fd4dcd2c31a Mon Sep 17 00:00:00 2001
From: Peter Limkilde Svendsen <peter.limkilde@gmail.com>
Date: Mon, 20 Jan 2020 17:57:56 +0000
Subject: [PATCH] Use lossless type conversion in ctype.h

---
 src/header/ctype/mod.rs | 46 ++++++++++++++++++++++-------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/src/header/ctype/mod.rs b/src/header/ctype/mod.rs
index eff8ba3ed..c9a58dfd5 100644
--- a/src/header/ctype/mod.rs
+++ b/src/header/ctype/mod.rs
@@ -4,75 +4,79 @@ use crate::platform::types::*;
 
 #[no_mangle]
 pub extern "C" fn isalnum(c: c_int) -> c_int {
-    (isdigit(c) != 0 || isalpha(c) != 0) as c_int
+    c_int::from(isdigit(c) != 0 || isalpha(c) != 0)
 }
 
 #[no_mangle]
 pub extern "C" fn isalpha(c: c_int) -> c_int {
-    (islower(c) != 0 || isupper(c) != 0) as c_int
+    c_int::from(islower(c) != 0 || isupper(c) != 0)
 }
 
 #[no_mangle]
 pub extern "C" fn isascii(c: c_int) -> c_int {
-    ((c & !0x7f) == 0) as c_int
+    c_int::from((c & !0x7f) == 0)
 }
 
 #[no_mangle]
 pub extern "C" fn isblank(c: c_int) -> c_int {
-    (c == ' ' as c_int || c == '\t' as c_int) as c_int
+    c_int::from(c == c_int::from(b' ') || c == c_int::from(b'\t'))
 }
 
 #[no_mangle]
 pub extern "C" fn iscntrl(c: c_int) -> c_int {
-    ((c >= 0x00 && c <= 0x1f) || c == 0x7f) as c_int
+    c_int::from((c >= 0x00 && c <= 0x1f) || c == 0x7f)
 }
 
 #[no_mangle]
 pub extern "C" fn isdigit(c: c_int) -> c_int {
-    (c >= b'0' as c_int && c <= b'9' as c_int) as c_int
+    c_int::from(c >= c_int::from(b'0') && c <= c_int::from(b'9'))
 }
 
 #[no_mangle]
 pub extern "C" fn isgraph(c: c_int) -> c_int {
-    (c >= 0x21 && c <= 0x7e) as c_int
+    c_int::from(c >= 0x21 && c <= 0x7e)
 }
 
 #[no_mangle]
 pub extern "C" fn islower(c: c_int) -> c_int {
-    (c >= b'a' as c_int && c <= b'z' as c_int) as c_int
+    c_int::from(c >= c_int::from(b'a') && c <= c_int::from(b'z'))
 }
 
 #[no_mangle]
 pub extern "C" fn isprint(c: c_int) -> c_int {
-    (c >= 0x20 && c < 0x7f) as c_int
+    c_int::from(c >= 0x20 && c < 0x7f)
 }
 
 #[no_mangle]
 pub extern "C" fn ispunct(c: c_int) -> c_int {
-    ((c >= b'!' as c_int && c <= b'/' as c_int)
-        || (c >= b':' as c_int && c <= b'@' as c_int)
-        || (c >= b'[' as c_int && c <= b'`' as c_int)
-        || (c >= b'{' as c_int && c <= b'~' as c_int)) as c_int
+    c_int::from(
+        (c >= c_int::from(b'!') && c <= c_int::from(b'/'))
+            || (c >= c_int::from(b':') && c <= c_int::from(b'@'))
+            || (c >= c_int::from(b'[') && c <= c_int::from(b'`'))
+            || (c >= c_int::from(b'{') && c <= c_int::from(b'~')),
+    )
 }
 
 #[no_mangle]
 pub extern "C" fn isspace(c: c_int) -> c_int {
-    (c == ' ' as c_int
-        || c == '\t' as c_int
-        || c == '\n' as c_int
-        || c == '\r' as c_int
-        || c == 0x0b
-        || c == 0x0c) as c_int
+    c_int::from(
+        c == c_int::from(b' ')
+            || c == c_int::from(b'\t')
+            || c == c_int::from(b'\n')
+            || c == c_int::from(b'\r')
+            || c == 0x0b
+            || c == 0x0c,
+    )
 }
 
 #[no_mangle]
 pub extern "C" fn isupper(c: c_int) -> c_int {
-    (c >= b'A' as c_int && c <= b'Z' as c_int) as c_int
+    c_int::from(c >= c_int::from(b'A') && c <= c_int::from(b'Z'))
 }
 
 #[no_mangle]
 pub extern "C" fn isxdigit(c: c_int) -> c_int {
-    (isdigit(c) != 0 || (c | 32 >= b'a' as c_int && c | 32 <= 'f' as c_int)) as c_int
+    c_int::from(isdigit(c) != 0 || (c | 32 >= c_int::from(b'a') && c | 32 <= c_int::from(b'f')))
 }
 
 #[no_mangle]
-- 
GitLab