Browse Source

Fix setlocale return value

jD91mZM2 6 years ago
parent
commit
0a3c8abe95
2 changed files with 6 additions and 4 deletions
  1. 5 3
      src/locale/src/lib.rs
  2. 1 1
      tests/locale.c

+ 5 - 3
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()
 }

+ 1 - 1
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 {