Fix issues found by Coverity.
[oweals/tinc.git] / src / graph.c
index a15e5c700c95a1429c4a36bb93732c306792e86f..73dadc47f6152c300a4f9924536d9474ca22c489 100644 (file)
@@ -45,7 +45,7 @@
 #include "system.h"
 
 #include "avl_tree.h"
-#include "config.h"
+#include "conf.h"
 #include "connection.h"
 #include "device.h"
 #include "edge.h"
@@ -212,9 +212,13 @@ static void sssp_bfs(void) {
                           && (!e->to->status.indirect || indirect))
                                continue;
 
+                       // Only update nexthop the first time we visit this node.
+
+                       if(!e->to->status.visited)
+                               e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop;
+
                        e->to->status.visited = true;
                        e->to->status.indirect = indirect;
-                       e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop;
                        e->to->prevedge = e;
                        e->to->via = indirect ? n->via : e->to;
                        e->to->options = e->options;
@@ -336,6 +340,7 @@ void dump_graph(void) {
 
        if(!file) {
                logger(LOG_ERR, "Unable to open graph dump file %s: %s", filename, strerror(errno));
+               free(filename);
                free(tmpname);
                return;
        }
@@ -363,7 +368,10 @@ void dump_graph(void) {
 #ifdef HAVE_MINGW
                unlink(filename);
 #endif
-               rename(tmpname, filename);
+               if(rename(tmpname, filename))
+                       logger(LOG_ERR, "Could not rename %s to %s: %s\n", tmpname, filename, strerror(errno));
                free(tmpname);
        }
+
+       free(filename);
 }