diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ad1d6b1742857c8eaaf8b8f0c4e37933346c8baf..e38d132959a5c8bde9b8894da74abdcf2891b9e2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 image: "rust:latest"
 
 before_script:
+    - git submodule update --init --recursive
     - rustup toolchain add nightly
     - rustup target add x86_64-unknown-redox --toolchain nightly
     - rustup show      # Print version info for debugging
@@ -19,7 +20,8 @@ test:linux:
 
 fmt:
     script:
-        - ./fmt.sh -- --write-mode=diff
+        - rustup component add rustfmt-preview
+        - ./fmt.sh -- --check
 
 # TODO: Set up a docker image with a redox vm that would allow to
-#   run things like tests under redox
\ No newline at end of file
+#   run things like tests under redox
diff --git a/src/stdlib/src/lib.rs b/src/stdlib/src/lib.rs
index 0a6016f9f12e197a24b9df142f406475209c08df..f88743581d81d1bc2ccd9b08574ce53076436acc 100644
--- a/src/stdlib/src/lib.rs
+++ b/src/stdlib/src/lib.rs
@@ -375,30 +375,35 @@ pub extern "C" fn mktemp(name: *mut c_char) -> *mut c_char {
         fn strlen(s: *const c_char) -> size_t;
     }
     let len = unsafe { strlen(name) };
-    let mut retries = 100;
-    let name_buf = unsafe { slice::from_raw_parts(name as *const u8, len as usize) }; 
-    let name_str = str::from_utf8(name_buf).unwrap_or("");
-    if len < 6 || !name_str.ends_with("XXXXXX") {
+    if len < 6 {
         unsafe { platform::errno = errno::EINVAL };
         unsafe { *name = 0 };
-        return name; 
-    } 
+        return name;
+    }
+    for i in len-6..len {
+        if unsafe { *name.offset(i as isize) } != b'X' as c_char {
+            unsafe { platform::errno = errno::EINVAL };
+            unsafe { *name = 0 };
+            return name;
+        }
+    }
 
     let mut rng = JitterRng::new_with_timer(get_nstime);
     rng.test_timer();
 
+    let mut retries = 100;
     loop {
         let mut char_iter = iter::repeat(())
         .map(|()| rng.sample(Alphanumeric))
-        .take(6); 
+        .take(6);
         unsafe {
             for (i,c) in char_iter.enumerate() {
-                *name.offset(len as isize-i as isize) = c as c_char
+                *name.offset(len as isize - i as isize - 1) = c as c_char
             }
         }
 
         unsafe {
-            let mut st: stat = mem::uninitialized(); 
+            let mut st: stat = mem::uninitialized();
             if platform::stat(name, &mut st) != 0 {
                 if platform::errno != ENOENT { *name = 0; }
                 return name;