Skip to content

Commit e72740e

Browse files
committed
Add optional zerocopy trait derives
1 parent 43f0c3e commit e72740e

File tree

6 files changed

+57
-0
lines changed

6 files changed

+57
-0
lines changed

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ cargo-args = ["-Zbuild-std=core"]
130130

131131
[dependencies]
132132
rustc-std-workspace-core = { version = "1.0.0", optional = true }
133+
zerocopy = { version = "0.7.15", optional = true, features = ["derive"] }
133134

134135
[features]
135136
default = ["std"]

src/lib.rs

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
#![cfg_attr(feature = "rustc-dep-of-std", no_core)]
2525
#![cfg_attr(libc_const_extern_fn_unstable, feature(const_extern_fn))]
2626

27+
#[cfg(feature = "zerocopy")]
28+
#[macro_use]
29+
extern crate zerocopy;
30+
2731
#[macro_use]
2832
mod macros;
2933

src/unix/aix/mod.rs

+39
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,29 @@ e! {
7171
}
7272

7373
s! {
74+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
7475
pub struct fsid_t {
7576
pub val: [::c_uint; 2],
7677
}
7778

79+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
7880
pub struct fsid64_t {
7981
pub val: [::uint64_t; 2],
8082
}
8183

84+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
8285
pub struct timezone {
8386
pub tz_minuteswest: ::c_int,
8487
pub tz_dsttime: ::c_int,
8588
}
8689

90+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
8791
pub struct ip_mreq {
8892
pub imr_multiaddr: in_addr,
8993
pub imr_interface: in_addr,
9094
}
9195

96+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
9297
pub struct dirent {
9398
pub d_offset: ::c_ulong,
9499
pub d_ino: ::ino_t,
@@ -97,6 +102,7 @@ s! {
97102
pub d_name: [::c_char; 256]
98103
}
99104

105+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
100106
pub struct termios {
101107
pub c_iflag: ::tcflag_t,
102108
pub c_oflag: ::tcflag_t,
@@ -105,6 +111,7 @@ s! {
105111
pub c_cc: [::cc_t; ::NCCS]
106112
}
107113

114+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
108115
pub struct flock64 {
109116
pub l_type: ::c_short,
110117
pub l_whence: ::c_short,
@@ -125,6 +132,7 @@ s! {
125132
pub msg_flags: ::c_int,
126133
}
127134

135+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
128136
pub struct statvfs64 {
129137
pub f_bsize: ::blksize64_t,
130138
pub f_frsize: ::blksize64_t,
@@ -171,6 +179,7 @@ s! {
171179
pub int_n_sign_posn: ::c_char,
172180
}
173181

182+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
174183
pub struct tm {
175184
pub tm_sec: ::c_int,
176185
pub tm_min: ::c_int,
@@ -195,22 +204,26 @@ s! {
195204
pub ai_eflags: ::c_int,
196205
}
197206

207+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
198208
pub struct in_addr {
199209
pub s_addr: in_addr_t
200210
}
201211

212+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
202213
pub struct ip_mreq_source {
203214
pub imr_multiaddr: in_addr,
204215
pub imr_sourceaddr: in_addr,
205216
pub imr_interface: in_addr,
206217
}
207218

219+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
208220
pub struct sockaddr {
209221
pub sa_len: ::c_uchar,
210222
pub sa_family: sa_family_t,
211223
pub sa_data: [::c_char; 14],
212224
}
213225

226+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
214227
pub struct sockaddr_dl {
215228
pub sdl_len: ::c_uchar,
216229
pub sdl_family: ::c_uchar,
@@ -222,6 +235,7 @@ s! {
222235
pub sdl_data: [::c_char; 120],
223236
}
224237

238+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
225239
pub struct sockaddr_in {
226240
pub sin_len: ::c_uchar,
227241
pub sin_family: sa_family_t,
@@ -230,6 +244,7 @@ s! {
230244
pub sin_zero: [::c_char; 8]
231245
}
232246

247+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
233248
pub struct sockaddr_in6 {
234249
pub sin6_len: ::c_uchar,
235250
pub sin6_family: ::c_uchar,
@@ -239,6 +254,7 @@ s! {
239254
pub sin6_scope_id: ::uint32_t
240255
}
241256

257+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
242258
pub struct sockaddr_storage {
243259
pub __ss_len: ::c_uchar,
244260
pub ss_family: sa_family_t,
@@ -247,17 +263,20 @@ s! {
247263
__ss_pad2: [::c_char; 1265],
248264
}
249265

266+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
250267
pub struct sockaddr_un {
251268
pub sun_len: ::c_uchar,
252269
pub sun_family: sa_family_t,
253270
pub sun_path: [::c_char; 1023]
254271
}
255272

273+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
256274
pub struct st_timespec {
257275
pub tv_sec: ::time_t,
258276
pub tv_nsec: ::c_int,
259277
}
260278

279+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
261280
pub struct statfs64 {
262281
pub f_version: ::c_int,
263282
pub f_type: ::c_int,
@@ -289,6 +308,7 @@ s! {
289308
pub pw_shell: *mut ::c_char
290309
}
291310

311+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
292312
pub struct utsname {
293313
pub sysname: [::c_char; 32],
294314
pub nodename: [::c_char; 32],
@@ -297,12 +317,14 @@ s! {
297317
pub machine: [::c_char; 32],
298318
}
299319

320+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
300321
pub struct xutsname {
301322
pub nid: ::c_uint,
302323
pub reserved: ::c_int,
303324
pub longnid: ::c_ulonglong,
304325
}
305326

327+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
306328
pub struct cmsghdr {
307329
pub cmsg_len: ::socklen_t,
308330
pub cmsg_level: ::c_int,
@@ -318,10 +340,12 @@ s! {
318340
}
319341

320342
// Should be union with another 'sival_int'
343+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
321344
pub struct sigval64 {
322345
pub sival_ptr: ::c_ulonglong,
323346
}
324347

348+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
325349
pub struct sigevent64 {
326350
pub sigev_value: sigval64,
327351
pub sigev_signo: ::c_int,
@@ -335,6 +359,7 @@ s! {
335359
pub sevt_signo: signal_t,
336360
}
337361

362+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
338363
pub struct poll_ctl {
339364
pub cmd: ::c_short,
340365
pub events: ::c_short,
@@ -353,11 +378,13 @@ s! {
353378
pub bytes_sent: ::uint64_t,
354379
}
355380

381+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
356382
pub struct mmsghdr {
357383
pub msg_hdr: ::msghdr,
358384
pub msg_len: ::c_uint,
359385
}
360386

387+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
361388
pub struct sched_param {
362389
pub sched_priority: ::c_int,
363390
pub sched_policy: ::c_int,
@@ -371,6 +398,7 @@ s! {
371398
pub __pad: [::c_int; 4],
372399
}
373400

401+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
374402
pub struct posix_spawnattr_t {
375403
pub posix_attr_flags: ::c_short,
376404
pub posix_attr_pgroup: ::pid_t,
@@ -388,6 +416,7 @@ s! {
388416
pub gl_ptx: *mut ::c_void,
389417
}
390418

419+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
391420
pub struct mallinfo {
392421
pub arena: ::c_ulong,
393422
pub ordblks: ::c_int,
@@ -401,11 +430,13 @@ s! {
401430
pub keepcost: ::c_int,
402431
}
403432

433+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
404434
pub struct utmp_exit_status {
405435
pub e_termination: ::c_short,
406436
pub e_exit: ::c_short,
407437
}
408438

439+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
409440
pub struct utmp {
410441
pub ut_user: [::c_char; 256],
411442
pub ut_id: [::c_char; 14],
@@ -420,6 +451,7 @@ s! {
420451
pub __reservedV: [::c_int; 6],
421452
}
422453

454+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
423455
pub struct regmatch_t {
424456
pub rm_so: regoff_t,
425457
pub rm_eo: regoff_t,
@@ -439,11 +471,13 @@ s! {
439471
pub __unused: [*mut ::c_void; 34],
440472
}
441473

474+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
442475
pub struct rlimit64 {
443476
pub rlim_cur: rlim64_t,
444477
pub rlim_max: rlim64_t,
445478
}
446479

480+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
447481
pub struct shmid_ds {
448482
pub shm_perm: ipc_perm,
449483
pub shm_segsz: ::size_t,
@@ -462,6 +496,7 @@ s! {
462496
pub shm_reserved1: ::int64_t,
463497
}
464498

499+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
465500
pub struct stat64 {
466501
pub st_dev: dev_t,
467502
pub st_ino: ino_t,
@@ -494,6 +529,7 @@ s! {
494529
pub mnt_passno: ::c_int,
495530
}
496531

532+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
497533
pub struct ipc_perm {
498534
pub uid: ::uid_t,
499535
pub gid: ::gid_t,
@@ -510,13 +546,15 @@ s! {
510546
pub data: *mut ::c_void,
511547
}
512548

549+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
513550
pub struct mq_attr {
514551
pub mq_flags: ::c_long,
515552
pub mq_maxmsg: ::c_long,
516553
pub mq_msgsize: ::c_long,
517554
pub mq_curmsgs: ::c_long,
518555
}
519556

557+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
520558
pub struct sembuf {
521559
pub sem_num: ::c_ushort,
522560
pub sem_op: ::c_short,
@@ -528,6 +566,7 @@ s! {
528566
pub if_name: *mut ::c_char,
529567
}
530568

569+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
531570
pub struct itimerspec {
532571
pub it_interval: ::timespec,
533572
pub it_value: ::timespec,

src/unix/align.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
s! {
2+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
23
#[repr(align(4))]
34
pub struct in6_addr {
45
pub s6_addr: [u8; 16],

src/unix/mod.rs

+11
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,21 @@ s! {
5959
pub gr_mem: *mut *mut ::c_char,
6060
}
6161

62+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
6263
pub struct utimbuf {
6364
pub actime: time_t,
6465
pub modtime: time_t,
6566
}
6667

68+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
6769
pub struct timeval {
6870
pub tv_sec: time_t,
6971
pub tv_usec: suseconds_t,
7072
}
7173

7274
// linux x32 compatibility
7375
// See https://sourceware.org/bugzilla/show_bug.cgi?id=16437
76+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
7477
pub struct timespec {
7578
pub tv_sec: time_t,
7679
#[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
@@ -79,11 +82,13 @@ s! {
7982
pub tv_nsec: ::c_long,
8083
}
8184

85+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
8286
pub struct rlimit {
8387
pub rlim_cur: rlim_t,
8488
pub rlim_max: rlim_t,
8589
}
8690

91+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
8792
pub struct rusage {
8893
pub ru_utime: timeval,
8994
pub ru_stime: timeval,
@@ -134,6 +139,7 @@ s! {
134139
__reserved: [c_long; 16],
135140
}
136141

142+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
137143
pub struct ipv6_mreq {
138144
pub ipv6mr_multiaddr: in6_addr,
139145
#[cfg(target_os = "android")]
@@ -155,19 +161,22 @@ s! {
155161
pub iov_len: ::size_t,
156162
}
157163

164+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
158165
pub struct pollfd {
159166
pub fd: ::c_int,
160167
pub events: ::c_short,
161168
pub revents: ::c_short,
162169
}
163170

171+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
164172
pub struct winsize {
165173
pub ws_row: ::c_ushort,
166174
pub ws_col: ::c_ushort,
167175
pub ws_xpixel: ::c_ushort,
168176
pub ws_ypixel: ::c_ushort,
169177
}
170178

179+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
171180
pub struct linger {
172181
pub l_onoff: ::c_int,
173182
pub l_linger: ::c_int,
@@ -179,12 +188,14 @@ s! {
179188
}
180189

181190
// <sys/time.h>
191+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
182192
pub struct itimerval {
183193
pub it_interval: ::timeval,
184194
pub it_value: ::timeval,
185195
}
186196

187197
// <sys/times.h>
198+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
188199
pub struct tms {
189200
pub tms_utime: ::clock_t,
190201
pub tms_stime: ::clock_t,

src/unix/no_align.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
s! {
2+
#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]
23
pub struct in6_addr {
34
pub s6_addr: [u8; 16],
45
__align: [u32; 0],

0 commit comments

Comments
 (0)