]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/as.c
location-importer.in: track original countries more pythonic
[people/ms/libloc.git] / src / as.c
index 947bfd2872b662aa7fce571328e689fe72f1f8c3..757bf3d3b742b19b29d426974beaf4813b953384 100644 (file)
--- a/src/as.c
+++ b/src/as.c
@@ -90,7 +90,13 @@ LOC_EXPORT const char* loc_as_get_name(struct loc_as* as) {
 }
 
 LOC_EXPORT int loc_as_set_name(struct loc_as* as, const char* name) {
-       as->name = strdup(name);
+       if (as->name)
+               free(as->name);
+
+       if (name)
+               as->name = strdup(name);
+       else
+               as->name = NULL;
 
        return 0;
 }
@@ -105,8 +111,8 @@ LOC_EXPORT int loc_as_cmp(struct loc_as* as1, struct loc_as* as2) {
        return 0;
 }
 
-int loc_as_new_from_database_v0(struct loc_ctx* ctx, struct loc_stringpool* pool,
-               struct loc_as** as, const struct loc_database_as_v0* dbobj) {
+int loc_as_new_from_database_v1(struct loc_ctx* ctx, struct loc_stringpool* pool,
+               struct loc_as** as, const struct loc_database_as_v1* dbobj) {
        uint32_t number = be32toh(dbobj->number);
 
        int r = loc_as_new(ctx, as, number);
@@ -123,8 +129,8 @@ int loc_as_new_from_database_v0(struct loc_ctx* ctx, struct loc_stringpool* pool
        return 0;
 }
 
-int loc_as_to_database_v0(struct loc_as* as, struct loc_stringpool* pool,
-               struct loc_database_as_v0* dbobj) {
+int loc_as_to_database_v1(struct loc_as* as, struct loc_stringpool* pool,
+               struct loc_database_as_v1* dbobj) {
        dbobj->number = htobe32(as->number);
 
        // Save the name string in the string pool
@@ -135,6 +141,14 @@ int loc_as_to_database_v0(struct loc_as* as, struct loc_stringpool* pool,
 }
 
 int loc_as_match_string(struct loc_as* as, const char* string) {
+       // Match all AS when no search string is set
+       if (!string)
+               return 1;
+
+       // Cannot match anything when name is not set
+       if (!as->name)
+               return 1;
+
        // Search if string is in name
        if (strcasestr(as->name, string) != NULL)
                return 1;