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;
}