use crate::{
fsemul::pcfs::sata::{
proto::{SataRequest, SataResponse, SataResultCode, SataSetFilePositionPacketBody},
server::PcfsServerState,
},
net::{
additions::StreamID,
server::requestable::{Body, State},
},
};
use tracing::debug;
const FS_ERROR: u32 = 0xFFF0_FFE0;
pub async fn handle_set_file_position(
stream: StreamID,
State(state): State<PcfsServerState>,
Body(request): Body<SataRequest<SataSetFilePositionPacketBody>>,
) -> SataResponse<SataResultCode> {
let packet = request.body();
if let Err(cause) = packet
.move_to_pointer()
.do_move(
state.host_filesystem(),
packet.file_descriptor(),
Some(stream.to_raw()),
)
.await
{
debug!(
?cause,
packet.fd = packet.file_descriptor(),
packet.typ = "PcfsSrvSetFilePosition",
"Failed to move file to a specific pointer!",
);
SataResponse::new(
state.pid(),
request.header().clone(),
SataResultCode::error(FS_ERROR),
)
} else {
SataResponse::new(
state.pid(),
request.header().clone(),
SataResultCode::success(),
)
}
}