Skip to content

Commit dc580ac

Browse files
committed
Switch from from rustix to xenia
1 parent 2ae023a commit dc580ac

File tree

10 files changed

+82
-178
lines changed

10 files changed

+82
-178
lines changed

Cargo.lock

Lines changed: 16 additions & 114 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@ inherits = "release"
1616
strip = false
1717

1818
[dependencies]
19-
acumen = "0.0.3"
2019
bitflags = "2.9.1"
2120
itoa = "1.0.15"
22-
rustix = { version = "1.0.8", features = [
23-
"process",
24-
"system",
25-
"termios",
26-
"fs",
27-
"stdio",
28-
] }
2921
sap = "0.0.5"
22+
xenia = "0.0.4"
23+
xenia-utils = "0.0.1"
24+
25+
[patch.crates-io]
26+
# xenia = { path = "../../xenia" }
27+
# xenia-utils = { path = "../../xenia/utils" }

src/bin/false.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::{io::stdout, process::exit};
22

33
use puppyutils::{Result, cli_with_args};
4-
use rustix::process::EXIT_FAILURE;
54
use sap::Parser;
65

76
pub fn main() -> Result {
@@ -14,5 +13,5 @@ pub fn main() -> Result {
1413
cli_with_args!(args_parser, "false", stdout, #ignore);
1514
}
1615

17-
exit(EXIT_FAILURE);
16+
exit(1);
1817
}

src/bin/ls/main.rs

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
#![allow(unused)]
2+
13
mod options;
24
mod settings;
35

46
use puppyutils::Result;
5-
use rustix::{
6-
fs::{Dir, Mode, OFlags, open},
7-
termios::tcgetwinsize,
8-
};
7+
use xenia::stdio::stderr;
8+
use xenia_utils::termios::{Winsize, tcgetwinsize};
9+
// use rustix::{
10+
// fs::{Dir, Mode, OFlags, open},
11+
// termios::tcgetwinsize,
12+
// };
913
use std::io::{self, BufWriter, stdout};
1014

1115
const CURRENT_DIR_PATH: &str = ".";
@@ -15,21 +19,25 @@ pub fn main() -> Result {
1519
let winsize = get_win_size();
1620
let _cfg = settings::parse_arguments(winsize.ws_col, &mut stdout)?;
1721

18-
let fd = open(
19-
CURRENT_DIR_PATH,
20-
OFlags::DIRECTORY | OFlags::RDONLY,
21-
Mode::RUSR,
22-
)?;
22+
// FIXME: re-implement using xenia
23+
24+
// let fd = open(
25+
// CURRENT_DIR_PATH,
26+
// OFlags::DIRECTORY | OFlags::RDONLY,
27+
// Mode::RUSR,
28+
// )?;
29+
30+
// let dir = Dir::new(fd)?;
2331

24-
let dir = Dir::new(fd)?;
32+
// // bad bad bad
33+
// // FIXME: do not allocate
34+
// let names = dir
35+
// .filter_map(Result::ok)
36+
// .map(|entry| entry.file_name().to_string_lossy().into_owned())
37+
// .filter(|entry| !entry.starts_with('.'))
38+
// .collect::<Vec<_>>();
2539

26-
// bad bad bad
27-
// FIXME: do not allocate
28-
let names = dir
29-
.filter_map(Result::ok)
30-
.map(|entry| entry.file_name().to_string_lossy().into_owned())
31-
.filter(|entry| !entry.starts_with('.'))
32-
.collect::<Vec<_>>();
40+
let names = Vec::new();
3341

3442
let mut stdout = BufWriter::new(stdout);
3543

@@ -38,8 +46,8 @@ pub fn main() -> Result {
3846
Ok(())
3947
}
4048

41-
fn get_win_size() -> rustix::termios::Winsize {
42-
let stderr_fd = rustix::stdio::stderr();
49+
fn get_win_size() -> Winsize {
50+
let stderr_fd = stderr();
4351
tcgetwinsize(stderr_fd).expect("couldn't get terminal size")
4452
}
4553

@@ -49,7 +57,7 @@ fn print_all<O: io::Write>(cols: Vec<String>, stdout: &mut O) -> Result {
4957
const MIN_COLUMN_WIDTH: u16 = 3;
5058

5159
let len = cols.len();
52-
let stderr_fd = rustix::stdio::stderr();
60+
let stderr_fd = stderr();
5361
let winsize = tcgetwinsize(stderr_fd).expect("couldn't get terminal size");
5462

5563
let max_idx = ((winsize.ws_col / 3) / MIN_COLUMN_WIDTH - 1) as usize;

src/bin/mkdir.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::io::stdout;
22

33
use puppyutils::{Result, cli, get_umask};
4-
use rustix::fs::{Mode, mkdir};
4+
use xenia::{Mode, mkdir};
55

66
pub fn main() -> Result {
77
let mut stdout = stdout();
@@ -15,7 +15,7 @@ pub fn main() -> Result {
1515
}
1616
};
1717

18-
let mode = Mode::from_raw_mode(0o777) & !get_umask();
18+
let mode = Mode::from_bits_retain(0o777) & !get_umask();
1919

2020
for dir in dirs {
2121
mkdir(dir, mode)?;

src/bin/pwd.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{
55
};
66

77
use puppyutils::{Result, cli};
8-
use rustix::{fs::stat, process::getcwd};
8+
use xenia::{getcwd, stat};
99

1010
pub fn main() -> Result {
1111
let mut stdout = stdout();

src/bin/tty.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ use std::{
44
};
55

66
use puppyutils::{Result, cli};
7-
use rustix::{
8-
process::{EXIT_FAILURE, EXIT_SUCCESS},
9-
termios::{isatty, ttyname},
10-
};
7+
use xenia_utils::termios::{isatty, ttyname};
118

129
pub fn main() -> Result {
1310
let mut stdout = stdout();
@@ -23,11 +20,7 @@ pub fn main() -> Result {
2320
let is_tty = isatty(&stdin);
2421

2522
if quiet {
26-
if is_tty {
27-
exit(EXIT_SUCCESS)
28-
} else {
29-
exit(EXIT_FAILURE)
30-
}
23+
if is_tty { exit(0) } else { exit(1) }
3124
}
3225

3326
if is_tty {

src/bin/uname.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::io::{Write, stdout};
22

33
use puppyutils::{Result, cli};
4-
use rustix::system::uname;
4+
use xenia::uname;
55

66
bitflags::bitflags! {
77
#[rustfmt::skip]

src/bin/whoami.rs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::io::{Write, stderr, stdout};
22

3-
use acumen::getpwuid;
43
use puppyutils::{Result, cli};
5-
use rustix::process::geteuid;
4+
use xenia::geteuid;
5+
use xenia_utils::passwd::Passwd;
66

77
const CANNOT_FIND_UID: &[u8] = b"cannot find name for user ID: ";
88

@@ -13,20 +13,26 @@ pub fn main() -> Result {
1313

1414
let uid = geteuid();
1515

16-
if let Some(passwd) = getpwuid(geteuid()) {
17-
stdout.write_all(passwd.name.as_bytes())?;
18-
stdout.write_all(b"\n")?;
16+
let mut parser = Passwd::entries()?;
1917

20-
stdout.flush()?;
21-
} else {
22-
let mut stderr = stderr();
18+
while let Ok(Some(entry)) = parser.next_entry() {
19+
if entry.uid == uid {
20+
stdout.write_all(entry.name.as_bytes())?;
21+
stdout.write_all(b"\n")?;
2322

24-
stderr.write_all(CANNOT_FIND_UID)?;
25-
stderr.write_all(itoa::Buffer::new().format(uid.as_raw()).as_bytes())?;
26-
stderr.write_all(b"\n")?;
23+
stdout.flush()?;
2724

28-
stderr.flush()?;
25+
return Ok(());
26+
}
2927
}
3028

29+
let mut stderr = stderr();
30+
31+
stderr.write_all(CANNOT_FIND_UID)?;
32+
stderr.write_all(itoa::Buffer::new().format(uid.as_raw()).as_bytes())?;
33+
stderr.write_all(b"\n")?;
34+
35+
stderr.flush()?;
36+
3137
Ok(())
3238
}

0 commit comments

Comments
 (0)