* [pbs-devel] [PATCH proxmox v2 1/2] sys: Use safe wrapper for libc::isatty
@ 2024-02-16 14:59 Maximiliano Sandoval
2024-02-16 14:59 ` [pbs-devel] [PATCH proxmox v2 2/2] router: " Maximiliano Sandoval
2024-02-16 15:57 ` [pbs-devel] applied: [PATCH proxmox v2 1/2] sys: " Dietmar Maurer
0 siblings, 2 replies; 3+ messages in thread
From: Maximiliano Sandoval @ 2024-02-16 14:59 UTC (permalink / raw)
To: pbs-devel
From: Maximiliano Sandoval R <m.sandoval@proxmox.com>
Use the `std::io::IsTerminal` trait introduced in Rust 1.70.
Internally it calls `libc::isatty`, see [1, 2]. Note that it switches
the comparison from `== 1` to `!= 0` which shouldn't make a difference
assuming that libc::isatty upholds the promises made in its man page.
The MSRV was set on the workspace to reflect this change.
[1] https://doc.rust-lang.org/src/std/io/stdio.rs.html#1079
[2] https://doc.rust-lang.org/src/std/sys/unix/io.rs.html#79
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
Differences from v1:
- Mark old fns as depreacted
Cargo.toml | 1 +
proxmox-sys/src/linux/tty.rs | 22 +++++++++-------------
2 files changed, 10 insertions(+), 13 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index de79f7ca..58d5a67e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -44,6 +44,7 @@ license = "AGPL-3"
repository = "https://git.proxmox.com/?p=proxmox.git"
homepage = "https://proxmox.com"
exclude = [ "debian" ]
+rust-version = "1.70"
[workspace.dependencies]
# any features enabled here are enabled on all members using 'workspace = true'!
diff --git a/proxmox-sys/src/linux/tty.rs b/proxmox-sys/src/linux/tty.rs
index fdea1629..9a1e4679 100644
--- a/proxmox-sys/src/linux/tty.rs
+++ b/proxmox-sys/src/linux/tty.rs
@@ -1,4 +1,4 @@
-use std::io::{self, Read, Write};
+use std::io::{self, IsTerminal, Read, Write};
use std::mem::MaybeUninit;
use std::os::unix::io::{AsRawFd, OwnedFd};
@@ -25,20 +25,16 @@ pub fn stdout_terminal_size() -> (usize, usize) {
(winsize.ws_row as usize, winsize.ws_col as usize)
}
-/// Returns whether the current stdout is a tty .
-/// # Safety
-///
-/// uses unsafe call to libc::isatty
+/// Returns whether the current stdout is a tty.
+#[deprecated(note = "Use std::io::stdout().is_terminal()")]
pub fn stdout_isatty() -> bool {
- unsafe { libc::isatty(std::io::stdin().as_raw_fd()) == 1 }
+ std::io::stdout().is_terminal()
}
-/// Returns whether the current stdin is a tty .
-/// # Safety
-///
-/// uses unsafe call to libc::isatty
+/// Returns whether the current stdin is a tty.
+#[deprecated(note = "Use std::io::stdin().is_terminal()")]
pub fn stdin_isatty() -> bool {
- unsafe { libc::isatty(std::io::stdin().as_raw_fd()) == 1 }
+ std::io::stdin().is_terminal()
}
pub enum TtyOutput {
@@ -75,7 +71,7 @@ impl TtyOutput {
/// Get an output file descriptor for the current terminal.
pub fn open() -> io::Result<Option<Self>> {
let stdout = std::io::stdout();
- if unsafe { libc::isatty(stdout.as_raw_fd()) } == 1 {
+ if stdout.is_terminal() {
Ok(Some(TtyOutput::Stdout(stdout)))
} else {
match crate::fd::open(
@@ -97,7 +93,7 @@ impl TtyOutput {
/// first.
pub fn read_password(query: &str) -> Result<Vec<u8>, Error> {
let input = std::io::stdin();
- if unsafe { libc::isatty(input.as_raw_fd()) } != 1 {
+ if !input.is_terminal() {
let mut out = String::new();
input.read_line(&mut out)?;
return Ok(out.into_bytes());
--
2.39.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [pbs-devel] [PATCH proxmox v2 2/2] router: Use safe wrapper for libc::isatty
2024-02-16 14:59 [pbs-devel] [PATCH proxmox v2 1/2] sys: Use safe wrapper for libc::isatty Maximiliano Sandoval
@ 2024-02-16 14:59 ` Maximiliano Sandoval
2024-02-16 15:57 ` [pbs-devel] applied: [PATCH proxmox v2 1/2] sys: " Dietmar Maurer
1 sibling, 0 replies; 3+ messages in thread
From: Maximiliano Sandoval @ 2024-02-16 14:59 UTC (permalink / raw)
To: pbs-devel
From: Maximiliano Sandoval R <m.sandoval@proxmox.com>
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
proxmox-router/src/cli/text_table.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/proxmox-router/src/cli/text_table.rs b/proxmox-router/src/cli/text_table.rs
index ea50b04b..21e466cd 100644
--- a/proxmox-router/src/cli/text_table.rs
+++ b/proxmox-router/src/cli/text_table.rs
@@ -1,4 +1,4 @@
-use std::io::Write;
+use std::io::{IsTerminal, Write};
use anyhow::{bail, format_err, Error};
use serde_json::Value;
@@ -245,7 +245,7 @@ impl TableFormatOptions {
pub fn new() -> Self {
let mut me = Self::default();
- let is_tty = unsafe { libc::isatty(libc::STDOUT_FILENO) == 1 };
+ let is_tty = std::io::stdout().is_terminal();
if is_tty {
let (_rows, columns) = stdout_terminal_size();
--
2.39.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [pbs-devel] applied: [PATCH proxmox v2 1/2] sys: Use safe wrapper for libc::isatty
2024-02-16 14:59 [pbs-devel] [PATCH proxmox v2 1/2] sys: Use safe wrapper for libc::isatty Maximiliano Sandoval
2024-02-16 14:59 ` [pbs-devel] [PATCH proxmox v2 2/2] router: " Maximiliano Sandoval
@ 2024-02-16 15:57 ` Dietmar Maurer
1 sibling, 0 replies; 3+ messages in thread
From: Dietmar Maurer @ 2024-02-16 15:57 UTC (permalink / raw)
To: Proxmox Backup Server development discussion, Maximiliano Sandoval
applied both patches
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-02-16 15:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-16 14:59 [pbs-devel] [PATCH proxmox v2 1/2] sys: Use safe wrapper for libc::isatty Maximiliano Sandoval
2024-02-16 14:59 ` [pbs-devel] [PATCH proxmox v2 2/2] router: " Maximiliano Sandoval
2024-02-16 15:57 ` [pbs-devel] applied: [PATCH proxmox v2 1/2] sys: " Dietmar Maurer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox