From 0a3c8abe957e7ec8236dec162958ce79388ec520 Mon Sep 17 00:00:00 2001
From: jD91mZM2 <me@krake.one>
Date: Fri, 22 Jun 2018 14:49:02 +0200
Subject: [PATCH] Fix setlocale return value

---
 src/locale/src/lib.rs | 8 +++++---
 tests/locale.c        | 2 +-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/locale/src/lib.rs b/src/locale/src/lib.rs
index 17e438e61..f71380b35 100644
--- a/src/locale/src/lib.rs
+++ b/src/locale/src/lib.rs
@@ -9,6 +9,7 @@ use core::ptr;
 use platform::types::*;
 
 const EMPTY_PTR: *const c_char = "\0" as *const _ as *const c_char;
+static mut C_LOCALE: [c_char; 2] = [b'C' as c_char, 0];
 
 #[repr(C)]
 #[no_mangle]
@@ -61,10 +62,11 @@ pub extern "C" fn localeconv() -> *const lconv {
 }
 
 #[no_mangle]
-pub extern "C" fn setlocale(_option: c_int, val: *const c_char) -> *const c_char {
+pub unsafe extern "C" fn setlocale(_option: c_int, val: *const c_char) -> *mut c_char {
     if val.is_null() {
-        return "C\0".as_ptr() as *const c_char;
+        // Can't use string``
+        return C_LOCALE.as_mut_ptr() as *mut c_char;
     }
     // TODO actually implement
-    ptr::null()
+    ptr::null_mut()
 }
diff --git a/tests/locale.c b/tests/locale.c
index eba2ecede..9358bc555 100644
--- a/tests/locale.c
+++ b/tests/locale.c
@@ -4,7 +4,7 @@
 
 int main() {
     // TODO: Implement locale properly and test it here
-    const char* val = setlocale(LC_ALL, NULL);
+    char* val = setlocale(LC_ALL, NULL);
     if (strcmp(val, "C") == 0) {
         puts("success!");
     } else {
-- 
GitLab