From a89b0e79b00aa656cede3c6527cfda23b5ea19b1 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Wed, 22 May 2024 13:37:52 +0100 Subject: T6380: Move list_interfaces code to a dedicated dir for completion helpers --- src/completion/list_interfaces/iface.c | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/completion/list_interfaces/iface.c (limited to 'src/completion/list_interfaces/iface.c') diff --git a/src/completion/list_interfaces/iface.c b/src/completion/list_interfaces/iface.c new file mode 100644 index 0000000..bf2f025 --- /dev/null +++ b/src/completion/list_interfaces/iface.c @@ -0,0 +1,38 @@ +/* + * Simple wrapper of getifaddrs for OCaml list of interfaces + */ +#include +#include +#include +#include + +CAMLprim value interface_list(value unit) { + struct ifaddrs *ifaddr; + struct ifaddrs *ifa; + + CAMLparam1( unit ); + CAMLlocal2( cli, cons ); + + cli = Val_emptylist; + + if (getifaddrs(&ifaddr) == -1) { + CAMLreturn(cli); + } + for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { + if (ifa->ifa_name == NULL) + continue; + + CAMLlocal1( ml_s ); + cons = caml_alloc(2, 0); + + ml_s = caml_copy_string(ifa->ifa_name); + Store_field( cons, 0, ml_s ); + Store_field( cons, 1, cli ); + + cli = cons; + } + + freeifaddrs(ifaddr); + + CAMLreturn(cli); +} -- cgit v1.2.3