From 575d302977af7f832a6a8f7292a00521843fdefd Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 5 Feb 2019 16:10:43 +0100 Subject: ffi-macros: Do not pull traits into the namespace. - Previously, it was impossible to use the ffi_wrapper_type macro twice in the same module because importing a trait twice introduces a conflict. --- ffi-macros/src/lib.rs | 47 ++++++++++++++++++++++++++---------------- openpgp-ffi/src/error.rs | 5 ++++- openpgp-ffi/src/fingerprint.rs | 2 ++ openpgp-ffi/src/io.rs | 3 +++ openpgp-ffi/src/keyid.rs | 2 ++ openpgp-ffi/src/tpk.rs | 4 ++++ openpgp-ffi/src/tsk.rs | 4 ++++ 7 files changed, 48 insertions(+), 19 deletions(-) diff --git a/ffi-macros/src/lib.rs b/ffi-macros/src/lib.rs index a9d6b4dd..076918b0 100644 --- a/ffi-macros/src/lib.rs +++ b/ffi-macros/src/lib.rs @@ -372,8 +372,7 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - use MoveFromRaw; - impl MoveFromRaw<#wrapped> for *mut #wrapper { + impl ::MoveFromRaw<#wrapped> for *mut #wrapper { fn move_from_raw(self) -> #wrapped { if self.is_null() { panic!("FFI contract violation: Parameter is NULL"); @@ -407,8 +406,7 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - use RefRaw; - impl RefRaw<#wrapped> for *const #wrapper { + impl ::RefRaw<#wrapped> for *const #wrapper { fn ref_raw(self) -> &'static #wrapped { if self.is_null() { panic!("FFI contract violation: Parameter is NULL"); @@ -429,8 +427,7 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - use RefMutRaw; - impl RefMutRaw<&'static mut #wrapped> for *mut #wrapper { + impl ::RefMutRaw<&'static mut #wrapped> for *mut #wrapper { fn ref_mut_raw(self) -> &'static mut #wrapped { if self.is_null() { panic!("FFI contract violation: Parameter is NULL"); @@ -452,7 +449,7 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - impl RefMutRaw> for ::Maybe<#wrapper> { + impl ::RefMutRaw> for ::Maybe<#wrapper> { fn ref_mut_raw(self) -> Option<&'static mut #wrapped> { if self.is_none() { return None; @@ -481,26 +478,25 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - use MoveIntoRaw; - impl MoveIntoRaw<*mut #wrapper> for #wrapped { + impl ::MoveIntoRaw<*mut #wrapper> for #wrapped { fn move_into_raw(self) -> *mut #wrapper { #wrapper::wrap(#ownership::Owned(self)) } } - impl MoveIntoRaw<*mut #wrapper> for &#wrapped { + impl ::MoveIntoRaw<*mut #wrapper> for &#wrapped { fn move_into_raw(self) -> *mut #wrapper { #wrapper::wrap(#ownership::Ref(self)) } } - impl MoveIntoRaw<*mut #wrapper> for &mut #wrapped { + impl ::MoveIntoRaw<*mut #wrapper> for &mut #wrapped { fn move_into_raw(self) -> *mut #wrapper { #wrapper::wrap(#ownership::RefMut(self)) } } - impl MoveIntoRaw>> + impl ::MoveIntoRaw>> for Option<#wrapped> { fn move_into_raw(self) -> Option<::std::ptr::NonNull<#wrapper>> { @@ -511,7 +507,7 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - impl MoveIntoRaw>> + impl ::MoveIntoRaw>> for Option<&#wrapped> { fn move_into_raw(self) -> Option<::std::ptr::NonNull<#wrapper>> { @@ -522,7 +518,7 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - impl MoveIntoRaw>> + impl ::MoveIntoRaw>> for Option<&mut #wrapped> { fn move_into_raw(self) -> Option<::std::ptr::NonNull<#wrapper>> { @@ -533,12 +529,12 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - use MoveResultIntoRaw; - impl MoveResultIntoRaw>> + impl ::MoveResultIntoRaw>> for ::failure::Fallible<#wrapped> { fn move_into_raw(self, errp: Option<&mut *mut ::error::Error>) -> Option<::std::ptr::NonNull<#wrapper>> { + use ::MoveIntoRaw; match self { Ok(v) => { let ptr = #wrapper::wrap(#ownership::Owned(v)); @@ -554,11 +550,12 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - impl MoveResultIntoRaw>> + impl ::MoveResultIntoRaw>> for ::failure::Fallible<&#wrapped> { fn move_into_raw(self, errp: Option<&mut *mut ::error::Error>) -> Option<::std::ptr::NonNull<#wrapper>> { + use ::MoveIntoRaw; match self { Ok(v) => { let ptr = #wrapper::wrap(#ownership::Ref(v)); @@ -574,11 +571,12 @@ fn derive_conversion_functions(mut st: syn::ItemStruct, } } - impl MoveResultIntoRaw>> + impl ::MoveResultIntoRaw>> for ::failure::Fallible<&mut #wrapped> { fn move_into_raw(self, errp: Option<&mut *mut ::error::Error>) -> Option<::std::ptr::NonNull<#wrapper>> { + use ::MoveIntoRaw; match self { Ok(v) => { let ptr = #wrapper::wrap(#ownership::RefMut(v)); @@ -607,6 +605,7 @@ fn derive_free(span: proc_macro2::Span, prefix: &str, name: &str, /// Frees this object. #[::sequoia_ffi_macros::extern_fn] #[no_mangle] pub extern "system" fn #ident (this: Option<&mut #wrapper>) { + use ::MoveFromRaw; if let Some(ref_) = this { drop((ref_ as *mut #wrapper).move_from_raw()) } @@ -626,6 +625,8 @@ fn derive_clone(span: proc_macro2::Span, prefix: &str, name: &str, #[::sequoia_ffi_macros::extern_fn] #[no_mangle] pub extern "system" fn #ident (this: *const #wrapper) -> *mut #wrapper { + use ::RefRaw; + use ::MoveIntoRaw; this.ref_raw().clone().move_into_raw() } } @@ -644,6 +645,7 @@ fn derive_equal(span: proc_macro2::Span, prefix: &str, name: &str, pub extern "system" fn #ident (a: *const #wrapper, b: *const #wrapper) -> bool { + use ::RefRaw; a.ref_raw() == b.ref_raw() } } @@ -663,6 +665,7 @@ fn derive_to_string(span: proc_macro2::Span, prefix: &str, name: &str, #[::sequoia_ffi_macros::extern_fn] #[no_mangle] pub extern "system" fn #ident (this: *const #wrapper) -> *mut ::libc::c_char { + use ::RefRaw; ffi_return_string!(format!("{}", this.ref_raw())) } } @@ -681,6 +684,7 @@ fn derive_debug(span: proc_macro2::Span, prefix: &str, name: &str, #[::sequoia_ffi_macros::extern_fn] #[no_mangle] pub extern "system" fn #ident (this: *const #wrapper) -> *mut ::libc::c_char { + use ::RefRaw; ffi_return_string!(format!("{:?}", this.ref_raw())) } } @@ -699,6 +703,7 @@ fn derive_hash(span: proc_macro2::Span, prefix: &str, name: &str, pub extern "system" fn #ident (this: *const #wrapper) -> ::libc::uint64_t { use ::std::hash::{Hash, Hasher}; + use ::RefRaw; let mut hasher = ::build_hasher(); this.ref_raw().hash(&mut hasher); @@ -727,6 +732,8 @@ fn derive_parse(span: proc_macro2::Span, prefix: &str, name: &str, fn #from_reader(errp: Option<&mut *mut ::error::Error>, reader: *mut super::io::Reader) -> ::Maybe<#wrapper> { + use ::RefMutRaw; + use ::MoveResultIntoRaw; #wrapped::from_reader(reader.ref_mut_raw()).move_into_raw(errp) } @@ -735,6 +742,7 @@ fn derive_parse(span: proc_macro2::Span, prefix: &str, name: &str, fn #from_file(errp: Option<&mut *mut ::error::Error>, filename: *const ::libc::c_char) -> ::Maybe<#wrapper> { + use ::MoveResultIntoRaw; let filename = ffi_param_cstr!(filename).to_string_lossy().into_owned(); #wrapped::from_file(&filename).move_into_raw(errp) @@ -745,6 +753,7 @@ fn derive_parse(span: proc_macro2::Span, prefix: &str, name: &str, fn #from_bytes(errp: Option<&mut *mut ::error::Error>, b: *const ::libc::uint8_t, len: ::libc::size_t) -> ::Maybe<#wrapper> { + use ::MoveResultIntoRaw; assert!(!b.is_null()); let buf = unsafe { ::std::slice::from_raw_parts(b, len as usize) @@ -769,6 +778,8 @@ fn derive_serialize(span: proc_macro2::Span, prefix: &str, name: &str, tsk: *const #wrapper, writer: *mut Box<::std::io::Write>) -> ::error::Status { + use ::RefRaw; + use ::MoveResultIntoRaw; let writer = ffi_param_ref_mut!(writer); tsk.ref_raw().serialize(writer).move_into_raw(errp) } diff --git a/openpgp-ffi/src/error.rs b/openpgp-ffi/src/error.rs index 5a8bf4ab..d85a854a 100644 --- a/openpgp-ffi/src/error.rs +++ b/openpgp-ffi/src/error.rs @@ -5,6 +5,9 @@ use std::io; extern crate sequoia_openpgp as openpgp; +use MoveIntoRaw; +use RefRaw; + /// Complex errors. /// /// This wraps [`failure::Error`]s. @@ -13,7 +16,7 @@ extern crate sequoia_openpgp as openpgp; #[::ffi_wrapper_type(prefix = "pgp_", derive = "Display")] pub struct Error(failure::Error); -impl MoveResultIntoRaw<::error::Status> for ::failure::Fallible<()> +impl ::MoveResultIntoRaw<::error::Status> for ::failure::Fallible<()> { fn move_into_raw(self, errp: Option<&mut *mut ::error::Error>) -> ::error::Status { diff --git a/openpgp-ffi/src/fingerprint.rs b/openpgp-ffi/src/fingerprint.rs index b3917236..bdb9275e 100644 --- a/openpgp-ffi/src/fingerprint.rs +++ b/openpgp-ffi/src/fingerprint.rs @@ -16,6 +16,8 @@ use libc::{uint8_t, c_char, size_t}; extern crate sequoia_openpgp as openpgp; use super::keyid::KeyID; use Maybe; +use MoveIntoRaw; +use RefRaw; /// Holds a fingerprint. /// diff --git a/openpgp-ffi/src/io.rs b/openpgp-ffi/src/io.rs index 42f78558..d5f4e540 100644 --- a/openpgp-ffi/src/io.rs +++ b/openpgp-ffi/src/io.rs @@ -12,6 +12,9 @@ use std::os::unix::io::FromRawFd; extern crate sequoia_openpgp as openpgp; use Maybe; +use RefMutRaw; +use MoveIntoRaw; +use MoveResultIntoRaw; /// Wraps a generic reader. #[::ffi_wrapper_type(prefix = "pgp_")] diff --git a/openpgp-ffi/src/keyid.rs b/openpgp-ffi/src/keyid.rs index fca6b3b4..ec4b978b 100644 --- a/openpgp-ffi/src/keyid.rs +++ b/openpgp-ffi/src/keyid.rs @@ -16,6 +16,8 @@ use libc::{uint8_t, c_char}; extern crate sequoia_openpgp as openpgp; use Maybe; +use RefRaw; +use MoveIntoRaw; /// Holds a KeyID. /// diff --git a/openpgp-ffi/src/tpk.rs b/openpgp-ffi/src/tpk.rs index 91b8d881..e8613537 100644 --- a/openpgp-ffi/src/tpk.rs +++ b/openpgp-ffi/src/tpk.rs @@ -34,6 +34,10 @@ use super::fingerprint::Fingerprint; use super::packet_pile::PacketPile; use super::tsk::TSK; use Maybe; +use RefRaw; +use MoveFromRaw; +use MoveIntoRaw; +use MoveResultIntoRaw; /// A transferable public key (TPK). /// diff --git a/openpgp-ffi/src/tsk.rs b/openpgp-ffi/src/tsk.rs index 3850b703..1eb20969 100644 --- a/openpgp-ffi/src/tsk.rs +++ b/openpgp-ffi/src/tsk.rs @@ -16,6 +16,10 @@ use self::openpgp::{ use super::tpk::TPK; use ::error::Status; +use RefRaw; +use MoveFromRaw; +use MoveIntoRaw; +use MoveResultIntoRaw; /// A transferable secret key (TSK). /// -- cgit v1.2.3