From 872f1e4e40587c940be91bb3995c6616f8f26b0d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kornel=20Lesi=C5=84ski?= <kornel@cloudflare.com>
Date: Tue, 2 Apr 2019 16:52:38 +0200
Subject: [PATCH] Support c_char sign differences

---
 Cargo.toml            |  2 +-
 src/locale.rs         | 35 ++++++++++++++++++-----------------
 src/mlu.rs            |  2 +-
 src/namedcolorlist.rs | 11 ++++++-----
 4 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 109d3b9..e2fcd31 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,7 +10,7 @@ homepage = "https://crates.rs/crates/lcms2"
 documentation = "https://kornelski.github.io/rust-lcms2/lcms2/"
 repository = "https://github.com/kornelski/rust-lcms2.git"
 categories = ["multimedia::images", "api-bindings"]
-version = "5.1.2"
+version = "5.1.3"
 edition = "2018"
 
 [dependencies]
diff --git a/src/locale.rs b/src/locale.rs
index 9ffc359..edc25e5 100644
--- a/src/locale.rs
+++ b/src/locale.rs
@@ -1,3 +1,4 @@
+use std::os::raw::c_char;
 use std::cmp;
 use std::fmt;
 use std::fmt::Write;
@@ -5,8 +6,8 @@ use std::fmt::Write;
 /// Language code from ISO-639/2 and region code from ISO-3166.
 #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd)]
 pub struct Locale {
-    language: [i8; 3],
-    country: [i8; 3],
+    language: [c_char; 3],
+    country: [c_char; 3],
 }
 
 impl Locale {
@@ -19,10 +20,10 @@ impl Locale {
             country: [0; 3],
         };
         for (c, s) in locale.language.iter_mut().zip(language_str.bytes().take(2)) {
-            *c = s as i8;
+            *c = s as c_char;
         }
         for (c, s) in locale.country.iter_mut().zip(country_str.bytes().take(2)) {
-            *c = s as i8;
+            *c = s as c_char;
         }
         locale
     }
@@ -35,20 +36,20 @@ impl Locale {
         }
     }
 
-    pub(crate) fn language_ptr(&self) -> *const i8 {
+    pub(crate) fn language_ptr(&self) -> *const c_char {
         &self.language as _
     }
 
-    pub(crate) fn country_ptr(&self) -> *const i8 {
+    pub(crate) fn country_ptr(&self) -> *const c_char {
         &self.country as _
     }
 
-    pub(crate) fn language_ptr_mut(&mut self) -> *mut i8 {
-        &self.language as *const i8 as _
+    pub(crate) fn language_ptr_mut(&mut self) -> *mut c_char {
+        &self.language as *const c_char as _
     }
 
-    pub(crate) fn country_ptr_mut(&mut self) -> *mut i8 {
-        &self.country as *const i8 as _
+    pub(crate) fn country_ptr_mut(&mut self) -> *mut c_char {
+        &self.country as *const c_char as _
     }
 }
 
@@ -94,20 +95,20 @@ fn locale() {
     assert_eq!([0i8; 3], l.country);
 
     let l = Locale::new("Ab");
-    assert_eq!(['A' as i8, 'b' as i8, 0], l.language);
+    assert_eq!(['A' as c_char, 'b' as c_char, 0], l.language);
     assert_eq!([0i8; 3], l.country);
 
     let l = Locale::new("Ab-X");
-    assert_eq!(['A' as i8, 'b' as i8, 0], l.language);
-    assert_eq!(['X' as i8, 0, 0], l.country);
+    assert_eq!(['A' as c_char, 'b' as c_char, 0], l.language);
+    assert_eq!(['X' as c_char, 0, 0], l.country);
 
     let l = Locale::new("overlong");
-    assert_eq!(['o' as i8, 'v' as i8, 0], l.language);
-    assert_eq!(['r' as i8, 'l' as i8, 0], l.country);
+    assert_eq!(['o' as c_char, 'v' as c_char, 0], l.language);
+    assert_eq!(['r' as c_char, 'l' as c_char, 0], l.country);
     unsafe {
-        assert_eq!('o' as i8, *l.language_ptr());
+        assert_eq!('o' as c_char, *l.language_ptr());
     }
     unsafe {
-        assert_eq!('r' as i8, *l.country_ptr());
+        assert_eq!('r' as c_char, *l.country_ptr());
     }
 }
diff --git a/src/mlu.rs b/src/mlu.rs
index 199f2b5..f3646c7 100644
--- a/src/mlu.rs
+++ b/src/mlu.rs
@@ -71,7 +71,7 @@ impl MLURef {
             ffi::cmsMLUgetASCII(self.as_ptr(),
                 locale.language_ptr(),
                 locale.country_ptr(),
-                buf[..].as_ptr() as *mut i8, len);
+                buf[..].as_ptr() as *mut _, len);
             if let Some(0) = buf.pop() { // terminating zero
                 for c in &mut buf {
                     if *c > 127 {*c = b'?'}
diff --git a/src/namedcolorlist.rs b/src/namedcolorlist.rs
index 12b8e9e..34b4f8e 100644
--- a/src/namedcolorlist.rs
+++ b/src/namedcolorlist.rs
@@ -1,6 +1,7 @@
 use super::*;
 use std::fmt;
 use std::ptr;
+use std::os::raw::c_char;
 use foreign_types::ForeignTypeRef;
 use std::ffi::{CStr, CString};
 
@@ -30,8 +31,8 @@ impl NamedColorList {
             Error::if_null(ffi::cmsAllocNamedColorList(ptr::null_mut(),
                 spot_colors as u32,
                 colorant_count as u32,
-                prefix.as_ptr(),
-                suffix.as_ptr()))
+                prefix.as_ptr() as _,
+                suffix.as_ptr() as _)) // char sign difference
         }
     }
 }
@@ -50,9 +51,9 @@ impl NamedColorListRef {
 
     /// Get color info
     fn get(&self, index: usize) -> Option<NamedColorInfo> {
-        let mut name = [0i8; 256];
-        let mut prefix = [0i8; 33];
-        let mut suffix = [0i8; 33];
+        let mut name = [0 as c_char; 256];
+        let mut prefix = [0 as c_char; 33];
+        let mut suffix = [0 as c_char; 33];
         let mut pcs = [0u16; 3];
         let mut colorant = [0u16; 16];
 
-- 
GitLab