From: Michael Tremer Date: Sun, 7 Jan 2018 20:21:16 +0000 (+0000) Subject: database: Load networks from database X-Git-Tag: 0.9.0~120 X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Flibloc.git;a=commitdiff_plain;h=a735a563386d03ce8cb82b7af10bc5aa21543d8b;hp=edb4ba7c17b1d0f09240626effb2476bc78f36b2 database: Load networks from database Signed-off-by: Michael Tremer --- diff --git a/src/database.c b/src/database.c index 6d39937..f789c69 100644 --- a/src/database.c +++ b/src/database.c @@ -50,6 +50,10 @@ struct loc_database { struct loc_database_network_node_v0* network_nodes_v0; size_t network_nodes_count; + // Networks + struct loc_database_network_v0* networks_v0; + size_t networks_count; + struct loc_stringpool* pool; }; @@ -128,6 +132,29 @@ static int loc_database_read_network_nodes_section_v0(struct loc_database* db, return 0; } +static int loc_database_read_networks_section_v0(struct loc_database* db, + FILE* f, const struct loc_database_header_v0* header) { + off_t networks_offset = be32toh(header->network_data_offset); + size_t networks_length = be32toh(header->network_data_length); + + DEBUG(db->ctx, "Reading networks section from %jd (%zu bytes)\n", + networks_offset, networks_length); + + if (networks_length > 0) { + db->networks_v0 = mmap(NULL, networks_length, PROT_READ, + MAP_SHARED, fileno(f), networks_offset); + + if (db->networks_v0 == MAP_FAILED) + return -errno; + } + + db->networks_count = networks_length / sizeof(*db->networks_v0); + + INFO(db->ctx, "Read %zu networks from the database\n", db->networks_count); + + return 0; +} + static int loc_database_read_header_v0(struct loc_database* db, FILE* f) { struct loc_database_header_v0 header; @@ -163,6 +190,11 @@ static int loc_database_read_header_v0(struct loc_database* db, FILE* f) { if (r) return r; + // Networks + r = loc_database_read_networks_section_v0(db, f, &header); + if (r) + return r; + return 0; }