From b5f767ea30b4d118658692bd1d19ddcd6e0ac039 Mon Sep 17 00:00:00 2001
From: Agoston Szepessy <agoston.the.dev@gmail.com>
Date: Tue, 23 Jul 2024 18:07:09 +0200
Subject: [PATCH] More PR feedback

Use u8 internally instead of `c_char`.
---
 src/header/unistd/getpass.rs | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/header/unistd/getpass.rs b/src/header/unistd/getpass.rs
index da54c3d3..6776cad8 100644
--- a/src/header/unistd/getpass.rs
+++ b/src/header/unistd/getpass.rs
@@ -13,7 +13,7 @@ use crate::{
 
 use crate::platform::types::*;
 
-fn getpass_rs(prompt: CStr, passbuff: &mut [c_char]) -> Result<*mut c_char, io::Error> {
+fn getpass_rs(prompt: CStr, passbuff: &mut [u8]) -> Result<*mut c_char, io::Error> {
     let mut f = File::open(c_str!("/dev/tty"), O_RDWR | O_CLOEXEC)?;
 
     let mut term = termios::termios::default();
@@ -34,12 +34,12 @@ fn getpass_rs(prompt: CStr, passbuff: &mut [c_char]) -> Result<*mut c_char, io::
     }
 
     f.write(&prompt.to_bytes())?;
+    f.flush()?;
 
-    let buff = unsafe { &mut *(passbuff as *mut [i8] as *mut [u8]) };
-    let mut len = f.read(buff)?;
+    let mut len = f.read(passbuff)?;
 
     if len > 0 {
-        if passbuff[len - 1] == b'\n' as c_char || passbuff.len() == len {
+        if passbuff[len - 1] == b'\n' || passbuff.len() == len {
             len -= 1;
         }
     }
@@ -55,13 +55,14 @@ fn getpass_rs(prompt: CStr, passbuff: &mut [c_char]) -> Result<*mut c_char, io::
     }
 
     f.write(b"\n")?;
+    f.flush()?;
 
-    Ok(passbuff.as_mut_ptr())
+    Ok(passbuff.as_mut_ptr() as *mut c_char)
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn getpass(prompt: *const c_char) -> *mut c_char {
-    static mut PASSBUFF: [c_char; PASS_MAX] = [0; PASS_MAX];
+    static mut PASSBUFF: [u8; PASS_MAX] = [0; PASS_MAX];
 
     unsafe { getpass_rs(CStr::from_ptr(prompt), &mut PASSBUFF).unwrap_or(ptr::null_mut()) }
 }
-- 
GitLab