aboutsummaryrefslogtreecommitdiff
path: root/src/rust/protover/ffi.rs
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-05-22 13:35:33 -0400
committerNick Mathewson <nickm@torproject.org>2018-05-22 13:35:33 -0400
commitcde5c9d0c335e51c254251f018e9de620c27d9db (patch)
tree9fc9d257e215e8623b9118c925d54a69eb5915b8 /src/rust/protover/ffi.rs
parentb858f576c327f4fd0a2ead16dc6d6bf7b721829a (diff)
parenta5d4ce2b393955f60962d3db8744a846506c3e7b (diff)
downloadtor-cde5c9d0c335e51c254251f018e9de620c27d9db.tar.gz
tor-cde5c9d0c335e51c254251f018e9de620c27d9db.zip
Merge branch 'maint-0.3.3'
Diffstat (limited to 'src/rust/protover/ffi.rs')
-rw-r--r--src/rust/protover/ffi.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs
index 1e0d9d6bff..e3e545db75 100644
--- a/src/rust/protover/ffi.rs
+++ b/src/rust/protover/ffi.rs
@@ -113,6 +113,32 @@ pub extern "C" fn protocol_list_supports_protocol(
}
}
+#[no_mangle]
+pub extern "C" fn protover_contains_long_protocol_names_(
+ c_protocol_list: *const c_char
+) -> c_int {
+ if c_protocol_list.is_null() {
+ return 1;
+ }
+
+ // Require an unsafe block to read the version from a C string. The pointer
+ // is checked above to ensure it is not null.
+ let c_str: &CStr = unsafe { CStr::from_ptr(c_protocol_list) };
+
+ let protocol_list = match c_str.to_str() {
+ Ok(n) => n,
+ Err(_) => return 1
+ };
+
+ let protocol_entry : Result<UnvalidatedProtoEntry,_> =
+ protocol_list.parse();
+
+ match protocol_entry {
+ Ok(_) => 0,
+ Err(_) => 1,
+ }
+}
+
/// Provide an interface for C to translate arguments and return types for
/// protover::list_supports_protocol_or_later
#[no_mangle]