From 2f371a83a0f9b9d337343c3acc219c3a962854ad Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 20 Mar 2016 21:00:18 -0700 Subject: [PATCH] ifaddrs: get interface-names on unix. --- extra/ifaddrs/authors.txt | 1 + extra/ifaddrs/ifaddrs.factor | 34 ++++++++++++++++++++++++++++++++++ extra/ifaddrs/platforms.txt | 1 + 3 files changed, 36 insertions(+) create mode 100644 extra/ifaddrs/authors.txt create mode 100644 extra/ifaddrs/ifaddrs.factor create mode 100644 extra/ifaddrs/platforms.txt diff --git a/extra/ifaddrs/authors.txt b/extra/ifaddrs/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/ifaddrs/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/ifaddrs/ifaddrs.factor b/extra/ifaddrs/ifaddrs.factor new file mode 100644 index 0000000000..e50ef94960 --- /dev/null +++ b/extra/ifaddrs/ifaddrs.factor @@ -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 ; diff --git a/extra/ifaddrs/platforms.txt b/extra/ifaddrs/platforms.txt new file mode 100644 index 0000000000..509143d863 --- /dev/null +++ b/extra/ifaddrs/platforms.txt @@ -0,0 +1 @@ +unix