dt_status_t tzmap_map()

in src/tzmapping.c [124:161]


dt_status_t tzmap_map(const char *tz_name, tz_aliases_t **aliases)
{
    tz_aliases_t *list = NULL;
    tz_alias_iterator_t **insertPosition = NULL;
    tz_alias_iterator_t *it = TZMAP_BEGIN;
    tz_alias_t *alias = NULL;
    size_t size = 0;

    if (tz_name == NULL || aliases == NULL) {
        return DT_INVALID_ARGUMENT;
    }

    list = (tz_aliases_t *)malloc(sizeof(tz_aliases_t));
    memset(list, 0, sizeof(tz_aliases_t));
    *aliases = list;
    insertPosition = add_mapping_to_aliases(tz_name, list, insertPosition);
    while (size != mapping_size(list)) {
        while (tzmap_iterate(list, &it, &alias) == DT_OK) {
            if (alias->kind == DT_TZMAP_ABBREVIATION) {
                continue;
            }
            if (strcmp(alias->name, tz_name) == 0) {
                continue;
            }
            insertPosition = add_mapping_to_aliases(alias->name, list, insertPosition);
        }
        size = mapping_size(list);

    }

    if (list->begin.next == NULL) {
        tzmap_free(list);
        *aliases = NULL;
        return DT_TIMEZONE_NOT_FOUND;
    }
    return DT_OK;

}