summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2019-08-19 13:57:32 -0700
committerCommit Bot <commit-bot@chromium.org>2019-08-26 23:41:52 +0000
commite7e7e51fb064cdec2b7a55f08bc18c9fa01a1180 (patch)
tree25db955065a1bc9ef5c772ab321aea5480b66dd0
parentc2444305a9e8e41f289fe916f0a3f1fbcf2456bf (diff)
downloadcrosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.tar
crosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.tar.gz
crosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.tar.bz2
crosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.tar.lz
crosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.tar.xz
crosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.tar.zst
crosvm-e7e7e51fb064cdec2b7a55f08bc18c9fa01a1180.zip
devices: virtio: replace byteorder with {to,from}_le_bytes()
Use the stabilized standard to_le_bytes() and from_le_bytes() functions
rather than the byteorder crate.

BUG=None
TEST=./build_test
TEST=cargo test -p devices virtio_pci_common_config

Change-Id: I4106a41484760b9e7e586de07135874238bcadb0
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1761154
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
-rw-r--r--devices/src/virtio/virtio_pci_common_config.rs43
1 files changed, 28 insertions, 15 deletions
diff --git a/devices/src/virtio/virtio_pci_common_config.rs b/devices/src/virtio/virtio_pci_common_config.rs
index 7f7eaca..ca9b662 100644
--- a/devices/src/virtio/virtio_pci_common_config.rs
+++ b/devices/src/virtio/virtio_pci_common_config.rs
@@ -2,7 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-use byteorder::{ByteOrder, LittleEndian};
+use std::convert::TryInto;
+
 use sys_util::{warn, GuestAddress};
 
 use super::*;
@@ -52,15 +53,15 @@ impl VirtioPciCommonConfig {
             }
             2 => {
                 let v = self.read_common_config_word(offset, queues);
-                LittleEndian::write_u16(data, v);
+                data.copy_from_slice(&v.to_le_bytes());
             }
             4 => {
                 let v = self.read_common_config_dword(offset, device);
-                LittleEndian::write_u32(data, v);
+                data.copy_from_slice(&v.to_le_bytes());
             }
             8 => {
                 let v = self.read_common_config_qword(offset);
-                LittleEndian::write_u64(data, v);
+                data.copy_from_slice(&v.to_le_bytes());
             }
             _ => (),
         }
@@ -75,11 +76,23 @@ impl VirtioPciCommonConfig {
     ) {
         match data.len() {
             1 => self.write_common_config_byte(offset, data[0]),
-            2 => self.write_common_config_word(offset, LittleEndian::read_u16(data), queues),
-            4 => {
-                self.write_common_config_dword(offset, LittleEndian::read_u32(data), queues, device)
-            }
-            8 => self.write_common_config_qword(offset, LittleEndian::read_u64(data), queues),
+            2 => self.write_common_config_word(
+                offset,
+                // This unwrap (and those below) cannot fail since data.len() is checked.
+                u16::from_le_bytes(data.try_into().unwrap()),
+                queues,
+            ),
+            4 => self.write_common_config_dword(
+                offset,
+                u32::from_le_bytes(data.try_into().unwrap()),
+                queues,
+                device,
+            ),
+            8 => self.write_common_config_qword(
+                offset,
+                u64::from_le_bytes(data.try_into().unwrap()),
+                queues,
+            ),
             _ => (),
         }
     }
@@ -284,19 +297,19 @@ mod tests {
 
         // Device features is read-only and passed through from the device.
         regs.write(0x04, &[0, 0, 0, 0], &mut queues, dev);
-        let mut read_back = vec![0, 0, 0, 0];
+        let mut read_back = [0u8; 4];
         regs.read(0x04, &mut read_back, &mut queues, dev);
-        assert_eq!(LittleEndian::read_u32(&read_back), DUMMY_FEATURES as u32);
+        assert_eq!(u32::from_le_bytes(read_back), DUMMY_FEATURES as u32);
 
         // Feature select registers are read/write.
         regs.write(0x00, &[1, 2, 3, 4], &mut queues, dev);
-        let mut read_back = vec![0, 0, 0, 0];
+        let mut read_back = [0u8; 4];
         regs.read(0x00, &mut read_back, &mut queues, dev);
-        assert_eq!(LittleEndian::read_u32(&read_back), 0x0403_0201);
+        assert_eq!(u32::from_le_bytes(read_back), 0x0403_0201);
         regs.write(0x08, &[1, 2, 3, 4], &mut queues, dev);
-        let mut read_back = vec![0, 0, 0, 0];
+        let mut read_back = [0u8; 4];
         regs.read(0x08, &mut read_back, &mut queues, dev);
-        assert_eq!(LittleEndian::read_u32(&read_back), 0x0403_0201);
+        assert_eq!(u32::from_le_bytes(read_back), 0x0403_0201);
 
         // 'queue_select' can be read and written.
         regs.write(0x16, &[0xaa, 0x55], &mut queues, dev);