From f9ef7346983ad4102f826f59f0cb1595f69d81fb Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Tue, 23 Jun 2020 08:46:40 +0900 Subject: [PATCH 1/6] wiggle: GuestPtr<[u8]> => GuestPtr conversions --- crates/wiggle/src/lib.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/wiggle/src/lib.rs b/crates/wiggle/src/lib.rs index cbc92f2662..0c82784c45 100644 --- a/crates/wiggle/src/lib.rs +++ b/crates/wiggle/src/lib.rs @@ -533,6 +533,14 @@ impl<'a> GuestPtr<'a, str> { } } +impl<'a> GuestPtr<'a, [u8]> { + /// Returns a raw pointer to the string represented by a `[u8]` without + /// validating whether each u8 is a utf-8 codepoint. + pub fn as_str_ptr(&self) -> GuestPtr { + GuestPtr::new(self.mem, self.pointer) + } +} + impl Clone for GuestPtr<'_, T> { fn clone(&self) -> Self { *self From cf8cf9a9481d6c6d97a83bd7a06eb9ccb7456ffd Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Tue, 23 Jun 2020 08:47:13 +0900 Subject: [PATCH 2/6] wiggle: fix a couple of typos in lib.rs docs --- crates/wiggle/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/wiggle/src/lib.rs b/crates/wiggle/src/lib.rs index 0c82784c45..f4d95188d1 100644 --- a/crates/wiggle/src/lib.rs +++ b/crates/wiggle/src/lib.rs @@ -259,7 +259,7 @@ impl<'a, T: ?Sized + Pointee> GuestPtr<'a, T> { /// Creates a new `GuestPtr` from the given `mem` and `pointer` values. /// /// Note that for sized types like `u32`, `GuestPtr`, etc, the `pointer` - /// vlue is a `u32` offset into guest memory. For slices and strings, + /// value is a `u32` offset into guest memory. For slices and strings, /// `pointer` is a `(u32, u32)` offset/length pair. pub fn new(mem: &'a (dyn GuestMemory + 'a), pointer: T::Pointer) -> GuestPtr<'a, T> { GuestPtr { @@ -488,7 +488,7 @@ impl<'a> GuestPtr<'a, str> { self.pointer.0 } - /// Returns the length, in bytes, of th estring. + /// Returns the length, in bytes, of the string. pub fn len(&self) -> u32 { self.pointer.1 } From 7699c4d6e3f087f7c35e788604300f4029d07d51 Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Wed, 24 Jun 2020 09:10:59 +0900 Subject: [PATCH 3/6] wiggle: fix lifetime in as_str_ptr --- crates/wiggle/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/wiggle/src/lib.rs b/crates/wiggle/src/lib.rs index f4d95188d1..85f59e3304 100644 --- a/crates/wiggle/src/lib.rs +++ b/crates/wiggle/src/lib.rs @@ -536,7 +536,7 @@ impl<'a> GuestPtr<'a, str> { impl<'a> GuestPtr<'a, [u8]> { /// Returns a raw pointer to the string represented by a `[u8]` without /// validating whether each u8 is a utf-8 codepoint. - pub fn as_str_ptr(&self) -> GuestPtr { + pub fn as_str_ptr(&self) -> GuestPtr<'a, str> { GuestPtr::new(self.mem, self.pointer) } } From ea3c2325a500beee24cbddf256e3a014c4c451c7 Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Wed, 24 Jun 2020 09:12:30 +0900 Subject: [PATCH 4/6] wiggle: add as_byte_ptr: str -> [u8] method --- crates/wiggle/src/lib.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/wiggle/src/lib.rs b/crates/wiggle/src/lib.rs index 85f59e3304..d3a3f4acd7 100644 --- a/crates/wiggle/src/lib.rs +++ b/crates/wiggle/src/lib.rs @@ -499,6 +499,12 @@ impl<'a> GuestPtr<'a, str> { GuestPtr::new(self.mem, self.pointer) } + /// Returns a raw pointer for the underlying slice of bytes that this + /// pointer points to. + pub fn as_byte_ptr(&self) -> GuestPtr<'a, [u8]> { + GuestPtr::new(self.mem, self.pointer) + } + /// Attempts to create a [`GuestStr<'_>`] from this pointer, performing /// bounds checks and utf-8 checks. The resulting `GuestStr` can be used /// as a `&str` or `&mut str` via the `Deref` and `DerefMut` traits. The From 67f6aad415ad49fbe6176526e94a67d4838a19d7 Mon Sep 17 00:00:00 2001 From: Pat Hickey Date: Tue, 23 Jun 2020 21:08:00 -0700 Subject: [PATCH 5/6] Update crates/wiggle/src/lib.rs --- crates/wiggle/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/wiggle/src/lib.rs b/crates/wiggle/src/lib.rs index d3a3f4acd7..3c553b5449 100644 --- a/crates/wiggle/src/lib.rs +++ b/crates/wiggle/src/lib.rs @@ -499,7 +499,7 @@ impl<'a> GuestPtr<'a, str> { GuestPtr::new(self.mem, self.pointer) } - /// Returns a raw pointer for the underlying slice of bytes that this + /// Returns a pointer for the underlying slice of bytes that this /// pointer points to. pub fn as_byte_ptr(&self) -> GuestPtr<'a, [u8]> { GuestPtr::new(self.mem, self.pointer) From c6e599219a28864880af1a12c0ee18dd73bc6fdd Mon Sep 17 00:00:00 2001 From: Pat Hickey Date: Tue, 23 Jun 2020 21:08:05 -0700 Subject: [PATCH 6/6] Update crates/wiggle/src/lib.rs --- crates/wiggle/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/wiggle/src/lib.rs b/crates/wiggle/src/lib.rs index 3c553b5449..e756dc8dbb 100644 --- a/crates/wiggle/src/lib.rs +++ b/crates/wiggle/src/lib.rs @@ -540,7 +540,7 @@ impl<'a> GuestPtr<'a, str> { } impl<'a> GuestPtr<'a, [u8]> { - /// Returns a raw pointer to the string represented by a `[u8]` without + /// Returns a pointer to the string represented by a `[u8]` without /// validating whether each u8 is a utf-8 codepoint. pub fn as_str_ptr(&self) -> GuestPtr<'a, str> { GuestPtr::new(self.mem, self.pointer)