add cstr function for safe bindings
This commit is contained in:
parent
e0f6421800
commit
8a99f2ed12
|
@ -155,14 +155,18 @@ impl<'a, T> Deref for ModuleQstateMut<'a, T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsafe fn cstr<'a>(ptr: *const c_char) -> Option<&'a CStr> {
|
||||||
|
if ptr.is_null() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(CStr::from_ptr(ptr))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> QueryInfo<'a> {
|
impl<'a> QueryInfo<'a> {
|
||||||
#[doc = " Salient data on the query: qname, in wireformat.\n can be allocated or a pointer to outside buffer.\n User has to keep track on the status of this."]
|
#[doc = " Salient data on the query: qname, in wireformat.\n can be allocated or a pointer to outside buffer.\n User has to keep track on the status of this."]
|
||||||
pub fn qname(&self) -> Option<&CStr> {
|
pub fn qname(&self) -> Option<&CStr> {
|
||||||
if unsafe { (*self.as_ptr()).qname.is_null() } {
|
unsafe { cstr((*self.as_ptr()).qname.cast_const().cast()) }
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(unsafe { CStr::from_ptr((*self.as_ptr()).qname as *const c_char) })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#[doc = " qtype, host byte order"]
|
#[doc = " qtype, host byte order"]
|
||||||
pub fn qtype(&self) -> u16 {
|
pub fn qtype(&self) -> u16 {
|
||||||
|
@ -458,11 +462,7 @@ impl ReplyInfo<'_> {
|
||||||
}
|
}
|
||||||
#[doc = " EDE (rfc8914) NULL-terminated string with human-readable reason\n for DNSSEC bogus status.\n Used for caching the EDE."]
|
#[doc = " EDE (rfc8914) NULL-terminated string with human-readable reason\n for DNSSEC bogus status.\n Used for caching the EDE."]
|
||||||
pub fn reason_bogus_str(&self) -> Option<&CStr> {
|
pub fn reason_bogus_str(&self) -> Option<&CStr> {
|
||||||
if unsafe { (*self.as_ptr()).reason_bogus_str.is_null() } {
|
unsafe { cstr((*self.as_ptr()).reason_bogus_str) }
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(unsafe { CStr::from_ptr((*self.as_ptr()).reason_bogus_str) })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#[doc = " Number of RRsets in each section.\n The answer section. Add up the RRs in every RRset to calculate\n the number of RRs, and the count for the dns packet.\n The number of RRs in RRsets can change due to RRset updates."]
|
#[doc = " Number of RRsets in each section.\n The answer section. Add up the RRs in every RRset to calculate\n the number of RRs, and the count for the dns packet.\n The number of RRs in RRsets can change due to RRset updates."]
|
||||||
pub fn an_numrrsets(&self) -> usize {
|
pub fn an_numrrsets(&self) -> usize {
|
||||||
|
@ -506,11 +506,7 @@ impl UbPackedRrsetKey<'_> {
|
||||||
impl PackedRrsetKey<'_> {
|
impl PackedRrsetKey<'_> {
|
||||||
#[doc = " The domain name. If not null (for id=0) it is allocated, and\n contains the wireformat domain name.\n This dname is not canonicalized."]
|
#[doc = " The domain name. If not null (for id=0) it is allocated, and\n contains the wireformat domain name.\n This dname is not canonicalized."]
|
||||||
pub fn dname(&self) -> Option<&'_ CStr> {
|
pub fn dname(&self) -> Option<&'_ CStr> {
|
||||||
if unsafe { (*self.as_ptr()).dname.is_null() } {
|
unsafe { cstr((*self.as_ptr()).dname.cast_const().cast()) }
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(unsafe { CStr::from_ptr((*self.as_ptr()).dname as *const c_char) })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#[doc = " Flags. 32bit to be easy for hashing:\n \to PACKED_RRSET_NSEC_AT_APEX\n \to PACKED_RRSET_PARENT_SIDE\n \to PACKED_RRSET_SOA_NEG\n \to PACKED_RRSET_FIXEDTTL (not supposed to be cached)\n \to PACKED_RRSET_RPZ"]
|
#[doc = " Flags. 32bit to be easy for hashing:\n \to PACKED_RRSET_NSEC_AT_APEX\n \to PACKED_RRSET_PARENT_SIDE\n \to PACKED_RRSET_SOA_NEG\n \to PACKED_RRSET_FIXEDTTL (not supposed to be cached)\n \to PACKED_RRSET_RPZ"]
|
||||||
pub fn flags(&self) -> u32 {
|
pub fn flags(&self) -> u32 {
|
||||||
|
|
Loading…
Reference in a new issue