Fix building tinc and running tests on Solaris
[tinc] / src / fd_device.c
index 0da8259..381c784 100644 (file)
@@ -1,7 +1,7 @@
 /*
     fd_device.c -- Interaction with Android tun fd
     Copyright (C)   2001-2005   Ivo Timmermans,
-                    2001-2021   Guus Sliepen <guus@tinc-vpn.org>
+                    2001-2022   Guus Sliepen <guus@tinc-vpn.org>
                     2009        Grzegorz Dymarek <gregd72002@googlemail.com>
                     2016-2020   Pacien TRAN-GIRARD <pacien@pacien.net>
 
@@ -22,7 +22,6 @@
 
 #include "system.h"
 
-#ifdef HAVE_SYS_UN_H
 #include <sys/un.h>
 
 #include "conf.h"
@@ -31,7 +30,6 @@
 #include "logger.h"
 #include "net.h"
 #include "route.h"
-#include "utils.h"
 
 struct unix_socket_addr {
        size_t size;
@@ -43,7 +41,7 @@ static int read_fd(int socket) {
        struct iovec iov = {0};
        char cmsgbuf[CMSG_SPACE(sizeof(device_fd))];
        struct msghdr msg = {0};
-       int ret;
+       ssize_t ret;
        struct cmsghdr *cmsgptr;
 
        iov.iov_base = &iobuf;
@@ -54,7 +52,7 @@ static int read_fd(int socket) {
        msg.msg_controllen = sizeof(cmsgbuf);
 
        if((ret = recvmsg(socket, &msg, 0)) < 1) {
-               logger(DEBUG_ALWAYS, LOG_ERR, "Could not read from unix socket (error %d)!", ret);
+               logger(DEBUG_ALWAYS, LOG_ERR, "Could not read from unix socket (error %ld)!", (long)ret);
                return -1;
        }
 
@@ -116,7 +114,9 @@ end:
 }
 
 static struct unix_socket_addr parse_socket_addr(const char *path) {
-       struct sockaddr_un socket_addr;
+       struct sockaddr_un socket_addr = {
+               .sun_family = AF_UNIX,
+       };
        size_t path_length;
 
        if(strlen(path) >= sizeof(socket_addr.sun_path)) {
@@ -126,7 +126,6 @@ static struct unix_socket_addr parse_socket_addr(const char *path) {
                };
        }
 
-       socket_addr.sun_family = AF_UNIX;
        strncpy(socket_addr.sun_path, path, sizeof(socket_addr.sun_path));
 
        if(path[0] == '@') {
@@ -150,7 +149,7 @@ static bool setup_device(void) {
                return false;
        }
 
-       if(!get_config_string(lookup_config(config_tree, "Device"), &device)) {
+       if(!get_config_string(lookup_config(&config_tree, "Device"), &device)) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Could not read device from configuration!");
                return false;
        }
@@ -174,6 +173,10 @@ static bool setup_device(void) {
 static void close_device(void) {
        close(device_fd);
        device_fd = -1;
+       free(iface);
+       iface = NULL;
+       free(device);
+       device = NULL;
 }
 
 static inline uint16_t get_ip_ethertype(vpn_packet_t *packet) {
@@ -197,7 +200,7 @@ static inline void set_etherheader(vpn_packet_t *packet, uint16_t ethertype) {
 }
 
 static bool read_packet(vpn_packet_t *packet) {
-       int lenin = read(device_fd, DATA(packet) + ETH_HLEN, MTU - ETH_HLEN);
+       ssize_t lenin = read(device_fd, DATA(packet) + ETH_HLEN, MTU - ETH_HLEN);
 
        if(lenin <= 0) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from fd/%d: %s!", device_fd, strerror(errno));
@@ -236,4 +239,3 @@ const devops_t fd_devops = {
        .read = read_packet,
        .write = write_packet,
 };
-#endif