aboutsummaryrefslogtreecommitdiff
path: root/src/prompt
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2020-10-13 22:59:23 +0300
committerAqua-sama <aqua@iserlohn-fortress.net>2020-10-13 22:59:23 +0300
commit55f75215607962def4cf83d2c27b2899dce24881 (patch)
treefb02591c5a6708b9dd8f2bbf871176995fae33b3 /src/prompt
parentAdd dummy SIGINT handler (diff)
downloadrshell-55f75215607962def4cf83d2c27b2899dce24881.tar.xz
Use crates.io/rustyline as readline
Diffstat (limited to 'src/prompt')
-rw-r--r--src/prompt/user.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/prompt/user.rs b/src/prompt/user.rs
new file mode 100644
index 0000000..9744928
--- /dev/null
+++ b/src/prompt/user.rs
@@ -0,0 +1,48 @@
+use std::io::BufRead;
+
+pub fn hostname() -> std::result::Result<std::string::String, std::io::Error> {
+ let h = std::fs::read_to_string("/proc/sys/kernel/hostname")?;
+ Ok(h.trim().to_string())
+}
+
+#[test]
+fn test_hostname() {
+ let hostname__ = match std::process::Command::new("hostname").output() {
+ Ok(s) => {
+ let output = std::string::String::from_utf8(s.stdout).unwrap();
+ output.trim().to_string()
+ }
+ Err(e) => panic!(e),
+ };
+
+ assert_eq!(hostname__, hostname().unwrap());
+}
+
+pub fn username() -> std::result::Result<std::string::String, std::io::Error> {
+ let uid = unsafe { libc::getuid().to_string() };
+
+ let file = std::fs::File::open("/etc/passwd")?;
+ let reader = std::io::BufReader::new(file);
+
+ for line in reader.lines() {
+ let l = line?;
+ let parts: Vec<&str> = l.split(':').collect();
+ if uid == parts[2] {
+ return Ok(parts[0].to_string());
+ }
+ }
+
+ Ok(uid)
+}
+
+#[test]
+fn test_username() {
+ let username__ = match std::process::Command::new("whoami").output() {
+ Ok(s) => {
+ let output = std::string::String::from_utf8(s.stdout).unwrap();
+ output.trim().to_string()
+ }
+ Err(e) => panic!(e),
+ };
+ assert_eq!(username__, username().unwrap());
+}