ifaddrs: get interface-names on unix.
							parent
							
								
									12628c5a95
								
							
						
					
					
						commit
						2f371a83a0
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
John Benediktsson
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
! Copyright (C) 2016 John Benediktsson
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license
 | 
			
		||||
USING: accessors alien.c-types alien.data alien.destructors
 | 
			
		||||
alien.syntax classes.struct destructors libc sequences sets
 | 
			
		||||
sorting ;
 | 
			
		||||
IN: ifaddrs
 | 
			
		||||
 | 
			
		||||
STRUCT: sockaddr
 | 
			
		||||
    { sa_len uint8_t }
 | 
			
		||||
    { sa_family uint8_t }
 | 
			
		||||
    { sa_data char[14] } ;
 | 
			
		||||
 | 
			
		||||
STRUCT: ifaddrs
 | 
			
		||||
    { ifa_next ifaddrs* }
 | 
			
		||||
    { ifa_name c-string }
 | 
			
		||||
    { ifa_flags uint }
 | 
			
		||||
    { ifa_addr sockaddr* }
 | 
			
		||||
    { ifa_netmask sockaddr* }
 | 
			
		||||
    { ifa_dstaddr sockaddr* }
 | 
			
		||||
    { ifa_data void* } ;
 | 
			
		||||
 | 
			
		||||
FUNCTION: int getifaddrs ( ifaddrs** ifap )
 | 
			
		||||
 | 
			
		||||
FUNCTION: void freeifaddrs ( ifaddrs* ifp )
 | 
			
		||||
 | 
			
		||||
DESTRUCTOR: freeifaddrs
 | 
			
		||||
 | 
			
		||||
: interface-names ( -- ifaddrs )
 | 
			
		||||
    [
 | 
			
		||||
        { void* } [ getifaddrs io-error ] with-out-parameters
 | 
			
		||||
        &freeifaddrs ifaddrs deref
 | 
			
		||||
        [ ifa_next>> ] follow
 | 
			
		||||
        [ ifa_name>> ] map members natural-sort
 | 
			
		||||
    ] with-destructors ;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
unix
 | 
			
		||||
		Loading…
	
		Reference in New Issue