From 2cad45090267d6936d1f107720058b7a761f8f00 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 8 Jan 2019 18:28:43 +0100 Subject: ffi: Introduce macro for passing references from C. --- ffi/src/core.rs | 54 ++++++------- ffi/src/error.rs | 4 +- ffi/src/lib.rs | 16 ++++ ffi/src/net.rs | 18 ++--- ffi/src/openpgp/armor.rs | 14 ++-- ffi/src/openpgp/fingerprint.rs | 12 +-- ffi/src/openpgp/keyid.rs | 8 +- ffi/src/openpgp/mod.rs | 174 ++++++++++++++++++++--------------------- ffi/src/openpgp/packet_pile.rs | 16 ++-- ffi/src/openpgp/tpk.rs | 80 +++++++++---------- ffi/src/store.rs | 98 +++++++++++------------ 11 files changed, 255 insertions(+), 239 deletions(-) (limited to 'ffi') diff --git a/ffi/src/core.rs b/ffi/src/core.rs index e31513a5..564f3ae8 100644 --- a/ffi/src/core.rs +++ b/ffi/src/core.rs @@ -64,7 +64,7 @@ impl Context { #[no_mangle] pub extern "system" fn sq_context_last_error(ctx: Option<&mut Context>) -> *mut failure::Error { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); maybe_box_raw!(ctx.e.take()) } @@ -148,29 +148,29 @@ pub extern "system" fn sq_context_home(ctx: Option<&Context>) -> *const c_char { /// Returns the directory containing backend servers. #[no_mangle] pub extern "system" fn sq_context_lib(ctx: Option<&Context>) -> *const c_char { - assert!(ctx.is_some()); - ctx.unwrap().c.lib().to_string_lossy().as_bytes().as_ptr() as *const c_char + let ctx = ffi_param_ref!(ctx); + ctx.c.lib().to_string_lossy().as_bytes().as_ptr() as *const c_char } /// Returns the network policy. #[no_mangle] pub extern "system" fn sq_context_network_policy(ctx: Option<&Context>) -> c_int { - assert!(ctx.is_some()); - u8::from(ctx.unwrap().c.network_policy()) as c_int + let ctx = ffi_param_ref!(ctx); + u8::from(ctx.c.network_policy()) as c_int } /// Returns the IPC policy. #[no_mangle] pub extern "system" fn sq_context_ipc_policy(ctx: Option<&Context>) -> c_int { - assert!(ctx.is_some()); - u8::from(ctx.unwrap().c.ipc_policy()) as c_int + let ctx = ffi_param_ref!(ctx); + u8::from(ctx.c.ipc_policy()) as c_int } /// Returns whether or not this is an ephemeral context. #[no_mangle] pub extern "system" fn sq_context_ephemeral(ctx: Option<&Context>) -> uint8_t { - assert!(ctx.is_some()); - if ctx.unwrap().c.ephemeral() { 1 } else { 0 } + let ctx = ffi_param_ref!(ctx); + if ctx.c.ephemeral() { 1 } else { 0 } } @@ -203,53 +203,53 @@ pub extern "system" fn sq_config_build(cfg: Option<&mut Config>, #[no_mangle] pub extern "system" fn sq_config_home(cfg: Option<&mut Config>, home: *const c_char) { - assert!(cfg.is_some()); + let cfg = ffi_param_ref!(cfg); assert!(! home.is_null()); let home = unsafe { CStr::from_ptr(home).to_string_lossy() }; - cfg.unwrap().set_home(home.as_ref()) + cfg.set_home(home.as_ref()) } /// Set the directory containing backend servers. #[no_mangle] pub extern "system" fn sq_config_lib(cfg: Option<&mut Config>, lib: *const c_char) { - assert!(cfg.is_some()); + let cfg = ffi_param_ref!(cfg); assert!(! lib.is_null()); let lib = unsafe { CStr::from_ptr(lib).to_string_lossy() }; - cfg.unwrap().set_lib(&lib.as_ref()) + cfg.set_lib(&lib.as_ref()) } /// Sets the network policy. #[no_mangle] pub extern "system" fn sq_config_network_policy(cfg: Option<&mut Config>, policy: c_int) { - assert!(cfg.is_some()); + let cfg = ffi_param_ref!(cfg); if policy < 0 || policy > 3 { panic!("Bad network policy: {}", policy); } - cfg.unwrap().set_network_policy((policy as u8).into()); + cfg.set_network_policy((policy as u8).into()); } /// Sets the IPC policy. #[no_mangle] pub extern "system" fn sq_config_ipc_policy(cfg: Option<&mut Config>, policy: c_int) { - assert!(cfg.is_some()); + let cfg = ffi_param_ref!(cfg); if policy < 0 || policy > 2 { panic!("Bad ipc policy: {}", policy); } - cfg.unwrap().set_ipc_policy((policy as u8).into()); + cfg.set_ipc_policy((policy as u8).into()); } /// Makes this context ephemeral. #[no_mangle] pub extern "system" fn sq_config_ephemeral(cfg: Option<&mut Config>) { - assert!(cfg.is_some()); - cfg.unwrap().set_ephemeral(); + let cfg = ffi_param_ref!(cfg); + cfg.set_ephemeral(); } /* Reader and writer. */ @@ -259,7 +259,7 @@ pub extern "system" fn sq_config_ephemeral(cfg: Option<&mut Config>) { pub extern "system" fn sq_reader_from_file(ctx: Option<&mut Context>, filename: *const c_char) -> *mut Box { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! filename.is_null()); let filename = unsafe { CStr::from_ptr(filename).to_string_lossy().into_owned() @@ -301,8 +301,8 @@ pub extern "system" fn sq_reader_read(ctx: Option<&mut Context>, reader: Option<&mut Box>, buf: *mut uint8_t, len: size_t) -> ssize_t { - let ctx = ctx.expect("Context is NULL"); - let reader = reader.expect("Reader is NULL"); + let ctx = ffi_param_ref!(ctx); + let reader = ffi_param_ref!(reader); assert!(!buf.is_null()); let buf = unsafe { slice::from_raw_parts_mut(buf, len as usize) @@ -319,7 +319,7 @@ pub extern "system" fn sq_reader_read(ctx: Option<&mut Context>, pub extern "system" fn sq_writer_from_file(ctx: Option<&mut Context>, filename: *const c_char) -> *mut Box { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! filename.is_null()); let filename = unsafe { CStr::from_ptr(filename).to_string_lossy().into_owned() @@ -361,8 +361,8 @@ pub extern "system" fn sq_writer_from_bytes(buf: *mut uint8_t, pub extern "system" fn sq_writer_alloc(buf: Option<&'static mut *mut c_void>, len: Option<&'static mut size_t>) -> *mut Box { - let buf = buf.expect("BUF is NULL"); - let len = len.expect("LEN is NULL"); + let buf = ffi_param_ref!(buf); + let len = ffi_param_ref!(len); box_raw!(Box::new(WriterAlloc { buf: buf, @@ -415,8 +415,8 @@ pub extern "system" fn sq_writer_write(ctx: Option<&mut Context>, writer: Option<&mut Box>, buf: *const uint8_t, len: size_t) -> ssize_t { - let ctx = ctx.expect("Context is NULL"); - let writer = writer.expect("Writer is NULL"); + let ctx = ffi_param_ref!(ctx); + let writer = ffi_param_ref!(writer); assert!(!buf.is_null()); let buf = unsafe { slice::from_raw_parts(buf, len as usize) diff --git a/ffi/src/error.rs b/ffi/src/error.rs index 05a1998a..e54139d1 100644 --- a/ffi/src/error.rs +++ b/ffi/src/error.rs @@ -20,7 +20,7 @@ pub extern "system" fn sq_error_free(error: *mut failure::Error) { #[no_mangle] pub extern "system" fn sq_error_string(error: Option<&failure::Error>) -> *mut c_char { - let error = error.expect("Error is NULL"); + let error = ffi_param_ref!(error); CString::new(format!("{}", error)) .map(|s| s.into_raw()) .unwrap_or(CString::new("Failed to convert error into string") @@ -31,7 +31,7 @@ pub extern "system" fn sq_error_string(error: Option<&failure::Error>) #[no_mangle] pub extern "system" fn sq_error_status(error: Option<&failure::Error>) -> Status { - let error = error.expect("Error is NULL"); + let error = ffi_param_ref!(error); error.into() } diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index c9410816..3dd0a252 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -141,6 +141,22 @@ macro_rules! ffi_free { }}; } +/* Parameter handling. */ + +/// Transfers a reference from C to Rust. +/// +/// # Panics +/// +/// Panics if called with NULL. +macro_rules! ffi_param_ref { + ($name:ident) => {{ + if $name.is_none() { + panic!("Parameter {} is NULL", stringify!($name)); + } + $name.unwrap() + }}; +} + /// Like try! for ffi glue. /// /// Evaluates the given expression. On success, evaluate to diff --git a/ffi/src/net.rs b/ffi/src/net.rs index bd98bca1..25e1313a 100644 --- a/ffi/src/net.rs +++ b/ffi/src/net.rs @@ -51,7 +51,7 @@ use super::core::Context; #[no_mangle] pub extern "system" fn sq_keyserver_new(ctx: Option<&mut Context>, uri: *const c_char) -> *mut KeyServer { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); let uri = unsafe { if uri.is_null() { None } else { Some(CStr::from_ptr(uri)) } }; @@ -71,7 +71,7 @@ pub extern "system" fn sq_keyserver_with_cert(ctx: Option<&mut Context>, uri: *const c_char, cert: *const uint8_t, len: size_t) -> *mut KeyServer { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); let uri = unsafe { if uri.is_null() { None } else { Some(CStr::from_ptr(uri)) } }; @@ -101,7 +101,7 @@ pub extern "system" fn sq_keyserver_with_cert(ctx: Option<&mut Context>, #[no_mangle] pub extern "system" fn sq_keyserver_sks_pool(ctx: Option<&mut Context>) -> *mut KeyServer { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); fry_box!(ctx, KeyServer::sks_pool(&ctx.c)) } @@ -118,9 +118,9 @@ pub extern "system" fn sq_keyserver_free(ks: *mut KeyServer) { pub extern "system" fn sq_keyserver_get(ctx: Option<&mut Context>, ks: Option<&mut KeyServer>, id: Option<&KeyID>) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); - let ks = ks.expect("KeyServer is NULL"); - let id = id.expect("KeyID is NULL"); + let ctx = ffi_param_ref!(ctx); + let ks = ffi_param_ref!(ks); + let id = ffi_param_ref!(id); fry_box!(ctx, ks.get(&id)) } @@ -133,9 +133,9 @@ pub extern "system" fn sq_keyserver_send(ctx: Option<&mut Context>, ks: Option<&mut KeyServer>, tpk: Option<&TPK>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let ks = ks.expect("KeyServer is NULL"); - let tpk = tpk.expect("TPK is NULL"); + let ctx = ffi_param_ref!(ctx); + let ks = ffi_param_ref!(ks); + let tpk = ffi_param_ref!(tpk); fry_status!(ctx, ks.send(tpk)) } diff --git a/ffi/src/openpgp/armor.rs b/ffi/src/openpgp/armor.rs index 698018f6..9e6b3611 100644 --- a/ffi/src/openpgp/armor.rs +++ b/ffi/src/openpgp/armor.rs @@ -133,7 +133,7 @@ fn kind_to_int(kind: Option) -> c_int { pub extern "system" fn sq_armor_reader_new(inner: Option<&'static mut Box>, kind: c_int) -> *mut Box { - let inner = inner.expect("Inner is NULL"); + let inner = ffi_param_ref!(inner); let kind = int_to_kind(kind); box_raw!(Box::new(armor::Reader::new(inner, kind))) @@ -145,7 +145,7 @@ pub extern "system" fn sq_armor_reader_from_file(ctx: Option<&mut Context>, filename: *const c_char, kind: c_int) -> *mut Box { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! filename.is_null()); let filename = unsafe { CStr::from_ptr(filename).to_string_lossy().into_owned() @@ -220,9 +220,9 @@ pub extern "system" fn sq_armor_reader_headers(ctx: Option<&mut Context>, reader: *mut Box, len: Option<&mut size_t>) -> *mut ArmorHeader { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! reader.is_null()); - let len = len.expect("LEN is NULL"); + let len = ffi_param_ref!(len); // We need to downcast `reader`. To do that, we need to do a // little dance. We will momentarily take ownership of `reader`, @@ -358,13 +358,13 @@ pub extern "system" fn sq_armor_writer_new header_len: size_t) -> *mut Box { - let ctx = ctx.expect("Context is NULL"); - let inner = inner.expect("Inner is NULL"); + let ctx = ffi_param_ref!(ctx); + let inner = ffi_param_ref!(inner); let kind = int_to_kind(kind).expect("KIND must not be SQ_ARMOR_KIND_ANY"); let mut header_ = Vec::new(); if header_len > 0 { - let header = header.expect("HEADER is NULL"); + let header = ffi_param_ref!(header); let header = unsafe { slice::from_raw_parts(header, header_len) }; diff --git a/ffi/src/openpgp/fingerprint.rs b/ffi/src/openpgp/fingerprint.rs index 3c2a38ad..5713b961 100644 --- a/ffi/src/openpgp/fingerprint.rs +++ b/ffi/src/openpgp/fingerprint.rs @@ -48,7 +48,7 @@ pub extern "system" fn sq_fingerprint_free(fp: *mut Fingerprint) { #[no_mangle] pub extern "system" fn sq_fingerprint_clone(fp: Option<&Fingerprint>) -> *mut Fingerprint { - let fp = fp.expect("Fingerprint is NULL"); + let fp = ffi_param_ref!(fp); box_raw!(fp.clone()) } @@ -56,7 +56,7 @@ pub extern "system" fn sq_fingerprint_clone(fp: Option<&Fingerprint>) #[no_mangle] pub extern "system" fn sq_fingerprint_hash(fp: Option<&Fingerprint>) -> uint64_t { - let fp = fp.expect("Fingerprint is NULL"); + let fp = ffi_param_ref!(fp); let mut hasher = build_hasher(); fp.hash(&mut hasher); hasher.finish() @@ -69,7 +69,7 @@ pub extern "system" fn sq_fingerprint_hash(fp: Option<&Fingerprint>) #[no_mangle] pub extern "system" fn sq_fingerprint_as_bytes(fp: Option<&Fingerprint>, fp_len: Option<&mut size_t>) -> *const uint8_t { - let fp = fp.expect("Fingerprint is NULL"); + let fp = ffi_param_ref!(fp); if let Some(p) = fp_len { *p = fp.as_slice().len(); } @@ -80,7 +80,7 @@ pub extern "system" fn sq_fingerprint_as_bytes(fp: Option<&Fingerprint>, fp_len: #[no_mangle] pub extern "system" fn sq_fingerprint_to_string(fp: Option<&Fingerprint>) -> *mut c_char { - let fp = fp.expect("Fingerprint is NULL"); + let fp = ffi_param_ref!(fp); CString::new(fp.to_string()) .unwrap() // Errors only on internal nul bytes. .into_raw() @@ -90,7 +90,7 @@ pub extern "system" fn sq_fingerprint_to_string(fp: Option<&Fingerprint>) #[no_mangle] pub extern "system" fn sq_fingerprint_to_hex(fp: Option<&Fingerprint>) -> *mut c_char { - let fp = fp.expect("Fingerprint is NULL"); + let fp = ffi_param_ref!(fp); CString::new(fp.to_hex()) .unwrap() // Errors only on internal nul bytes. .into_raw() @@ -100,7 +100,7 @@ pub extern "system" fn sq_fingerprint_to_hex(fp: Option<&Fingerprint>) #[no_mangle] pub extern "system" fn sq_fingerprint_to_keyid(fp: Option<&Fingerprint>) -> *mut KeyID { - let fp = fp.expect("Fingerprint is NULL"); + let fp = ffi_param_ref!(fp); Box::into_raw(Box::new(fp.to_keyid())) } diff --git a/ffi/src/openpgp/keyid.rs b/ffi/src/openpgp/keyid.rs index bc4a2ace..8b64d2f8 100644 --- a/ffi/src/openpgp/keyid.rs +++ b/ffi/src/openpgp/keyid.rs @@ -59,7 +59,7 @@ pub extern "system" fn sq_keyid_free(keyid: *mut KeyID) { #[no_mangle] pub extern "system" fn sq_keyid_clone(id: Option<&KeyID>) -> *mut KeyID { - let id = id.expect("KeyID is NULL"); + let id = ffi_param_ref!(id); box_raw!(id.clone()) } @@ -67,7 +67,7 @@ pub extern "system" fn sq_keyid_clone(id: Option<&KeyID>) #[no_mangle] pub extern "system" fn sq_keyid_hash(id: Option<&KeyID>) -> uint64_t { - let id = id.expect("KeyID is NULL"); + let id = ffi_param_ref!(id); let mut hasher = build_hasher(); id.hash(&mut hasher); hasher.finish() @@ -77,7 +77,7 @@ pub extern "system" fn sq_keyid_hash(id: Option<&KeyID>) #[no_mangle] pub extern "system" fn sq_keyid_to_string(id: Option<&KeyID>) -> *mut c_char { - let id = id.expect("KeyID is NULL"); + let id = ffi_param_ref!(id); CString::new(id.to_string()) .unwrap() // Errors only on internal nul bytes. .into_raw() @@ -87,7 +87,7 @@ pub extern "system" fn sq_keyid_to_string(id: Option<&KeyID>) #[no_mangle] pub extern "system" fn sq_keyid_to_hex(id: Option<&KeyID>) -> *mut c_char { - let id = id.expect("KeyID is NULL"); + let id = ffi_param_ref!(id); CString::new(id.to_hex()) .unwrap() // Errors only on internal nul bytes. .into_raw() diff --git a/ffi/src/openpgp/mod.rs b/ffi/src/openpgp/mod.rs index 9dc9548c..cef143af 100644 --- a/ffi/src/openpgp/mod.rs +++ b/ffi/src/openpgp/mod.rs @@ -135,10 +135,10 @@ pub extern "system" fn sq_tsk_new(ctx: Option<&mut Context>, revocation_out: Option<&mut *mut Signature>) -> Status { - let ctx = ctx.expect("CONTEXT is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!primary_uid.is_null()); - let tsk_out = tsk_out.expect("TSK is NULL"); - let revocation_out = revocation_out.expect("REVOCATION is NULL"); + let tsk_out = ffi_param_ref!(tsk_out); + let revocation_out = ffi_param_ref!(revocation_out); let primary_uid = unsafe { CStr::from_ptr(primary_uid) }; @@ -162,7 +162,7 @@ pub extern "system" fn sq_tsk_free(tsk: *mut TSK) { #[no_mangle] pub extern "system" fn sq_tsk_tpk(tsk: Option<&TSK>) -> &TPK { - let tsk = tsk.expect("TSK is NULL"); + let tsk = ffi_param_ref!(tsk); tsk.tpk() } @@ -183,9 +183,9 @@ pub extern "system" fn sq_tsk_serialize(ctx: Option<&mut Context>, tsk: Option<&TSK>, writer: Option<&mut Box>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let tsk = tsk.expect("TSK is NULL"); - let writer = writer.expect("Writer is NULL"); + let ctx = ffi_param_ref!(ctx); + let tsk = ffi_param_ref!(tsk); + let writer = ffi_param_ref!(writer); fry_status!(ctx, tsk.serialize(writer)) } @@ -205,7 +205,7 @@ pub extern "system" fn sq_packet_free(p: *mut Packet) { #[no_mangle] pub extern "system" fn sq_packet_tag(p: Option<&Packet>) -> uint8_t { - let p = p.expect("Packet is NULL"); + let p = ffi_param_ref!(p); let tag: u8 = p.tag().into(); tag as uint8_t } @@ -220,7 +220,7 @@ pub extern "system" fn sq_packet_tag(p: Option<&Packet>) #[no_mangle] pub extern "system" fn sq_packet_kind(p: Option<&Packet>) -> uint8_t { - let p = p.expect("Packet is NULL"); + let p = ffi_param_ref!(p); if let Some(kind) = p.kind() { kind.into() } else { @@ -253,7 +253,7 @@ pub extern "system" fn sq_signature_to_packet(s: *mut Signature) #[no_mangle] pub extern "system" fn sq_signature_issuer(sig: Option<&packet::Signature>) -> *mut KeyID { - let sig = sig.expect("Signature is NULL"); + let sig = ffi_param_ref!(sig); maybe_box_raw!(sig.issuer()) } @@ -267,7 +267,7 @@ pub extern "system" fn sq_signature_issuer_fingerprint( sig: Option<&packet::Signature>) -> *mut Fingerprint { - let sig = sig.expect("Signature is NULL"); + let sig = ffi_param_ref!(sig); maybe_box_raw!(sig.issuer_fingerprint()) } @@ -278,7 +278,7 @@ pub extern "system" fn sq_signature_issuer_fingerprint( pub extern "system" fn sq_signature_can_certify(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().can_certify() } @@ -288,7 +288,7 @@ pub extern "system" fn sq_signature_can_certify(sig: Option<&packet::Signature>) pub extern "system" fn sq_signature_can_sign(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().can_sign() } @@ -298,7 +298,7 @@ pub extern "system" fn sq_signature_can_sign(sig: Option<&packet::Signature>) pub extern "system" fn sq_signature_can_encrypt_for_transport(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().can_encrypt_for_transport() } @@ -308,7 +308,7 @@ pub extern "system" fn sq_signature_can_encrypt_for_transport(sig: Option<&packe pub extern "system" fn sq_signature_can_encrypt_at_rest(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().can_encrypt_at_rest() } @@ -318,7 +318,7 @@ pub extern "system" fn sq_signature_can_encrypt_at_rest(sig: Option<&packet::Sig pub extern "system" fn sq_signature_can_authenticate(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().can_authenticate() } @@ -328,7 +328,7 @@ pub extern "system" fn sq_signature_can_authenticate(sig: Option<&packet::Signat pub extern "system" fn sq_signature_is_split_key(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().is_split_key() } @@ -338,7 +338,7 @@ pub extern "system" fn sq_signature_is_split_key(sig: Option<&packet::Signature> pub extern "system" fn sq_signature_is_group_key(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.key_flags().is_group_key() } @@ -351,7 +351,7 @@ pub extern "system" fn sq_signature_is_group_key(sig: Option<&packet::Signature> pub extern "system" fn sq_signature_alive(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.signature_alive() } @@ -364,7 +364,7 @@ pub extern "system" fn sq_signature_alive_at(sig: Option<&packet::Signature>, when: time_t) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.signature_alive_at(time::at(time::Timespec::new(when as i64, 0))) } @@ -373,7 +373,7 @@ pub extern "system" fn sq_signature_alive_at(sig: Option<&packet::Signature>, pub extern "system" fn sq_signature_expired(sig: Option<&packet::Signature>) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.signature_expired() } @@ -383,7 +383,7 @@ pub extern "system" fn sq_signature_expired_at(sig: Option<&packet::Signature>, when: time_t) -> bool { - let sig = sig.expect("Sig is NULL"); + let sig = ffi_param_ref!(sig); sig.signature_expired_at(time::at(time::Timespec::new(when as i64, 0))) } @@ -392,7 +392,7 @@ pub extern "system" fn sq_signature_expired_at(sig: Option<&packet::Signature>, #[no_mangle] pub extern "system" fn sq_p_key_clone(key: Option<&packet::Key>) -> *mut packet::Key { - let key = key.expect("Key is NULL"); + let key = ffi_param_ref!(key); box_raw!(key.clone()) } @@ -401,7 +401,7 @@ pub extern "system" fn sq_p_key_clone(key: Option<&packet::Key>) #[no_mangle] pub extern "system" fn sq_p_key_fingerprint(key: Option<&packet::Key>) -> *mut Fingerprint { - let key = key.expect("Key is NULL"); + let key = ffi_param_ref!(key); box_raw!(key.fingerprint()) } @@ -410,7 +410,7 @@ pub extern "system" fn sq_p_key_fingerprint(key: Option<&packet::Key>) #[no_mangle] pub extern "system" fn sq_p_key_keyid(key: Option<&packet::Key>) -> *mut KeyID { - let key = key.expect("Key is NULL"); + let key = ffi_param_ref!(key); box_raw!(key.keyid()) } @@ -425,8 +425,8 @@ pub extern "system" fn sq_p_key_expired(key: Option<&packet::Key>, sig: Option<&packet::Signature>) -> bool { - let key = key.expect("Key is NULL"); - let sig = sig.expect("SIG is NULL"); + let key = ffi_param_ref!(key); + let sig = ffi_param_ref!(sig); sig.key_expired(key) } @@ -438,8 +438,8 @@ pub extern "system" fn sq_p_key_expired_at(key: Option<&packet::Key>, when: time_t) -> bool { - let key = key.expect("Key is NULL"); - let sig = sig.expect("SIG is NULL"); + let key = ffi_param_ref!(key); + let sig = ffi_param_ref!(sig); sig.key_expired_at(key, time::at(time::Timespec::new(when as i64, 0))) } @@ -458,8 +458,8 @@ pub extern "system" fn sq_p_key_alive(key: Option<&packet::Key>, sig: Option<&packet::Signature>) -> bool { - let key = key.expect("Key is NULL"); - let sig = sig.expect("SIG is NULL"); + let key = ffi_param_ref!(key); + let sig = ffi_param_ref!(sig); sig.key_alive(key) } @@ -471,8 +471,8 @@ pub extern "system" fn sq_p_key_alive_at(key: Option<&packet::Key>, when: time_t) -> bool { - let key = key.expect("Key is NULL"); - let sig = sig.expect("SIG is NULL"); + let key = ffi_param_ref!(key); + let sig = ffi_param_ref!(sig); sig.key_alive_at(key, time::at(time::Timespec::new(when as i64, 0))) } @@ -482,7 +482,7 @@ pub extern "system" fn sq_p_key_alive_at(key: Option<&packet::Key>, pub extern "system" fn sq_p_key_creation_time(key: Option<&packet::Key>) -> u32 { - let key = key.expect("Key is NULL"); + let key = ffi_param_ref!(key); let ct = key.creation_time(); ct.to_timespec().sec as u32 @@ -493,7 +493,7 @@ pub extern "system" fn sq_p_key_creation_time(key: Option<&packet::Key>) pub extern "system" fn sq_p_key_public_key_algo(key: Option<&packet::Key>) -> c_int { - let key = key.expect("Key is NULL"); + let key = ffi_param_ref!(key); let pk_algo : u8 = key.pk_algo().into(); pk_algo as c_int } @@ -505,7 +505,7 @@ pub extern "system" fn sq_p_key_public_key_bits(key: Option<&packet::Key>) { use self::openpgp::crypto::mpis::PublicKey::*; - let key = key.expect("Key is NULL"); + let key = ffi_param_ref!(key); match key.mpis() { RSA { e: _, n } => n.bits as c_int, DSA { p: _, q: _, g: _, y } => y.bits as c_int, @@ -525,7 +525,7 @@ pub extern "system" fn sq_p_key_public_key_bits(key: Option<&packet::Key>) pub extern "system" fn sq_user_id_value(uid: Option<&Packet>, value_len: Option<&mut size_t>) -> *const uint8_t { - let uid = uid.expect("UserID is NULL"); + let uid = ffi_param_ref!(uid); if let &Packet::UserID(ref uid) = uid { if let Some(p) = value_len { *p = uid.userid().len(); @@ -544,7 +544,7 @@ pub extern "system" fn sq_user_id_value(uid: Option<&Packet>, pub extern "system" fn sq_user_attribute_value(ua: Option<&Packet>, value_len: Option<&mut size_t>) -> *const uint8_t { - let ua = ua.expect("UserAttribute is NULL"); + let ua = ffi_param_ref!(ua); if let &Packet::UserAttribute(ref ua) = ua { if let Some(p) = value_len { *p = ua.user_attribute().len(); @@ -570,14 +570,14 @@ pub extern "system" fn sq_skesk_decrypt(ctx: Option<&mut Context>, key: *mut uint8_t, key_len: Option<&mut size_t>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let skesk = skesk.expect("SKESK is NULL"); + let ctx = ffi_param_ref!(ctx); + let skesk = ffi_param_ref!(skesk); assert!(!password.is_null()); let password = unsafe { slice::from_raw_parts(password, password_len as usize) }; - let algo = algo.expect("Algo is NULL"); - let key_len = key_len.expect("Key length is NULL"); + let algo = ffi_param_ref!(algo); + let key_len = ffi_param_ref!(key_len); if let &Packet::SKESK(ref skesk) = skesk { match skesk.decrypt(&password.to_owned().into()) { @@ -607,7 +607,7 @@ pub extern "system" fn sq_skesk_decrypt(ctx: Option<&mut Context>, #[no_mangle] pub extern "system" fn sq_pkesk_recipient(pkesk: Option<&PKESK>) -> *const KeyID { - let pkesk = pkesk.expect("PKESK is NULL"); + let pkesk = ffi_param_ref!(pkesk); pkesk.recipient() } @@ -625,11 +625,11 @@ pub extern "system" fn sq_pkesk_decrypt(ctx: Option<&mut Context>, key: *mut uint8_t, key_len: Option<&mut size_t>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let pkesk = pkesk.expect("PKESK is NULL"); - let secret_key = secret_key.expect("SECRET_KEY is NULL"); - let algo = algo.expect("Algo is NULL"); - let key_len = key_len.expect("Key length is NULL"); + let ctx = ffi_param_ref!(ctx); + let pkesk = ffi_param_ref!(pkesk); + let secret_key = ffi_param_ref!(secret_key); + let algo = ffi_param_ref!(algo); + let key_len = ffi_param_ref!(key_len); if let Some(SecretKey::Unencrypted{ mpis: ref secret_part }) = secret_key.secret() { match pkesk.decrypt(secret_key, secret_part) { @@ -664,8 +664,8 @@ pub extern "system" fn sq_pkesk_decrypt(ctx: Option<&mut Context>, pub extern "system" fn sq_packet_parser_from_reader<'a> (ctx: Option<&mut Context>, reader: Option<&'a mut Box<'a + Read>>) -> *mut PacketParserResult<'a> { - let ctx = ctx.expect("Context is NULL"); - let reader = reader.expect("Reader is NULL"); + let ctx = ffi_param_ref!(ctx); + let reader = ffi_param_ref!(reader); fry_box!(ctx, PacketParser::from_reader(reader)) } @@ -677,7 +677,7 @@ pub extern "system" fn sq_packet_parser_from_reader<'a> pub extern "system" fn sq_packet_parser_from_file (ctx: Option<&mut Context>, filename: *const c_char) -> *mut PacketParserResult { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! filename.is_null()); let filename = unsafe { CStr::from_ptr(filename).to_string_lossy().into_owned() @@ -693,7 +693,7 @@ pub extern "system" fn sq_packet_parser_from_file pub extern "system" fn sq_packet_parser_from_bytes (ctx: Option<&mut Context>, b: *const uint8_t, len: size_t) -> *mut PacketParserResult { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!b.is_null()); let buf = unsafe { slice::from_raw_parts(b, len as usize) @@ -721,7 +721,7 @@ pub extern "system" fn sq_packet_parser_free(pp: *mut PacketParser) { pub extern "system" fn sq_packet_parser_eof_is_message( eof: Option<&PacketParserEOF>) -> bool { - let eof = eof.expect("EOF is NULL"); + let eof = ffi_param_ref!(eof); eof.is_message() } @@ -737,7 +737,7 @@ pub extern "system" fn sq_packet_parser_eof_free(eof: *mut PacketParserEOF) { pub extern "system" fn sq_packet_parser_packet (pp: Option<&PacketParser>) -> *const Packet { - let pp = pp.expect("PacketParser is NULL"); + let pp = ffi_param_ref!(pp); &pp.packet } @@ -749,7 +749,7 @@ pub extern "system" fn sq_packet_parser_packet pub extern "system" fn sq_packet_parser_recursion_depth (pp: Option<&PacketParser>) -> uint8_t { - let pp = pp.expect("PacketParser is NULL"); + let pp = ffi_param_ref!(pp); pp.recursion_depth() as u8 } @@ -827,7 +827,7 @@ pub extern "system" fn sq_packet_parser_next<'a> old_packet: Option<&mut *mut Packet>, ppr: Option<&mut *mut PacketParserResult<'a>>) -> Status { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! pp.is_null()); let pp = unsafe { Box::from_raw(pp) @@ -874,7 +874,7 @@ pub extern "system" fn sq_packet_parser_recurse<'a> old_packet: Option<&mut *mut Packet>, ppr: Option<&mut *mut PacketParserResult<'a>>) -> Status { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! pp.is_null()); let pp = unsafe { Box::from_raw(pp) @@ -906,8 +906,8 @@ pub extern "system" fn sq_packet_parser_buffer_unread_content<'a> pp: Option<&mut PacketParser<'a>>, len: Option<&mut usize>) -> *const uint8_t { - let ctx = ctx.expect("Context is NULL"); - let pp = pp.expect("PacketParser is NULL"); + let ctx = ffi_param_ref!(ctx); + let pp = ffi_param_ref!(pp); let len = len.expect("Length pointer is NULL"); let buf = fry!(ctx, pp.buffer_unread_content()); *len = buf.len(); @@ -924,8 +924,8 @@ pub extern "system" fn sq_packet_parser_finish<'a> packet: Option<&mut *const Packet>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let pp = pp.expect("PacketParser is NULL"); + let ctx = ffi_param_ref!(ctx); + let pp = ffi_param_ref!(pp); match pp.finish() { Ok(p) => { if let Some(out_p) = packet { @@ -957,8 +957,8 @@ pub extern "system" fn sq_packet_parser_decrypt<'a> algo: uint8_t, // XXX key: *const uint8_t, key_len: size_t) -> Status { - let ctx = ctx.expect("Context is NULL"); - let pp = pp.expect("PacketParser is NULL"); + let ctx = ffi_param_ref!(ctx); + let pp = ffi_param_ref!(pp); let key = unsafe { slice::from_raw_parts(key, key_len as usize) }; @@ -982,7 +982,7 @@ pub extern "system" fn sq_packet_parser_result_tag<'a> (ppr: Option<&mut PacketParserResult<'a>>) -> c_int { - let ppr = ppr.expect("ppr is NULL"); + let ppr = ffi_param_ref!(ppr); let tag : u8 = match ppr { PacketParserResult::Some(ref pp) => pp.packet.tag().into(), @@ -1088,8 +1088,8 @@ pub extern "system" fn sq_writer_stack_write buf: *const uint8_t, len: size_t) -> ssize_t { - let ctx = ctx.expect("Context is NULL"); - let writer = writer.expect("Writer is NULL"); + let ctx = ffi_param_ref!(ctx); + let writer = ffi_param_ref!(writer); assert!(!buf.is_null()); let buf = unsafe { slice::from_raw_parts(buf, len as usize) @@ -1109,8 +1109,8 @@ pub extern "system" fn sq_writer_stack_write_all buf: *const uint8_t, len: size_t) -> Status { - let ctx = ctx.expect("Context is NULL"); - let writer = writer.expect("Writer is NULL"); + let ctx = ffi_param_ref!(ctx); + let writer = ffi_param_ref!(writer); assert!(!buf.is_null()); let buf = unsafe { slice::from_raw_parts(buf, len as usize) @@ -1125,7 +1125,7 @@ pub extern "system" fn sq_writer_stack_finalize_one writer: *mut writer::Stack<'static, Cookie>) -> *mut writer::Stack<'static, Cookie> { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); if !writer.is_null() { let writer = unsafe { Box::from_raw(writer) @@ -1143,7 +1143,7 @@ pub extern "system" fn sq_writer_stack_finalize writer: *mut writer::Stack<'static, Cookie>) -> Status { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); if !writer.is_null() { let writer = unsafe { Box::from_raw(writer) @@ -1166,7 +1166,7 @@ pub extern "system" fn sq_arbitrary_writer_new tag: uint8_t) -> *mut writer::Stack<'static, Cookie> { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!inner.is_null()); let inner = unsafe { Box::from_raw(inner) @@ -1186,12 +1186,12 @@ pub extern "system" fn sq_signer_new signers: Option<&&'static TPK>, signers_len: size_t) -> *mut writer::Stack<'static, Cookie> { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!inner.is_null()); let inner = unsafe { Box::from_raw(inner) }; - let signers = signers.expect("Signers is NULL"); + let signers = ffi_param_ref!(signers); let signers = unsafe { slice::from_raw_parts(signers, signers_len) }; @@ -1206,7 +1206,7 @@ pub extern "system" fn sq_signer_new_detached signers: Option<&&'static TPK>, signers_len: size_t) -> *mut writer::Stack<'static, Cookie> { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!inner.is_null()); let inner = unsafe { Box::from_raw(inner) @@ -1228,7 +1228,7 @@ pub extern "system" fn sq_literal_writer_new inner: *mut writer::Stack<'static, Cookie>) -> *mut writer::Stack<'static, Cookie> { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!inner.is_null()); let inner = unsafe { Box::from_raw(inner) @@ -1256,7 +1256,7 @@ pub extern "system" fn sq_encryptor_new encryption_mode: uint8_t) -> *mut writer::Stack<'static, Cookie> { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!inner.is_null()); let inner = unsafe { Box::from_raw(inner) @@ -1349,9 +1349,9 @@ pub fn sq_verification_results_at_level<'a>(results: Option<&'a VerificationResu level: size_t, r: Option<&mut *const &'a VerificationResult>, r_count: Option<&mut size_t>) { - let results = results.expect("results is NULL"); - let r = r.expect("r is NULL"); - let r_count = r_count.expect("r_count is NULL"); + let results = ffi_param_ref!(results); + let r = ffi_param_ref!(r); + let r_count = ffi_param_ref!(r_count); assert!(level < results.results.len()); @@ -1367,7 +1367,7 @@ pub fn sq_verification_results_at_level<'a>(results: Option<&'a VerificationResu pub fn sq_verification_result_code(result: Option<&VerificationResult>) -> c_int { - let result = result.expect("result is NULL"); + let result = ffi_param_ref!(result); match result { VerificationResult::GoodChecksum(_) => 1, VerificationResult::MissingKey(_) => 2, @@ -1380,7 +1380,7 @@ pub fn sq_verification_result_code(result: Option<&VerificationResult>) pub fn sq_verification_result_signature(result: Option<&VerificationResult>) -> *const packet::Signature { - let result = result.expect("result is NULL"); + let result = ffi_param_ref!(result); let sig = match result { VerificationResult::GoodChecksum(ref sig) => sig, VerificationResult::MissingKey(ref sig) => sig, @@ -1395,7 +1395,7 @@ pub fn sq_verification_result_signature(result: Option<&VerificationResult>) pub fn sq_verification_result_level(result: Option<&VerificationResult>) -> c_int { - let result = result.expect("result is NULL"); + let result = ffi_param_ref!(result); result.level() as c_int } @@ -1579,8 +1579,8 @@ pub fn sq_verify<'a>(ctx: Option<&mut Context>, cookie: *mut HelperCookie) -> Status { - let ctx = ctx.expect("Context is NULL"); - let input = input.expect("Input is NULL"); + let ctx = ffi_param_ref!(ctx); + let input = ffi_param_ref!(input); let r = verify_real(input, dsig, output, get_public_keys, check_signatures, cookie); @@ -1704,9 +1704,9 @@ pub fn sq_decrypt<'a>(ctx: Option<&mut Context>, cookie: *mut HelperCookie) -> Status { - let ctx = ctx.expect("Context is NULL"); - let input = input.expect("Input is NULL"); - let output = output.expect("Output is NULL"); + let ctx = ffi_param_ref!(ctx); + let input = ffi_param_ref!(input); + let output = ffi_param_ref!(output); let r = decrypt_real(input, output, get_public_keys, get_secret_keys, check_signatures, cookie); diff --git a/ffi/src/openpgp/packet_pile.rs b/ffi/src/openpgp/packet_pile.rs index 552152db..5ba19961 100644 --- a/ffi/src/openpgp/packet_pile.rs +++ b/ffi/src/openpgp/packet_pile.rs @@ -34,8 +34,8 @@ use ::error::Status; pub extern "system" fn sq_packet_pile_from_reader(ctx: Option<&mut Context>, reader: Option<&mut Box>) -> *mut PacketPile { - let ctx = ctx.expect("Context is NULL"); - let reader = reader.expect("Reader is NULL"); + let ctx = ffi_param_ref!(ctx); + let reader = ffi_param_ref!(reader); fry_box!(ctx, PacketPile::from_reader(reader)) } @@ -47,7 +47,7 @@ pub extern "system" fn sq_packet_pile_from_reader(ctx: Option<&mut Context>, pub extern "system" fn sq_packet_pile_from_file(ctx: Option<&mut Context>, filename: *const c_char) -> *mut PacketPile { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! filename.is_null()); let filename = unsafe { CStr::from_ptr(filename).to_string_lossy().into_owned() @@ -62,7 +62,7 @@ pub extern "system" fn sq_packet_pile_from_file(ctx: Option<&mut Context>, pub extern "system" fn sq_packet_pile_from_bytes(ctx: Option<&mut Context>, b: *const uint8_t, len: size_t) -> *mut PacketPile { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!b.is_null()); let buf = unsafe { slice::from_raw_parts(b, len as usize) @@ -81,7 +81,7 @@ pub extern "system" fn sq_packet_pile_free(packet_pile: *mut PacketPile) { #[no_mangle] pub extern "system" fn sq_packet_pile_clone(packet_pile: Option<&PacketPile>) -> *mut PacketPile { - let packet_pile = packet_pile.expect("PacketPile is NULL"); + let packet_pile = ffi_param_ref!(packet_pile); box_raw!(packet_pile.clone()) } @@ -91,8 +91,8 @@ pub extern "system" fn sq_packet_pile_serialize(ctx: Option<&mut Context>, packet_pile: Option<&PacketPile>, writer: Option<&mut Box>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let packet_pile = packet_pile.expect("PacketPile is NULL"); - let writer = writer.expect("Writer is NULL"); + let ctx = ffi_param_ref!(ctx); + let packet_pile = ffi_param_ref!(packet_pile); + let writer = ffi_param_ref!(writer); fry_status!(ctx, packet_pile.serialize(writer)) } diff --git a/ffi/src/openpgp/tpk.rs b/ffi/src/openpgp/tpk.rs index 49d6513b..23a11b22 100644 --- a/ffi/src/openpgp/tpk.rs +++ b/ffi/src/openpgp/tpk.rs @@ -42,8 +42,8 @@ use ::error::Status; pub extern "system" fn sq_tpk_from_reader(ctx: Option<&mut Context>, reader: Option<&mut Box>) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); - let reader = reader.expect("Reader is NULL"); + let ctx = ffi_param_ref!(ctx); + let reader = ffi_param_ref!(reader); fry_box!(ctx, TPK::from_reader(reader)) } @@ -52,7 +52,7 @@ pub extern "system" fn sq_tpk_from_reader(ctx: Option<&mut Context>, pub extern "system" fn sq_tpk_from_file(ctx: Option<&mut Context>, filename: *const c_char) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! filename.is_null()); let filename = unsafe { CStr::from_ptr(filename).to_string_lossy().into_owned() @@ -67,7 +67,7 @@ pub extern "system" fn sq_tpk_from_file(ctx: Option<&mut Context>, pub extern "system" fn sq_tpk_from_packet_pile(ctx: Option<&mut Context>, m: *mut PacketPile) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! m.is_null()); let m = unsafe { Box::from_raw(m) }; fry_box!(ctx, TPK::from_packet_pile(*m)) @@ -80,7 +80,7 @@ pub extern "system" fn sq_tpk_from_packet_pile(ctx: Option<&mut Context>, pub extern "system" fn sq_tpk_from_bytes(ctx: Option<&mut Context>, b: *const uint8_t, len: size_t) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!b.is_null()); let buf = unsafe { slice::from_raw_parts(b, len as usize) @@ -97,7 +97,7 @@ pub extern "system" fn sq_tpk_from_packet_parser(ctx: Option<&mut Context>, ppr: *mut PacketParserResult) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! ppr.is_null()); let ppr = unsafe { Box::from_raw(ppr) }; @@ -114,7 +114,7 @@ pub extern "system" fn sq_tpk_free(tpk: *mut TPK) { #[no_mangle] pub extern "system" fn sq_tpk_clone(tpk: Option<&TPK>) -> *mut TPK { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); box_raw!(tpk.clone()) } @@ -134,9 +134,9 @@ pub extern "system" fn sq_tpk_serialize(ctx: Option<&mut Context>, tpk: Option<&TPK>, writer: Option<&mut Box>) -> Status { - let ctx = ctx.expect("Context is NULL"); - let tpk = tpk.expect("TPK is NULL"); - let writer = writer.expect("Writer is NULL"); + let ctx = ffi_param_ref!(ctx); + let tpk = ffi_param_ref!(tpk); + let writer = ffi_param_ref!(writer); fry_status!(ctx, tpk.serialize(writer)) } @@ -151,7 +151,7 @@ pub extern "system" fn sq_tpk_merge(ctx: Option<&mut Context>, tpk: *mut TPK, other: *mut TPK) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! tpk.is_null()); let tpk = unsafe { Box::from_raw(tpk) }; assert!(! other.is_null()); @@ -172,7 +172,7 @@ pub extern "system" fn sq_tpk_merge_packets(ctx: Option<&mut Context>, packets: *mut *mut Packet, packets_len: size_t) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! tpk.is_null()); let tpk = unsafe { Box::from_raw(tpk) }; let packets = unsafe { @@ -188,7 +188,7 @@ pub extern "system" fn sq_tpk_merge_packets(ctx: Option<&mut Context>, /// XXX Remove this. #[no_mangle] pub extern "system" fn sq_tpk_dump(tpk: Option<&TPK>) { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); println!("{:?}", *tpk); } @@ -196,7 +196,7 @@ pub extern "system" fn sq_tpk_dump(tpk: Option<&TPK>) { #[no_mangle] pub extern "system" fn sq_tpk_fingerprint(tpk: Option<&TPK>) -> *mut Fingerprint { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); box_raw!(tpk.fingerprint()) } @@ -219,7 +219,7 @@ pub extern "system" fn sq_tpk_into_tsk(tpk: *mut TPK) #[no_mangle] pub extern "system" fn sq_tpk_primary(tpk: Option<&TPK>) -> Option<&packet::Key> { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); Some(tpk.primary()) } @@ -231,7 +231,7 @@ pub extern "system" fn sq_tpk_primary(tpk: Option<&TPK>) #[no_mangle] pub extern "system" fn sq_tpk_revocation_status(tpk: Option<&TPK>) -> *mut RevocationStatus { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); box_raw!(tpk.revoked()) } @@ -295,8 +295,8 @@ pub extern "system" fn sq_tpk_revoke(ctx: Option<&mut Context>, reason: Option<*const c_char>) -> *mut packet::Signature { - let ctx = ctx.expect("Context is NULL"); - let tpk = tpk.expect("TPK is NULL"); + let ctx = ffi_param_ref!(ctx); + let tpk = ffi_param_ref!(tpk); let code = int_to_reason_for_revocation(code); let reason = if let Some(reason) = reason { unsafe { @@ -351,7 +351,7 @@ pub extern "system" fn sq_tpk_revoke_in_place(ctx: Option<&mut Context>, reason: Option<*const c_char>) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!tpk.is_null()); let tpk = unsafe { Box::from_raw(tpk) @@ -372,7 +372,7 @@ pub extern "system" fn sq_tpk_revoke_in_place(ctx: Option<&mut Context>, #[no_mangle] pub extern "system" fn sq_tpk_expired(tpk: Option<&TPK>) -> c_int { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); tpk.expired() as c_int } @@ -381,7 +381,7 @@ pub extern "system" fn sq_tpk_expired(tpk: Option<&TPK>) #[no_mangle] pub extern "system" fn sq_tpk_expired_at(tpk: Option<&TPK>, when: time_t) -> c_int { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); tpk.expired_at(time::at(time::Timespec::new(when as i64, 0))) as c_int } @@ -389,7 +389,7 @@ pub extern "system" fn sq_tpk_expired_at(tpk: Option<&TPK>, when: time_t) #[no_mangle] pub extern "system" fn sq_tpk_alive(tpk: Option<&TPK>) -> c_int { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); tpk.alive() as c_int } @@ -398,7 +398,7 @@ pub extern "system" fn sq_tpk_alive(tpk: Option<&TPK>) #[no_mangle] pub extern "system" fn sq_tpk_alive_at(tpk: Option<&TPK>, when: time_t) -> c_int { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); tpk.alive_at(time::at(time::Timespec::new(when as i64, 0))) as c_int } @@ -412,7 +412,7 @@ pub extern "system" fn sq_tpk_alive_at(tpk: Option<&TPK>, when: time_t) pub extern "system" fn sq_tpk_set_expiry(ctx: Option<&mut Context>, tpk: *mut TPK, expiry: u32) -> *mut TPK { - let ctx = ctx.expect("CTX is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!tpk.is_null()); let tpk = unsafe { Box::from_raw(tpk) @@ -425,7 +425,7 @@ pub extern "system" fn sq_tpk_set_expiry(ctx: Option<&mut Context>, #[no_mangle] pub extern "system" fn sq_tpk_is_tsk(tpk: Option<&TPK>) -> c_int { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); tpk.is_tsk() as c_int } @@ -434,7 +434,7 @@ pub extern "system" fn sq_tpk_is_tsk(tpk: Option<&TPK>) pub extern "system" fn sq_tpk_primary_user_id(tpk: Option<&TPK>) -> *mut c_char { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); if let Some(binding) = tpk.userids().nth(0) { CString::new(binding.userid().userid()) .unwrap() // Errors only on internal nul bytes. @@ -458,7 +458,7 @@ pub extern "system" fn sq_user_id_binding_user_id( binding: Option<&UserIDBinding>) -> *mut c_char { - let binding = binding.expect("Binding is NULL"); + let binding = ffi_param_ref!(binding); if let Ok(c_str) = CString::new(binding.userid().userid()) { c_str.into_raw() @@ -473,7 +473,7 @@ pub extern "system" fn sq_user_id_binding_selfsig( binding: Option<&UserIDBinding>) -> Option<&Signature> { - let binding = binding.expect("Binding is NULL"); + let binding = ffi_param_ref!(binding); binding.binding_signature() } @@ -485,7 +485,7 @@ pub extern "system" fn sq_user_id_binding_selfsig( pub extern "system" fn sq_tpk_user_id_binding_iter(tpk: Option<&TPK>) -> *mut UserIDBindingIter { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); box_raw!(tpk.userids()) } @@ -503,7 +503,7 @@ pub extern "system" fn sq_user_id_binding_iter_next<'a>( iter: Option<&mut UserIDBindingIter<'a>>) -> Option<&'a UserIDBinding> { - let iter = iter.expect("Iterator is NULL"); + let iter = ffi_param_ref!(iter); iter.next() } @@ -522,7 +522,7 @@ pub struct KeyIterWrapper<'a> { pub extern "system" fn sq_tpk_key_iter(tpk: Option<&TPK>) -> *mut KeyIterWrapper { - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); box_raw!(KeyIterWrapper { iter: tpk.keys(), rso: None, @@ -553,7 +553,7 @@ pub extern "system" fn sq_tpk_key_iter_next<'a>( rso: Option<&mut &'a RevocationStatus<'a>>) -> Option<&'a packet::Key> { - let iter_wrapper = iter_wrapper.expect("Iterator is NULL"); + let iter_wrapper = ffi_param_ref!(iter_wrapper); iter_wrapper.rso = None; if let Some((sig, rs, key)) = iter_wrapper.iter.next() { @@ -625,7 +625,7 @@ pub extern "system" fn sq_tpk_builder_set_cipher_suite (tpkb: Option<&mut *mut TPKBuilder>, cs: c_int) { use self::CipherSuite::*; - let tpkb = tpkb.expect("TPKB is NULL"); + let tpkb = ffi_param_ref!(tpkb); assert!(! tpkb.is_null()); let tpkb_ = unsafe { Box::from_raw(*tpkb) }; let cs = match cs { @@ -643,7 +643,7 @@ pub extern "system" fn sq_tpk_builder_set_cipher_suite pub extern "system" fn sq_tpk_builder_add_userid (tpkb: Option<&mut *mut TPKBuilder>, uid: *const c_char) { - let tpkb = tpkb.expect("TPKB is NULL"); + let tpkb = ffi_param_ref!(tpkb); assert!(!tpkb.is_null()); let tpkb_ = unsafe { Box::from_raw(*tpkb) }; let uid = unsafe { CStr::from_ptr(uid).to_string_lossy().to_string() }; @@ -656,7 +656,7 @@ pub extern "system" fn sq_tpk_builder_add_userid pub extern "system" fn sq_tpk_builder_add_signing_subkey (tpkb: Option<&mut *mut TPKBuilder>) { - let tpkb = tpkb.expect("TPKB is NULL"); + let tpkb = ffi_param_ref!(tpkb); assert!(!tpkb.is_null()); let tpkb_ = unsafe { Box::from_raw(*tpkb) }; let tpkb_ = tpkb_.add_signing_subkey(); @@ -668,7 +668,7 @@ pub extern "system" fn sq_tpk_builder_add_signing_subkey pub extern "system" fn sq_tpk_builder_add_encryption_subkey (tpkb: Option<&mut *mut TPKBuilder>) { - let tpkb = tpkb.expect("TPKB is NULL"); + let tpkb = ffi_param_ref!(tpkb); assert!(!tpkb.is_null()); let tpkb_ = unsafe { Box::from_raw(*tpkb) }; let tpkb_ = tpkb_.add_encryption_subkey(); @@ -680,7 +680,7 @@ pub extern "system" fn sq_tpk_builder_add_encryption_subkey pub extern "system" fn sq_tpk_builder_add_certification_subkey (tpkb: Option<&mut *mut TPKBuilder>) { - let tpkb = tpkb.expect("TPKB is NULL"); + let tpkb = ffi_param_ref!(tpkb); assert!(!tpkb.is_null()); let tpkb_ = unsafe { Box::from_raw(*tpkb) }; let tpkb_ = tpkb_.add_certification_subkey(); @@ -697,10 +697,10 @@ pub extern "system" fn sq_tpk_builder_generate revocation_out: Option<&mut *mut Signature>) -> Status { - let ctx = ctx.expect("CTX is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(!tpkb.is_null()); - let tpk_out = tpk_out.expect("TPK is NULL"); - let revocation_out = revocation_out.expect("REVOCATION is NULL"); + let tpk_out = ffi_param_ref!(tpk_out); + let revocation_out = ffi_param_ref!(revocation_out); let tpkb = unsafe { Box::from_raw(tpkb) }; match tpkb.generate() { Ok((tpk, revocation)) => { diff --git a/ffi/src/store.rs b/ffi/src/store.rs index 4a248a35..c7a8944d 100644 --- a/ffi/src/store.rs +++ b/ffi/src/store.rs @@ -47,7 +47,7 @@ use super::core::{Context, sq_string_free}; pub extern "system" fn sq_store_list_stores(ctx: Option<&mut Context>, domain_prefix: *const c_char) -> *mut StoreIter { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! domain_prefix.is_null()); let domain_prefix = unsafe { @@ -69,7 +69,7 @@ pub extern "system" fn sq_store_iter_next(iter: Option<&mut StoreIter>, namep: Option<&mut *mut c_char>, policyp: Option<&mut uint8_t>) -> *mut Store { - let iter = iter.expect("Iterator is NULL"); + let iter = ffi_param_ref!(iter); match iter.next() { Some((domain, name, policy, store)) => { if domainp.is_some() { @@ -104,7 +104,7 @@ pub extern "system" fn sq_store_iter_free(iter: *mut StoreIter) { #[no_mangle] pub extern "system" fn sq_store_list_keys(ctx: Option<&mut Context>) -> *mut KeyIter { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); fry_box!(ctx, Store::list_keys(&ctx.c)) } @@ -113,7 +113,7 @@ pub extern "system" fn sq_store_list_keys(ctx: Option<&mut Context>) #[no_mangle] pub extern "system" fn sq_store_server_log(ctx: Option<&mut Context>) -> *mut LogIter { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); fry_box!(ctx, Store::server_log(&ctx.c)) } @@ -126,7 +126,7 @@ pub extern "system" fn sq_store_server_log(ctx: Option<&mut Context>) pub extern "system" fn sq_key_iter_next(iter: Option<&mut KeyIter>, fpp: Option<&mut *mut Fingerprint>) -> *mut Key { - let iter = iter.expect("Iterator is NULL"); + let iter = ffi_param_ref!(iter); match iter.next() { Some((fingerprint, key)) => { if fpp.is_some() { @@ -159,7 +159,7 @@ fn cstring(s: &str) -> *mut c_char { #[no_mangle] pub extern "system" fn sq_log_iter_next(iter: Option<&mut LogIter>) -> *mut Log { - let iter = iter.expect("Iterator is NULL"); + let iter = ffi_param_ref!(iter); match iter.next() { Some(e) => { let (status, error) = match e.status { @@ -202,7 +202,7 @@ pub extern "system" fn sq_log_iter_free(iter: *mut LogIter) { pub extern "system" fn sq_store_open(ctx: Option<&mut Context>, name: *const c_char) -> *mut Store { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! name.is_null()); let name = unsafe { @@ -225,13 +225,13 @@ pub extern "system" fn sq_store_add(ctx: Option<&mut Context>, label: *const c_char, fingerprint: Option<&Fingerprint>) -> *mut Binding { - let ctx = ctx.expect("Context is NULL"); - let store = store.expect("Store is NULL"); + let ctx = ffi_param_ref!(ctx); + let store = ffi_param_ref!(store); assert!(! label.is_null()); let label = unsafe { CStr::from_ptr(label).to_string_lossy() }; - let fingerprint = fingerprint.expect("Fingerprint is NULL"); + let fingerprint = ffi_param_ref!(fingerprint); fry_box!(ctx, store.add(&label, fingerprint)) } @@ -243,13 +243,13 @@ pub extern "system" fn sq_store_import(ctx: Option<&mut Context>, label: *const c_char, tpk: Option<&TPK>) -> *mut TPK { - let ctx = ctx.expect("Context is NULL"); - let store = store.expect("Store is NULL"); + let ctx = ffi_param_ref!(ctx); + let store = ffi_param_ref!(store); assert!(! label.is_null()); let label = unsafe { CStr::from_ptr(label).to_string_lossy() }; - let tpk = tpk.expect("TPK is NULL"); + let tpk = ffi_param_ref!(tpk); fry_box!(ctx, store.import(&label, tpk)) } @@ -260,8 +260,8 @@ pub extern "system" fn sq_store_lookup(ctx: Option<&mut Context>, store: Option<&Store>, label: *const c_char) -> *mut Binding { - let ctx = ctx.expect("Context is NULL"); - let store = store.expect("Store is NULL"); + let ctx = ffi_param_ref!(ctx); + let store = ffi_param_ref!(store); assert!(! label.is_null()); let label = unsafe { CStr::from_ptr(label).to_string_lossy() @@ -276,8 +276,8 @@ pub extern "system" fn sq_store_lookup_by_keyid(ctx: Option<&mut Context>, keyid: Option<&KeyID>) -> *mut Key { - let ctx = ctx.expect("Context is NULL"); - let keyid = keyid.expect("KeyID is NULL"); + let ctx = ffi_param_ref!(ctx); + let keyid = ffi_param_ref!(keyid); fry_box!(ctx, Pool::lookup_by_keyid(&ctx.c, keyid)) } @@ -288,8 +288,8 @@ pub extern "system" fn sq_store_lookup_by_subkeyid(ctx: Option<&mut Context>, keyid: Option<&KeyID>) -> *mut Key { - let ctx = ctx.expect("Context is NULL"); - let keyid = keyid.expect("KeyID is NULL"); + let ctx = ffi_param_ref!(ctx); + let keyid = ffi_param_ref!(keyid); fry_box!(ctx, Pool::lookup_by_subkeyid(&ctx.c, keyid)) } @@ -301,7 +301,7 @@ pub extern "system" fn sq_store_lookup_by_subkeyid(ctx: Option<&mut Context>, pub extern "system" fn sq_store_delete(ctx: Option<&mut Context>, store: *mut Store) -> Status { - let ctx = ctx.expect("Context is NULL"); + let ctx = ffi_param_ref!(ctx); assert!(! store.is_null()); let store = unsafe { Box::from_raw(store) @@ -315,8 +315,8 @@ pub extern "system" fn sq_store_delete(ctx: Option<&mut Context>, pub extern "system" fn sq_store_iter(ctx: Option<&mut Context>, store: Option<&Store>) -> *mut BindingIter { - let ctx = ctx.expect("Context is NULL"); - let store = store.expect("Store is NULL"); + let ctx = ffi_param_ref!(ctx); + let store = ffi_param_ref!(store); fry_box!(ctx, store.iter()) } @@ -331,7 +331,7 @@ pub extern "system" fn sq_binding_iter_next(iter: Option<&mut BindingIter>, labelp: Option<&mut *mut c_char>, fpp: Option<&mut *mut Fingerprint>) -> *mut Binding { - let iter = iter.expect("Iterator is NULL"); + let iter = ffi_param_ref!(iter); match iter.next() { Some((label, fp, binding)) => { if labelp.is_some() { @@ -361,8 +361,8 @@ pub extern "system" fn sq_binding_iter_free(iter: *mut BindingIter) { pub extern "system" fn sq_st