@@ -309,21 +309,18 @@ s! {
309
309
}
310
310
311
311
s_no_extra_traits ! {
312
- #[ allow( missing_debug_implementations) ]
313
312
pub struct sockaddr_un {
314
313
pub sun_len: u8 ,
315
314
pub sun_family: sa_family_t,
316
315
pub sun_path: [ :: c_char; 126 ]
317
316
}
318
- #[ allow( missing_debug_implementations) ]
319
317
pub struct sockaddr_storage {
320
318
pub ss_len: u8 ,
321
319
pub ss_family: sa_family_t,
322
320
__ss_pad1: [ u8 ; 6 ] ,
323
321
__ss_pad2: u64 ,
324
322
__ss_pad3: [ u8 ; 112 ] ,
325
323
}
326
- #[ allow( missing_debug_implementations) ]
327
324
pub struct dirent {
328
325
pub d_dev: dev_t,
329
326
pub d_pdev: dev_t,
@@ -334,6 +331,116 @@ s_no_extra_traits! {
334
331
}
335
332
}
336
333
334
+ cfg_if ! {
335
+ if #[ cfg( feature = "extra_traits" ) ] {
336
+ impl PartialEq for sockaddr_un {
337
+ fn eq( & self , other: & sockaddr_un) -> bool {
338
+ self . sun_len == other. sun_len
339
+ && self . sun_family == other. sun_family
340
+ && self
341
+ . sun_path
342
+ . iter( )
343
+ . zip( other. sun_path. iter( ) )
344
+ . all( |( a, b) | a == b)
345
+ }
346
+ }
347
+ impl Eq for sockaddr_un { }
348
+ impl :: fmt:: Debug for sockaddr_un {
349
+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
350
+ f. debug_struct( "sockaddr_un" )
351
+ . field( "sun_len" , & self . sun_len)
352
+ . field( "sun_family" , & self . sun_family)
353
+ // FIXME: .field("sun_path", &self.sun_path)
354
+ . finish( )
355
+ }
356
+ }
357
+ impl :: hash:: Hash for sockaddr_un {
358
+ fn hash<H : :: hash:: Hasher >( & self , state: & mut H ) {
359
+ self . sun_len. hash( state) ;
360
+ self . sun_family. hash( state) ;
361
+ self . sun_path. hash( state) ;
362
+ }
363
+ }
364
+
365
+ impl PartialEq for sockaddr_storage {
366
+ fn eq( & self , other: & sockaddr_storage) -> bool {
367
+ self . ss_len == other. ss_len
368
+ && self . ss_family == other. ss_family
369
+ && self
370
+ . __ss_pad1
371
+ . iter( )
372
+ . zip( other. __ss_pad1. iter( ) )
373
+ . all( |( a, b) | a == b)
374
+ && self . __ss_pad2 == other. __ss_pad2
375
+ && self
376
+ . __ss_pad3
377
+ . iter( )
378
+ . zip( other. __ss_pad3. iter( ) )
379
+ . all( |( a, b) | a == b)
380
+ }
381
+ }
382
+ impl Eq for sockaddr_storage { }
383
+ impl :: fmt:: Debug for sockaddr_storage {
384
+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
385
+ f. debug_struct( "sockaddr_storage" )
386
+ . field( "ss_len" , & self . ss_len)
387
+ . field( "ss_family" , & self . ss_family)
388
+ . field( "__ss_pad1" , & self . __ss_pad1)
389
+ . field( "__ss_pad2" , & self . __ss_pad2)
390
+ // FIXME: .field("__ss_pad3", &self.__ss_pad3)
391
+ . finish( )
392
+ }
393
+ }
394
+ impl :: hash:: Hash for sockaddr_storage {
395
+ fn hash<H : :: hash:: Hasher >( & self , state: & mut H ) {
396
+ self . ss_len. hash( state) ;
397
+ self . ss_family. hash( state) ;
398
+ self . __ss_pad1. hash( state) ;
399
+ self . __ss_pad2. hash( state) ;
400
+ self . __ss_pad3. hash( state) ;
401
+ }
402
+ }
403
+
404
+ impl PartialEq for dirent {
405
+ fn eq( & self , other: & dirent) -> bool {
406
+ self . d_dev == other. d_dev
407
+ && self . d_pdev == other. d_pdev
408
+ && self . d_ino == other. d_ino
409
+ && self . d_pino == other. d_pino
410
+ && self . d_reclen == other. d_reclen
411
+ && self
412
+ . d_name
413
+ . iter( )
414
+ . zip( other. d_name. iter( ) )
415
+ . all( |( a, b) | a == b)
416
+ }
417
+ }
418
+ impl Eq for dirent { }
419
+ impl :: fmt:: Debug for dirent {
420
+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
421
+ f. debug_struct( "dirent" )
422
+ . field( "d_dev" , & self . d_dev)
423
+ . field( "d_pdev" , & self . d_pdev)
424
+ . field( "d_ino" , & self . d_ino)
425
+ . field( "d_pino" , & self . d_pino)
426
+ . field( "d_reclen" , & self . d_reclen)
427
+ // FIXME: .field("d_name", &self.d_name)
428
+ . finish( )
429
+ }
430
+ }
431
+ impl :: hash:: Hash for dirent {
432
+ fn hash<H : :: hash:: Hasher >( & self , state: & mut H ) {
433
+ self . d_dev. hash( state) ;
434
+ self . d_pdev. hash( state) ;
435
+ self . d_ino. hash( state) ;
436
+ self . d_pino. hash( state) ;
437
+ self . d_reclen. hash( state) ;
438
+ self . d_name. hash( state) ;
439
+ }
440
+ }
441
+ }
442
+ }
443
+
337
444
// intentionally not public, only used for fd_set
338
445
cfg_if ! {
339
446
if #[ cfg( target_pointer_width = "32" ) ] {
0 commit comments