From 9b394bc887695da6db74f4b9796b4823e553f8cc Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Tue, 8 Sep 2009 21:45:24 +0200 Subject: [PATCH] Ensure tinc compiles with gcc -std=c99. We use a lot of C99 features already, but also some extensions which are not in the standard. --- configure.in | 2 +- src/connection.c | 4 ++-- src/connection.h | 25 +++++++++++-------------- src/net.c | 2 +- src/node.h | 19 ++++++++----------- 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/configure.in b/configure.in index 3cb6a4de..964dd27a 100644 --- a/configure.in +++ b/configure.in @@ -21,7 +21,7 @@ AC_DEFINE([__USE_BSD], 1, [Enable BSD extensions]) ALL_LINGUAS="nl" dnl Checks for programs. -AC_PROG_CC +AC_PROG_CC_C99 AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S diff --git a/src/connection.c b/src/connection.c index a2a188a6..430e1c14 100644 --- a/src/connection.c +++ b/src/connection.c @@ -37,7 +37,7 @@ connection_t *broadcast; static int connection_compare(const connection_t *a, const connection_t *b) { - return (void *)a - (void *)b; + return a - b; } void init_connections(void) @@ -144,7 +144,7 @@ void dump_connections(void) for(node = connection_tree->head; node; node = node->next) { c = node->data; logger(LOG_DEBUG, _(" %s at %s options %lx socket %d status %04x outbuf %d/%d/%d"), - c->name, c->hostname, c->options, c->socket, c->status.value, + c->name, c->hostname, c->options, c->socket, *(uint32_t *)&c->status, c->outbufsize, c->outbufstart, c->outbuflen); } diff --git a/src/connection.h b/src/connection.h index 087d8f00..8948d4fa 100644 --- a/src/connection.h +++ b/src/connection.h @@ -32,20 +32,17 @@ #define OPTION_TCPONLY 0x0002 #define OPTION_PMTU_DISCOVERY 0x0004 -typedef union connection_status_t { - struct { - 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; - }; - uint32_t value; +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; } connection_status_t; #include "edge.h" diff --git a/src/net.c b/src/net.c index 4a2af954..910e86dd 100644 --- a/src/net.c +++ b/src/net.c @@ -251,7 +251,7 @@ static void check_dead_connections(void) } else { if(c->status.remove) { logger(LOG_WARNING, _("Old connection_t for %s (%s) status %04x still lingering, deleting..."), - c->name, c->hostname, c->status.value); + c->name, c->hostname, *(uint32_t *)&c->status); connection_del(c); continue; } diff --git a/src/node.h b/src/node.h index 4321c008..528716de 100644 --- a/src/node.h +++ b/src/node.h @@ -29,17 +29,14 @@ #include "list.h" #include "subnet.h" -typedef union node_status_t { - struct { - 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 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; - }; - uint32_t value; +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 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; } node_status_t; typedef struct node_t { -- 2.20.1