guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

04/06: syscalls: 'read-socket-address' gracefully handles unsupported fa


From: Ludovic Courtès
Subject: 04/06: syscalls: 'read-socket-address' gracefully handles unsupported families.
Date: Sat, 25 Jul 2015 12:45:09 +0000

civodul pushed a commit to branch master
in repository guix.

commit 3ca337699a2feb2a42f3661b7321a5e7d5fec594
Author: Ludovic Courtès <address@hidden>
Date:   Sat Jul 25 12:22:30 2015 +0200

    syscalls: 'read-socket-address' gracefully handles unsupported families.
    
    * guix/build/syscalls.scm (PF_PACKET, AF_PACKET): New variables.
      (read-socket-address): Make 'index' optional.  Return (vector FAMILY) when
      FAMILY is neither AF_INET nor AF_INET6.
---
 guix/build/syscalls.scm |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 73c5437..69abea1 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -57,6 +57,8 @@
             clone
             setns
 
+            PF_PACKET
+            AF_PACKET
             IFF_UP
             IFF_BROADCAST
             IFF_LOOPBACK
@@ -506,7 +508,10 @@ bytevector BV at INDEX."
           (else
            (error "unsupported socket address" sockaddr)))))
 
-(define (read-socket-address bv index)
+(define PF_PACKET 17)                             ;<bits/socket.h>
+(define AF_PACKET PF_PACKET)
+
+(define* (read-socket-address bv #:optional (index 0))
   "Read a socket address from bytevector BV at INDEX."
   (let ((family (bytevector-u16-native-ref bv index)))
     (cond ((= family AF_INET)
@@ -514,7 +519,9 @@ bytevector BV at INDEX."
           ((= family AF_INET6)
            (read-sockaddr-in6 bv index))
           (else
-           "unsupported socket address family" family))))
+           ;; XXX: Unsupported address family, such as AF_PACKET.  Return a
+           ;; vector such that the vector can at least call 'sockaddr:fam'.
+           (vector family)))))
 
 (define %ioctl
   ;; The most terrible interface, live from Scheme.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]