Consistently allocate device and iface variables on the heap.
[tinc] / src / mingw / device.c
index 004249c..5494796 100644 (file)
@@ -1,7 +1,7 @@
 /*
     device.c -- Interaction with Windows tap driver in a MinGW environment
     Copyright (C) 2002-2005 Ivo Timmermans,
-                  2002-2006 Guus Sliepen <guus@tinc-vpn.org>
+                  2002-2007 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -38,7 +38,7 @@ int device_fd = 0;
 static HANDLE device_handle = INVALID_HANDLE_VALUE;
 char *device = NULL;
 char *iface = NULL;
-char *device_info = NULL;
+static char *device_info = NULL;
 
 static int device_total_in = 0;
 static int device_total_out = 0;
@@ -52,7 +52,7 @@ static struct packetbuf {
 
 static int nbufs = 64;
 
-DWORD WINAPI tapreader(void *bla) {
+static DWORD WINAPI tapreader(void *bla) {
        int sock, err, status;
        struct addrinfo *ai;
        struct addrinfo hint = {
@@ -76,18 +76,20 @@ DWORD WINAPI tapreader(void *bla) {
 
        sock = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
 
-       freeaddrinfo(ai);
-
        if(sock < 0) {
                logger(LOG_ERR, _("System call `%s' failed: %s"), "socket", strerror(errno));
+               freeaddrinfo(ai);
                return -1;
        }
 
        if(connect(sock, ai->ai_addr, ai->ai_addrlen)) {
                logger(LOG_ERR, _("System call `%s' failed: %s"), "connect", strerror(errno));
+               freeaddrinfo(ai);
                return -1;
        }
 
+       freeaddrinfo(ai);
+
        logger(LOG_DEBUG, _("Tap reader running"));
 
        /* Read from tap device and send to parent */
@@ -143,7 +145,7 @@ bool setup_device(void)
                .ai_family = AF_UNSPEC,
                .ai_socktype = SOCK_STREAM,
                .ai_protocol = IPPROTO_TCP,
-               .ai_flags = AI_PASSIVE,
+               .ai_flags = 0,
        };
 
        cp();