Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 23 additions & 23 deletions kernel/src/driver/tty/tty_ldisc/ntty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ struct EchoStep {
canon_cursor_column: u32,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
enum OpostCharResult {
Emitted,
ConsumedWithoutOutput,
NeedsMoreRoom,
}

impl NTtyLinediscipline {
#[inline]
pub fn disc_data(&self) -> SpinLockGuard<'_, NTtyData> {
Expand Down Expand Up @@ -1487,18 +1494,18 @@ impl NTtyData {
mut c: u8,
out: &mut Vec<u8>,
space: usize,
) -> Result<usize, SystemError> {
) -> OpostCharResult {
let used = out.len();
if used >= space {
return Err(SystemError::ENOBUFS);
return OpostCharResult::NeedsMoreRoom;
}

if c as usize == 8 {
if self.cursor_column > 0 {
self.cursor_column -= 1;
}
out.push(c);
return Ok(1);
return OpostCharResult::Emitted;
}

match c as char {
Expand All @@ -1508,18 +1515,18 @@ impl NTtyData {
}
if termios.output_mode.contains(OutputMode::ONLCR) {
if used + 2 > space {
return Err(SystemError::ENOBUFS);
return OpostCharResult::NeedsMoreRoom;
}
self.cursor_column = 0;
self.canon_cursor_column = 0;
out.extend_from_slice(b"\r\n");
return Ok(2);
return OpostCharResult::Emitted;
}
self.canon_cursor_column = self.cursor_column;
}
'\r' => {
if termios.output_mode.contains(OutputMode::ONOCR) && self.cursor_column == 0 {
return Ok(0);
return OpostCharResult::ConsumedWithoutOutput;
}

if termios.output_mode.contains(OutputMode::OCRNL) {
Expand All @@ -1537,11 +1544,11 @@ impl NTtyData {
let spaces = 8 - (self.cursor_column & 7) as usize;
if output_mode_has_xtabs(termios) {
if used + spaces > space {
return Err(SystemError::ENOBUFS);
return OpostCharResult::NeedsMoreRoom;
}
self.cursor_column += spaces as u32;
out.extend_from_slice(&b" "[..spaces]);
return Ok(spaces);
return OpostCharResult::Emitted;
}
self.cursor_column += spaces as u32;
}
Expand All @@ -1561,7 +1568,7 @@ impl NTtyData {
}

out.push(c);
Ok(1)
OpostCharResult::Emitted
}

fn simple_output_block_len(&self, termios: &Termios, buf: &[u8], limit: usize) -> usize {
Expand Down Expand Up @@ -1921,30 +1928,23 @@ impl TtyLineDiscipline for NTtyLinediscipline {
let mut guard = self.disc_data();
let cursor_column = guard.cursor_column;
let canon_cursor_column = guard.canon_cursor_column;
match guard.process_output_char_to_buf(
let opost_result = guard.process_output_char_to_buf(
&termios,
buf[offset],
&mut out_buf,
space,
) {
Ok(_) => {}
Err(SystemError::ENOBUFS) => {
guard.cursor_column = cursor_column;
guard.canon_cursor_column = canon_cursor_column;
}
Err(err) => {
guard.cursor_column = cursor_column;
guard.canon_cursor_column = canon_cursor_column;
return Err(err);
}
);
if opost_result == OpostCharResult::NeedsMoreRoom {
guard.cursor_column = cursor_column;
guard.canon_cursor_column = canon_cursor_column;
}
drop(guard);

if out_buf.is_empty() {
if opost_result == OpostCharResult::ConsumedWithoutOutput {
offset += 1;
nr -= 1;
made_progress = true;
} else {
} else if opost_result == OpostCharResult::Emitted {
let mut sent = 0;
while sent < out_buf.len() {
let written =
Expand Down
2 changes: 1 addition & 1 deletion user/dadk/config/all/core_utils-9.4.0.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ archive-rootdir = "coreutils-9.4"
# 构建相关信息
[build]
# (可选)构建命令
build-command = "./configure CC=x86_64-linux-musl-gcc CFLAGS=-static && make -j $(nproc) && DESTDIR=$DADK_CURRENT_BUILD_DIR make install"
build-command = "FORCE_UNSAFE_CONFIGURE=1 ./configure CC=x86_64-linux-musl-gcc CFLAGS=-static && make -j $(nproc) && DESTDIR=$DADK_CURRENT_BUILD_DIR make install && install -Dm755 $DADK_CURRENT_BUILD_DIR/usr/local/bin/true $DADK_CURRENT_BUILD_DIR/bin/true && install -Dm755 $DADK_CURRENT_BUILD_DIR/usr/local/bin/false $DADK_CURRENT_BUILD_DIR/bin/false"
# 安装相关信息
[install]
# (可选)安装到DragonOS的路径
Expand Down
Loading