From 6d08eb1614b59d5f86a43edda9db06fca72b76cd Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@tinc-vpn.org>
Date: Sat, 28 May 2011 23:36:52 +0200
Subject: [PATCH] Fix sparse warnings and add an extra sprinkling of const.

This is more or less the equivalent of Sven-Haegar Koch's fixes in the 1.1
branch.
---
 lib/pidfile.c           | 10 ++++++----
 lib/pidfile.h           |  8 ++++----
 lib/utils.c             |  6 +++---
 lib/utils.h             |  2 +-
 lib/xalloc.h            |  2 +-
 lib/xmalloc.c           | 20 ++++++++------------
 src/bsd/device.c        |  1 +
 src/conf.c              |  8 ++++----
 src/conf.h              |  4 ++--
 src/connection.h        | 20 ++++++++++----------
 src/cygwin/device.c     |  1 +
 src/dummy/device.c      |  1 +
 src/event.c             |  2 +-
 src/graph.c             |  5 +++--
 src/graph.h             |  2 --
 src/linux/device.c      |  1 +
 src/mingw/device.c      |  1 +
 src/net.c               |  2 +-
 src/net.h               |  6 ++++--
 src/net_packet.c        |  2 +-
 src/net_setup.c         |  4 ++--
 src/net_socket.c        |  2 +-
 src/node.c              |  6 +++---
 src/node.h              | 14 +++++++-------
 src/process.c           |  4 ++--
 src/protocol.c          |  2 +-
 src/protocol.h          |  4 ++--
 src/protocol_key.c      |  4 ++--
 src/protocol_misc.c     |  2 +-
 src/protocol_subnet.c   |  4 ++--
 src/raw_socket/device.c |  1 +
 src/solaris/device.c    |  1 +
 src/subnet.c            |  4 ++--
 src/uml_socket/device.c |  1 +
 src/vde/device.c        |  1 +
 35 files changed, 83 insertions(+), 75 deletions(-)

diff --git a/lib/pidfile.c b/lib/pidfile.c
index 425b3043..6e24d5f0 100644
--- a/lib/pidfile.c
+++ b/lib/pidfile.c
@@ -27,6 +27,8 @@
 
 #include "system.h"
 
+#include "pidfile.h"
+
 #ifndef HAVE_MINGW
 /* read_pid
  *
@@ -34,7 +36,7 @@
  * 0 is returned if either there's no pidfile, it's empty
  * or no pid can be read.
  */
-pid_t read_pid (char *pidfile)
+pid_t read_pid (const char *pidfile)
 {
   FILE *f;
   long pid;
@@ -53,7 +55,7 @@ pid_t read_pid (char *pidfile)
  * table (using /proc) to determine if the process already exists. If
  * so the pid is returned, otherwise 0.
  */
-pid_t check_pid (char *pidfile)
+pid_t check_pid (const char *pidfile)
 {
   pid_t pid = read_pid(pidfile);
 
@@ -79,7 +81,7 @@ pid_t check_pid (char *pidfile)
  * Writes the pid to the specified file. If that fails 0 is
  * returned, otherwise the pid.
  */
-pid_t write_pid (char *pidfile)
+pid_t write_pid (const char *pidfile)
 {
   FILE *f;
   int fd;
@@ -124,7 +126,7 @@ pid_t write_pid (char *pidfile)
  * Remove the the specified file. The result from unlink(2)
  * is returned
  */
-int remove_pid (char *pidfile)
+int remove_pid (const char *pidfile)
 {
   return unlink (pidfile);
 }
diff --git a/lib/pidfile.h b/lib/pidfile.h
index d7b970c1..590a7bc7 100644
--- a/lib/pidfile.h
+++ b/lib/pidfile.h
@@ -26,7 +26,7 @@
  * 0 is returned if either there's no pidfile, it's empty
  * or no pid can be read.
  */
-pid_t read_pid (char *pidfile);
+extern pid_t read_pid (const char *pidfile);
 
 /* check_pid
  *
@@ -34,19 +34,19 @@ pid_t read_pid (char *pidfile);
  * table (using /proc) to determine if the process already exists. If
  * so 1 is returned, otherwise 0.
  */
-pid_t check_pid (char *pidfile);
+extern pid_t check_pid (const char *pidfile);
 
 /* write_pid
  *
  * Writes the pid to the specified file. If that fails 0 is
  * returned, otherwise the pid.
  */
-pid_t write_pid (char *pidfile);
+extern pid_t write_pid (const char *pidfile);
 
 /* remove_pid
  *
  * Remove the the specified file. The result from unlink(2)
  * is returned
  */
-int remove_pid (char *pidfile);
+extern int remove_pid (const char *pidfile);
 #endif
diff --git a/lib/utils.c b/lib/utils.c
index dd7e4de2..6ea904a5 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -23,9 +23,9 @@
 #include "../src/logger.h"
 #include "utils.h"
 
-const char hexadecimals[] = "0123456789ABCDEF";
+static const char hexadecimals[] = "0123456789ABCDEF";
 
-int charhex2bin(char c) {
+static int charhex2bin(char c) {
 	if(isdigit(c))
 		return c - '0';
 	else
@@ -67,7 +67,7 @@ const char *winerror(int err) {
 }
 #endif
 
-unsigned int bitfield_to_int(void *bitfield, size_t size) {
+unsigned int bitfield_to_int(const void *bitfield, size_t size) {
 	unsigned int value = 0;
 	if(size > sizeof value)
 		size = sizeof value;
diff --git a/lib/utils.h b/lib/utils.h
index 4456616d..f6ff7052 100644
--- a/lib/utils.h
+++ b/lib/utils.h
@@ -40,6 +40,6 @@ extern const char *winerror(int);
 #define sockinprogress(x) ((x) == EINPROGRESS)
 #endif
 
-extern unsigned int bitfield_to_int(void *bitfield, size_t size);
+extern unsigned int bitfield_to_int(const void *bitfield, size_t size);
 
 #endif							/* __TINC_UTILS_H__ */
diff --git a/lib/xalloc.h b/lib/xalloc.h
index 51f99bdf..952f9217 100644
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -16,7 +16,7 @@ extern int xalloc_exit_failure;
 extern char *const xalloc_msg_memory_exhausted;
 
 /* FIXME: describe */
-extern void (*xalloc_fail_func) ();
+extern void (*xalloc_fail_func) (int);
 
 void *xmalloc PARAMS ((size_t n)) __attribute__ ((__malloc__));
 void *xmalloc_and_zero PARAMS ((size_t n)) __attribute__ ((__malloc__));
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
index 4e79aff9..e4079ce4 100644
--- a/lib/xmalloc.c
+++ b/lib/xmalloc.c
@@ -56,7 +56,7 @@ int xalloc_exit_failure = EXIT_FAILURE;
 char *const xalloc_msg_memory_exhausted = "Memory exhausted";
 
 /* FIXME: describe */
-void (*xalloc_fail_func) (int) = 0;
+void (*xalloc_fail_func) (int) = NULL;
 
 static void
 xalloc_fail (int size)
@@ -70,13 +70,12 @@ xalloc_fail (int size)
 /* Allocate N bytes of memory dynamically, with error checking.  */
 
 void *
-xmalloc (n)
-     size_t n;
+xmalloc (size_t n)
 {
   void *p;
 
   p = malloc (n);
-  if (p == 0)
+  if (p == NULL)
     xalloc_fail ((int)n);
   return p;
 }
@@ -84,13 +83,12 @@ xmalloc (n)
 /* Allocate N bytes of memory dynamically, and set it all to zero. */
 
 void *
-xmalloc_and_zero (n)
-     size_t n;
+xmalloc_and_zero (size_t n)
 {
   void *p;
 
   p = malloc (n);
-  if (p == 0)
+  if (p == NULL)
     xalloc_fail ((int)n);
   memset (p, '\0', n);
   return p;
@@ -101,12 +99,10 @@ xmalloc_and_zero (n)
    If P is NULL, run xmalloc.  */
 
 void *
-xrealloc (p, n)
-     void *p;
-     size_t n;
+xrealloc (void *p, size_t n)
 {
   p = realloc (p, n);
-  if (p == 0)
+  if (p == NULL)
     xalloc_fail (n);
   return p;
 }
@@ -134,7 +130,7 @@ xcalloc (n, s)
   void *p;
 
   p = calloc (n, s);
-  if (p == 0)
+  if (p == NULL)
     xalloc_fail ();
   return p;
 }
diff --git a/src/bsd/device.c b/src/bsd/device.c
index d6ef0e82..a41827ff 100644
--- a/src/bsd/device.c
+++ b/src/bsd/device.c
@@ -22,6 +22,7 @@
 #include "system.h"
 
 #include "conf.h"
+#include "device.h"
 #include "logger.h"
 #include "net.h"
 #include "route.h"
diff --git a/src/conf.c b/src/conf.c
index 5f8fdb1e..b895b7f6 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -92,7 +92,7 @@ void config_add(avl_tree_t *config_tree, config_t *cfg) {
 	avl_insert(config_tree, cfg);
 }
 
-config_t *lookup_config(avl_tree_t *config_tree, char *variable) {
+config_t *lookup_config(const avl_tree_t *config_tree, char *variable) {
 	config_t cfg, *found;
 
 	cfg.variable = variable;
@@ -110,7 +110,7 @@ config_t *lookup_config(avl_tree_t *config_tree, char *variable) {
 	return found;
 }
 
-config_t *lookup_config_next(avl_tree_t *config_tree, const config_t *cfg) {
+config_t *lookup_config_next(const avl_tree_t *config_tree, const config_t *cfg) {
 	avl_node_t *node;
 	config_t *found;
 
@@ -188,7 +188,7 @@ bool get_config_address(const config_t *cfg, struct addrinfo **result) {
 }
 
 bool get_config_subnet(const config_t *cfg, subnet_t ** result) {
-	subnet_t subnet = {0};
+	subnet_t subnet = {NULL};
 
 	if(!cfg)
 		return false;
@@ -368,7 +368,7 @@ void read_config_options(avl_tree_t *config_tree, const char *prefix) {
 	}
 }
 
-bool read_server_config() {
+bool read_server_config(void) {
 	char *fname;
 	bool x;
 
diff --git a/src/conf.h b/src/conf.h
index 3eae4ad7..5b0796e5 100644
--- a/src/conf.h
+++ b/src/conf.h
@@ -48,8 +48,8 @@ extern void exit_configuration(avl_tree_t **);
 extern config_t *new_config(void) __attribute__ ((__malloc__));
 extern void free_config(config_t *);
 extern void config_add(avl_tree_t *, config_t *);
-extern config_t *lookup_config(avl_tree_t *, char *);
-extern config_t *lookup_config_next(avl_tree_t *, const config_t *);
+extern config_t *lookup_config(const avl_tree_t *, char *);
+extern config_t *lookup_config_next(const avl_tree_t *, const config_t *);
 extern bool get_config_bool(const config_t *, bool *);
 extern bool get_config_int(const config_t *, int *);
 extern bool get_config_string(const config_t *, char **);
diff --git a/src/connection.h b/src/connection.h
index 05e8b4ba..eb13413b 100644
--- a/src/connection.h
+++ b/src/connection.h
@@ -32,16 +32,16 @@
 #define OPTION_CLAMP_MSS	0x0008
 
 typedef struct connection_status_t {
-	int pinged:1;				/* sent ping */
-	int active:1;				/* 1 if active.. */
-	int connecting:1;			/* 1 if we are waiting for a non-blocking connect() to finish */
-	int termreq:1;				/* the termination of this connection was requested */
-	int remove:1;				/* Set to 1 if you want this connection removed */
-	int timeout:1;				/* 1 if gotten timeout */
-	int encryptout:1;			/* 1 if we can encrypt outgoing traffic */
-	int decryptin:1;			/* 1 if we have to decrypt incoming traffic */
-	int mst:1;				/* 1 if this connection is part of a minimum spanning tree */
-	int unused:23;
+	unsigned int pinged:1;				/* sent ping */
+	unsigned int active:1;				/* 1 if active.. */
+	unsigned int connecting:1;			/* 1 if we are waiting for a non-blocking connect() to finish */
+	unsigned int termreq:1;				/* the termination of this connection was requested */
+	unsigned int remove:1;				/* Set to 1 if you want this connection removed */
+	unsigned int timeout:1;				/* 1 if gotten timeout */
+	unsigned int encryptout:1;			/* 1 if we can encrypt outgoing traffic */
+	unsigned int decryptin:1;			/* 1 if we have to decrypt incoming traffic */
+	unsigned int mst:1;				/* 1 if this connection is part of a minimum spanning tree */
+	unsigned int unused:23;
 } connection_status_t;
 
 #include "edge.h"
diff --git a/src/cygwin/device.c b/src/cygwin/device.c
index 90966cd2..42016cb5 100644
--- a/src/cygwin/device.c
+++ b/src/cygwin/device.c
@@ -24,6 +24,7 @@
 #include <w32api/winioctl.h>
 
 #include "conf.h"
+#include "device.h"
 #include "logger.h"
 #include "net.h"
 #include "route.h"
diff --git a/src/dummy/device.c b/src/dummy/device.c
index c84e899b..25a38f2d 100644
--- a/src/dummy/device.c
+++ b/src/dummy/device.c
@@ -19,6 +19,7 @@
 
 #include "system.h"
 
+#include "device.h"
 #include "logger.h"
 #include "net.h"
 
diff --git a/src/event.c b/src/event.c
index 99e6a238..e03b04dc 100644
--- a/src/event.c
+++ b/src/event.c
@@ -28,7 +28,7 @@
 avl_tree_t *event_tree;
 extern time_t now;
 
-int id;
+static int id;
 
 static int event_compare(const event_t *a, const event_t *b) {
 	if(a->time > b->time)
diff --git a/src/graph.c b/src/graph.c
index 3495f23c..9aadcd86 100644
--- a/src/graph.c
+++ b/src/graph.c
@@ -49,6 +49,7 @@
 #include "connection.h"
 #include "device.h"
 #include "edge.h"
+#include "graph.h"
 #include "logger.h"
 #include "netutl.h"
 #include "node.h"
@@ -65,7 +66,7 @@ static bool graph_changed = true;
    Please note that sorting on weight is already done by add_edge().
 */
 
-void mst_kruskal(void) {
+static void mst_kruskal(void) {
 	avl_node_t *node, *next;
 	edge_t *e;
 	node_t *n;
@@ -146,7 +147,7 @@ void mst_kruskal(void) {
    Running time: O(E)
 */
 
-void sssp_bfs(void) {
+static void sssp_bfs(void) {
 	avl_node_t *node, *next, *to;
 	edge_t *e;
 	node_t *n;
diff --git a/src/graph.h b/src/graph.h
index 26006015..fb410961 100644
--- a/src/graph.h
+++ b/src/graph.h
@@ -22,8 +22,6 @@
 #define __TINC_GRAPH_H__
 
 extern void graph(void);
-extern void mst_kruskal(void);
-extern void sssp_bfs(void);
 extern void dump_graph(void);
 
 #endif /* __TINC_GRAPH_H__ */
diff --git a/src/linux/device.c b/src/linux/device.c
index 0632d51a..c7c1b65c 100644
--- a/src/linux/device.c
+++ b/src/linux/device.c
@@ -28,6 +28,7 @@
 #endif
 
 #include "conf.h"
+#include "device.h"
 #include "logger.h"
 #include "net.h"
 #include "route.h"
diff --git a/src/mingw/device.c b/src/mingw/device.c
index fec53cf8..1dac3bfa 100644
--- a/src/mingw/device.c
+++ b/src/mingw/device.c
@@ -24,6 +24,7 @@
 #include <winioctl.h>
 
 #include "conf.h"
+#include "device.h"
 #include "logger.h"
 #include "net.h"
 #include "route.h"
diff --git a/src/net.c b/src/net.c
index e6a1166f..3508dd73 100644
--- a/src/net.c
+++ b/src/net.c
@@ -423,7 +423,7 @@ int main_loop(void) {
 					}
 				}
 
-				send_key_changed(broadcast, myself);
+				send_key_changed();
 				keyexpires = now + keylifetime;
 			}
 
diff --git a/src/net.h b/src/net.h
index 55856e2b..b831cdd8 100644
--- a/src/net.h
+++ b/src/net.h
@@ -121,6 +121,8 @@ extern time_t now;
 extern int contradicting_add_edge;
 extern int contradicting_del_edge;
 
+extern volatile bool running;
+
 /* Yes, very strange placement indeed, but otherwise the typedefs get all tangled up */
 #include "connection.h"
 #include "node.h"
@@ -133,7 +135,7 @@ extern bool handle_new_meta_connection(int);
 extern int setup_listen_socket(const sockaddr_t *);
 extern int setup_vpn_in_socket(const sockaddr_t *);
 extern void send_packet(const struct node_t *, vpn_packet_t *);
-extern void receive_tcppacket(struct connection_t *, char *, int);
+extern void receive_tcppacket(struct connection_t *, const char *, int);
 extern void broadcast_packet(const struct node_t *, vpn_packet_t *);
 extern bool setup_network(void);
 extern void setup_outgoing_connection(struct outgoing_t *);
@@ -144,7 +146,7 @@ extern void terminate_connection(struct connection_t *, bool);
 extern void flush_queue(struct node_t *);
 extern bool read_rsa_public_key(struct connection_t *);
 extern void send_mtu_probe(struct node_t *);
-extern void load_all_subnets();
+extern void load_all_subnets(void);
 
 #ifndef HAVE_MINGW
 #define closesocket(s) close(s)
diff --git a/src/net_packet.c b/src/net_packet.c
index c7efa886..062523e5 100644
--- a/src/net_packet.c
+++ b/src/net_packet.c
@@ -365,7 +365,7 @@ static void receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
 		receive_packet(n, inpkt);
 }
 
-void receive_tcppacket(connection_t *c, char *buffer, int len) {
+void receive_tcppacket(connection_t *c, const char *buffer, int len) {
 	vpn_packet_t outpkt;
 
 	outpkt.len = len;
diff --git a/src/net_setup.c b/src/net_setup.c
index cc6ef680..f18e3bfe 100644
--- a/src/net_setup.c
+++ b/src/net_setup.c
@@ -144,7 +144,7 @@ bool read_rsa_public_key(connection_t *c) {
 	return false;
 }
 
-bool read_rsa_private_key(void) {
+static bool read_rsa_private_key(void) {
 	FILE *fp;
 	char *fname, *key, *pubkey;
 	struct stat s;
@@ -267,7 +267,7 @@ void load_all_subnets(void) {
 /*
   Configure node_t myself and set up the local sockets (listen only)
 */
-bool setup_myself(void) {
+static bool setup_myself(void) {
 	config_t *cfg;
 	subnet_t *subnet;
 	char *name, *hostname, *mode, *afname, *cipher, *digest;
diff --git a/src/net_socket.c b/src/net_socket.c
index 2e6b0685..a45bc204 100644
--- a/src/net_socket.c
+++ b/src/net_socket.c
@@ -535,7 +535,7 @@ bool handle_new_meta_connection(int sock) {
 	return true;
 }
 
-void free_outgoing(outgoing_t *outgoing) {
+static void free_outgoing(outgoing_t *outgoing) {
 	if(outgoing->ai)
 		freeaddrinfo(outgoing->ai);
 
diff --git a/src/node.c b/src/node.c
index 36979ef3..d6156b6a 100644
--- a/src/node.c
+++ b/src/node.c
@@ -124,7 +124,7 @@ void node_del(node_t *n) {
 }
 
 node_t *lookup_node(char *name) {
-	node_t n = {0};
+	node_t n = {NULL};
 
 	n.name = name;
 
@@ -132,7 +132,7 @@ node_t *lookup_node(char *name) {
 }
 
 node_t *lookup_node_udp(const sockaddr_t *sa) {
-	node_t n = {0};
+	node_t n = {NULL};
 
 	n.address = *sa;
 	n.name = NULL;
@@ -158,7 +158,7 @@ void update_node_udp(node_t *n, const sockaddr_t *sa) {
 		ifdebug(PROTOCOL) logger(LOG_DEBUG, "UDP address of %s set to %s", n->name, n->hostname);
 	} else {
 		memset(&n->address, 0, sizeof n->address);
-		n->hostname = 0;
+		n->hostname = NULL;
 		ifdebug(PROTOCOL) logger(LOG_DEBUG, "UDP address of %s cleared", n->name);
 	}
 }
diff --git a/src/node.h b/src/node.h
index 7bac28e3..107a59b6 100644
--- a/src/node.h
+++ b/src/node.h
@@ -28,13 +28,13 @@
 #include "subnet.h"
 
 typedef struct node_status_t {
-	int unused_active:1;			/* 1 if active (not used for nodes) */
-	int validkey:1;				/* 1 if we currently have a valid key for him */
-	int unused_waitingforkey:1;		/* 1 if we already sent out a request */
-	int visited:1;				/* 1 if this node has been visited by one of the graph algorithms */
-	int reachable:1;			/* 1 if this node is reachable in the graph */
-	int indirect:1;				/* 1 if this node is not directly reachable by us */
-	int unused:26;
+	unsigned int unused_active:1;			/* 1 if active (not used for nodes) */
+	unsigned int validkey:1;				/* 1 if we currently have a valid key for him */
+	unsigned int unused_waitingforkey:1;		/* 1 if we already sent out a request */
+	unsigned int visited:1;				/* 1 if this node has been visited by one of the graph algorithms */
+	unsigned int reachable:1;			/* 1 if this node is reachable in the graph */
+	unsigned int indirect:1;				/* 1 if this node is not directly reachable by us */
+	unsigned int unused:26;
 } node_status_t;
 
 typedef struct node_t {
diff --git a/src/process.c b/src/process.c
index e74c1d9a..c6592371 100644
--- a/src/process.c
+++ b/src/process.c
@@ -25,6 +25,7 @@
 #include "device.h"
 #include "edge.h"
 #include "logger.h"
+#include "net.h"
 #include "node.h"
 #include "pidfile.h"
 #include "process.h"
@@ -41,10 +42,9 @@ extern char *identname;
 extern char *pidfilename;
 extern char **g_argv;
 extern bool use_logfile;
-extern volatile bool running;
 
 #ifndef HAVE_MINGW
-sigset_t emptysigset;
+static sigset_t emptysigset;
 #endif
 
 static int saved_debug_level = -1;
diff --git a/src/protocol.c b/src/protocol.c
index 9d7c349f..5de30d7d 100644
--- a/src/protocol.c
+++ b/src/protocol.c
@@ -189,7 +189,7 @@ void exit_requests(void) {
 }
 
 bool seen_request(char *request) {
-	past_request_t *new, p = {0};
+	past_request_t *new, p = {NULL};
 
 	p.request = request;
 
diff --git a/src/protocol.h b/src/protocol.h
index 2aed26d1..6c46c726 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -96,10 +96,10 @@ extern bool send_add_subnet(struct connection_t *, const struct subnet_t *);
 extern bool send_del_subnet(struct connection_t *, const struct subnet_t *);
 extern bool send_add_edge(struct connection_t *, const struct edge_t *);
 extern bool send_del_edge(struct connection_t *, const struct edge_t *);
-extern void send_key_changed();
+extern void send_key_changed(void);
 extern bool send_req_key(struct node_t *);
 extern bool send_ans_key(struct node_t *);
-extern bool send_tcppacket(struct connection_t *, struct vpn_packet_t *);
+extern bool send_tcppacket(struct connection_t *, const struct vpn_packet_t *);
 
 /* Request handlers  */
 
diff --git a/src/protocol_key.c b/src/protocol_key.c
index 6ff68d27..f34ebaa5 100644
--- a/src/protocol_key.c
+++ b/src/protocol_key.c
@@ -34,9 +34,9 @@
 #include "utils.h"
 #include "xalloc.h"
 
-bool mykeyused = false;
+static bool mykeyused = false;
 
-void send_key_changed() {
+void send_key_changed(void) {
 	avl_node_t *node;
 	connection_t *c;
 
diff --git a/src/protocol_misc.c b/src/protocol_misc.c
index 28571ef3..6f7ab03b 100644
--- a/src/protocol_misc.c
+++ b/src/protocol_misc.c
@@ -119,7 +119,7 @@ bool pong_h(connection_t *c) {
 
 /* Sending and receiving packets via TCP */
 
-bool send_tcppacket(connection_t *c, vpn_packet_t *packet) {
+bool send_tcppacket(connection_t *c, const vpn_packet_t *packet) {
 	/* If there already is a lot of data in the outbuf buffer, discard this packet.
            We use a very simple Random Early Drop algorithm. */
 
diff --git a/src/protocol_subnet.c b/src/protocol_subnet.c
index 9ae491d0..62656c38 100644
--- a/src/protocol_subnet.c
+++ b/src/protocol_subnet.c
@@ -45,7 +45,7 @@ bool add_subnet_h(connection_t *c) {
 	char subnetstr[MAX_STRING_SIZE];
 	char name[MAX_STRING_SIZE];
 	node_t *owner;
-	subnet_t s = {0}, *new, *old;
+	subnet_t s = {NULL}, *new, *old;
 
 	if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
 		logger(LOG_ERR, "Got bad %s from %s (%s)", "ADD_SUBNET", c->name,
@@ -154,7 +154,7 @@ bool del_subnet_h(connection_t *c) {
 	char subnetstr[MAX_STRING_SIZE];
 	char name[MAX_STRING_SIZE];
 	node_t *owner;
-	subnet_t s = {0}, *find;
+	subnet_t s = {NULL}, *find;
 
 	if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
 		logger(LOG_ERR, "Got bad %s from %s (%s)", "DEL_SUBNET", c->name,
diff --git a/src/raw_socket/device.c b/src/raw_socket/device.c
index f68e4619..abe368ad 100644
--- a/src/raw_socket/device.c
+++ b/src/raw_socket/device.c
@@ -23,6 +23,7 @@
 #include <netpacket/packet.h>
 
 #include "conf.h"
+#include "device.h"
 #include "net.h"
 #include "logger.h"
 #include "utils.h"
diff --git a/src/solaris/device.c b/src/solaris/device.c
index 3a50b169..0dfffb1b 100644
--- a/src/solaris/device.c
+++ b/src/solaris/device.c
@@ -26,6 +26,7 @@
 #include <net/if_tun.h>
 
 #include "conf.h"
+#include "device.h"
 #include "logger.h"
 #include "net.h"
 #include "utils.h"
diff --git a/src/subnet.c b/src/subnet.c
index 67be0010..f010e4ea 100644
--- a/src/subnet.c
+++ b/src/subnet.c
@@ -52,7 +52,7 @@ static subnet_t *cache_mac_subnet[2];
 static bool cache_mac_valid[2];
 static int cache_mac_slot;
 
-void subnet_cache_flush() {
+void subnet_cache_flush(void) {
 	cache_ipv4_valid[0] = cache_ipv4_valid[1] = false;
 	cache_ipv6_valid[0] = cache_ipv6_valid[1] = false;
 	cache_mac_valid[0] = cache_mac_valid[1] = false;
@@ -451,7 +451,7 @@ subnet_t *lookup_subnet_ipv6(const ipv6_t *address) {
 void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
 	avl_node_t *node;
 	int i;
-	char *envp[9] = {0};
+	char *envp[9] = {NULL};
 	char netstr[MAXNETSTR];
 	char *name, *address, *port;
 	char empty[] = "";
diff --git a/src/uml_socket/device.c b/src/uml_socket/device.c
index 59551b4f..a2da7575 100644
--- a/src/uml_socket/device.c
+++ b/src/uml_socket/device.c
@@ -23,6 +23,7 @@
 #include <sys/un.h>
 
 #include "conf.h"
+#include "device.h"
 #include "net.h"
 #include "logger.h"
 #include "utils.h"
diff --git a/src/vde/device.c b/src/vde/device.c
index 6148ccbe..63171f9a 100644
--- a/src/vde/device.c
+++ b/src/vde/device.c
@@ -22,6 +22,7 @@
 #include <libvdeplug_dyn.h>
 
 #include "conf.h"
+#include "device.h"
 #include "net.h"
 #include "logger.h"
 #include "utils.h"
-- 
2.39.5