Skip to content

Commit 32226f5

Browse files
author
Gleb Pomykalov
committed
Include if_alg.h. Limit AF_ALG constants to only linux and android.
1 parent 4a6cb83 commit 32226f5

File tree

2 files changed

+74
-13
lines changed

2 files changed

+74
-13
lines changed

libc-test/build.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ fn do_ctest() {
102102
cfg.header("net/route.h");
103103
cfg.header("net/if_arp.h");
104104
}
105+
if linux || android {
106+
cfg.header("linux/if_alg.h");
107+
}
105108
cfg.header("netdb.h");
106109
cfg.header("netinet/in.h");
107110
cfg.header("netinet/ip.h");

src/unix/notbsd/mod.rs

Lines changed: 71 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,13 @@ s! {
209209
pub ar_pln: u8,
210210
pub ar_op: u16,
211211
}
212+
213+
#[cfg(any(target_os = "linux", target_os = "android"))]
214+
pub struct af_alg_iv {
215+
pub ivlen: u32,
216+
pub iv: [::c_uchar; 0],
217+
}
218+
212219
}
213220

214221
s_no_extra_traits!{
@@ -240,19 +247,6 @@ s_no_extra_traits!{
240247
__ss_pad2: [u8; 128 - 2 * 8],
241248
}
242249

243-
pub struct sockaddr_alg {
244-
pub salg_family: sa_family_t,
245-
pub salg_type: [::c_uchar; 14],
246-
pub salg_feat: u32,
247-
pub salg_mask: u32,
248-
pub salg_name: [::c_uchar; 64],
249-
}
250-
251-
pub struct af_alg_iv {
252-
pub ivlen: u32,
253-
pub iv: [::c_uchar; 0],
254-
}
255-
256250
pub struct utsname {
257251
pub sysname: [::c_char; 65],
258252
pub nodename: [::c_char; 65],
@@ -261,6 +255,16 @@ s_no_extra_traits!{
261255
pub machine: [::c_char; 65],
262256
pub domainname: [::c_char; 65]
263257
}
258+
259+
#[cfg(any(target_os = "linux", target_os = "android"))]
260+
pub struct sockaddr_alg {
261+
pub salg_family: sa_family_t,
262+
pub salg_type: [::c_uchar; 14],
263+
pub salg_feat: u32,
264+
pub salg_mask: u32,
265+
pub salg_name: [::c_uchar; 64],
266+
}
267+
264268
}
265269

266270
cfg_if! {
@@ -324,6 +328,52 @@ cfg_if! {
324328
}
325329
}
326330

331+
#[cfg(any(target_os = "linux", target_os = "android"))]
332+
impl PartialEq for sockaddr_alg {
333+
fn eq(&self, other: &sockaddr_alg) -> bool {
334+
self.salg_family == other.salg_family
335+
&& self
336+
.salg_type
337+
.iter()
338+
.zip(other.salg_type.iter())
339+
.all(|(a, b)| a == b)
340+
&& self.salg_feat == other.salg_feat
341+
&& self.salg_mask == other.salg_mask
342+
&& self
343+
.salg_name
344+
.iter()
345+
.zip(other.salg_name.iter())
346+
.all(|(a, b)| a == b)
347+
}
348+
}
349+
350+
#[cfg(any(target_os = "linux", target_os = "android"))]
351+
impl Eq for sockaddr_alg {}
352+
353+
#[cfg(any(target_os = "linux", target_os = "android"))]
354+
impl ::fmt::Debug for sockaddr_alg {
355+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
356+
f.debug_struct("sockaddr_alg")
357+
.field("salg_family", &self.salg_family)
358+
// .field("salg_type", &self.salg_type)
359+
.field("salg_feat", &self.salg_feat)
360+
.field("salg_mask", &self.salg_mask)
361+
// .field("salg_name", &self.salg_name)
362+
.finish()
363+
}
364+
}
365+
366+
#[cfg(any(target_os = "linux", target_os = "android"))]
367+
impl ::hash::Hash for sockaddr_alg {
368+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
369+
self.salg_family.hash(state);
370+
self.salg_type.hash(state);
371+
self.salg_feat.hash(state);
372+
self.salg_mask.hash(state);
373+
self.salg_name.hash(state);
374+
}
375+
}
376+
327377
impl PartialEq for utsname {
328378
fn eq(&self, other: &utsname) -> bool {
329379
self.sysname
@@ -670,6 +720,7 @@ pub const SOL_DCCP: ::c_int = 269;
670720
pub const SOL_NETLINK: ::c_int = 270;
671721
pub const SOL_TIPC: ::c_int = 271;
672722
pub const SOL_BLUETOOTH: ::c_int = 274;
723+
#[cfg(any(target_os = "linux", target_os = "android"))]
673724
pub const SOL_ALG: ::c_int = 279;
674725

675726
pub const AF_UNSPEC: ::c_int = 0;
@@ -1142,13 +1193,20 @@ pub const ARPHRD_IEEE802154: u16 = 804;
11421193
pub const ARPHRD_VOID: u16 = 0xFFFF;
11431194
pub const ARPHRD_NONE: u16 = 0xFFFE;
11441195

1196+
#[cfg(any(target_os = "linux", target_os = "android"))]
11451197
pub const ALG_SET_KEY: ::c_int = 1;
1198+
#[cfg(any(target_os = "linux", target_os = "android"))]
11461199
pub const ALG_SET_IV: ::c_int = 2;
1200+
#[cfg(any(target_os = "linux", target_os = "android"))]
11471201
pub const ALG_SET_OP: ::c_int = 3;
1202+
#[cfg(any(target_os = "linux", target_os = "android"))]
11481203
pub const ALG_SET_AEAD_ASSOCLEN: ::c_int = 4;
1204+
#[cfg(any(target_os = "linux", target_os = "android"))]
11491205
pub const ALG_SET_AEAD_AUTHSIZE: ::c_int = 5;
11501206

1207+
#[cfg(any(target_os = "linux", target_os = "android"))]
11511208
pub const ALG_OP_DECRYPT: ::c_int = 0;
1209+
#[cfg(any(target_os = "linux", target_os = "android"))]
11521210
pub const ALG_OP_ENCRYPT: ::c_int = 1;
11531211

11541212
fn CMSG_ALIGN(len: usize) -> usize {

0 commit comments

Comments
 (0)