refactor(tvix/nix-compat): drop read_u32
Actually these are all u64 LE encoded on the wire. Change-Id: I5ca22c7639607ac47117cd946e036a444271885a Reviewed-on: https://cl.tvl.fyi/c/depot/+/11348 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
c35a5ff611
commit
9cec50cb2e
2 changed files with 3 additions and 35 deletions
|
@ -11,25 +11,6 @@ pub static MAGIC_HELLO_RESPONSE: [u8; 8] = *b"oixd\0\0\0\0";
|
|||
// LE-encoded protocol version.
|
||||
pub static PROTOCOL_VERSION: [u8; 8] = [0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
|
||||
|
||||
/// Read a LE u32 from the least-significant bytes of a LE u64.
|
||||
///
|
||||
/// Overall, it looks like this on the wire:
|
||||
///
|
||||
/// 00 0x12 0x32 0x00 0x00 0x00 0x00 0x00 0x00
|
||||
/// |------------------|-------------------|
|
||||
/// LE u32 padding
|
||||
///
|
||||
/// Not sure why the protocol does this instead of using a plain u64,
|
||||
/// but well, it is what it is.
|
||||
///
|
||||
/// Analogous to the readInt function in cppnix.
|
||||
pub async fn read_u32<R: AsyncReadExt + Unpin>(r: &mut R) -> std::io::Result<u32> {
|
||||
let val64 = r.read_u64_le().await?;
|
||||
u32::try_from(val64).map_err(|_| {
|
||||
std::io::Error::new(std::io::ErrorKind::InvalidData, "padding is not all zeroes")
|
||||
})
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
/// Read a u64 from the AsyncRead (little endian).
|
||||
pub async fn read_u64<R: AsyncReadExt + Unpin>(r: &mut R) -> std::io::Result<u64> {
|
||||
|
@ -56,8 +37,7 @@ pub async fn write_bool<W: AsyncWrite + Unpin>(w: &mut W, v: bool) -> std::io::R
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use hex_literal::hex;
|
||||
use tokio_test::{assert_err, io::Builder};
|
||||
use tokio_test::io::Builder;
|
||||
|
||||
// Integers.
|
||||
#[tokio::test]
|
||||
|
@ -98,16 +78,4 @@ mod tests {
|
|||
let mut mock = Builder::new().write(&1u64.to_le_bytes()).build();
|
||||
write_bool(&mut mock, true).await.unwrap();
|
||||
}
|
||||
#[tokio::test]
|
||||
async fn test_read_u32() {
|
||||
let mut mock = Builder::new().read(&hex!("7856341200000000")).build();
|
||||
let res = read_u32(&mut mock).await.unwrap();
|
||||
assert_eq!(res, 0x12345678);
|
||||
}
|
||||
#[tokio::test]
|
||||
async fn test_read_too_large_u32_fail() {
|
||||
let mut mock = Builder::new().read(&hex!("7856341298760000")).build();
|
||||
let res = read_u32(&mut mock).await;
|
||||
assert_err!(res);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ where
|
|||
conn.write(&primitive::PROTOCOL_VERSION).await?;
|
||||
conn.flush().await?;
|
||||
debug!("Hello responded");
|
||||
let client_version = primitive::read_u32(&mut conn).await?;
|
||||
let client_version = primitive::read_u64(&mut conn).await?;
|
||||
debug!("Version read");
|
||||
if client_version < 0x10a {
|
||||
return Err(anyhow!("The nix client version is too old"));
|
||||
|
@ -101,7 +101,7 @@ where
|
|||
if protocol_minor >= 14 {
|
||||
debug!("read cpu affinity");
|
||||
// Obsolete CPU affinity.
|
||||
let read_affinity = primitive::read_u32(&mut conn).await?;
|
||||
let read_affinity = primitive::read_u64(&mut conn).await?;
|
||||
if read_affinity != 0 {
|
||||
skip_8_bytes(&mut conn).await?;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue