]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/writer.c
importer: Merge the downloader into our main downloader
[people/ms/libloc.git] / src / writer.c
index b52f74f73a0faec05beac15fedfeb8a6650f7cf7..13948c282dbd199bd8fc7417c8f06d5a24c1071a 100644 (file)
@@ -40,6 +40,7 @@
 #include <libloc/database.h>
 #include <libloc/format.h>
 #include <libloc/network.h>
+#include <libloc/network-tree.h>
 #include <libloc/private.h>
 #include <libloc/writer.h>
 
@@ -389,6 +390,8 @@ static void free_network(struct network* network) {
 
 static int loc_database_write_networks(struct loc_writer* writer,
                struct loc_database_header_v1* header, off_t* offset, FILE* f) {
+       int r;
+
        // Write the network tree
        DEBUG(writer->ctx, "Network tree starts at %jd bytes\n", (intmax_t)*offset);
        header->network_tree_offset = htobe32(*offset);
@@ -413,6 +416,11 @@ static int loc_database_write_networks(struct loc_writer* writer,
        TAILQ_HEAD(network_t, network) networks;
        TAILQ_INIT(&networks);
 
+       // Cleanup the tree before writing it
+       r = loc_network_tree_cleanup(writer->networks);
+       if (r)
+               return r;
+
        // Add root
        struct loc_network_tree_node* root = loc_network_tree_get_root(writer->networks);
        node = make_node(root);
@@ -496,7 +504,7 @@ static int loc_database_write_networks(struct loc_writer* writer,
                TAILQ_REMOVE(&networks, nw, networks);
 
                // Prepare what we are writing to disk
-               int r = loc_network_to_database_v1(nw->network, &db_network);
+               r = loc_network_to_database_v1(nw->network, &db_network);
                if (r)
                        return r;
 
@@ -747,7 +755,7 @@ LOC_EXPORT int loc_writer_write(struct loc_writer* writer, FILE* f, enum loc_dat
 
        if (writer->signature2_length) {
                DEBUG(writer->ctx, "Copying second signature of %zu byte(s)\n",
-                       writer->signature1_length);
+                       writer->signature2_length);
 
                memcpy(header.signature2, writer->signature2, writer->signature2_length);
                header.signature2_length = htobe16(writer->signature2_length);