struct strlist *strlist__new(bool dupstr, const char *slist)
{
    struct strlist *self = malloc(sizeof(*self));

    if (self != NULL) {
        self->entries	 = RB_ROOT;
        self->dupstr	 = dupstr;
        self->nr_entries = 0;
        if (slist && strlist__parse_list(self, slist) != 0)
            goto out_error;
    }

    return self;
out_error:
    free(self);
    return NULL;
}
struct strlist *strlist__new(bool dupstr, const char *list)
{
	struct strlist *slist = malloc(sizeof(*slist));

	if (slist != NULL) {
		rblist__init(&slist->rblist);
		slist->rblist.node_cmp    = strlist__node_cmp;
		slist->rblist.node_new    = strlist__node_new;
		slist->rblist.node_delete = strlist__node_delete;

		slist->dupstr	 = dupstr;
		if (list && strlist__parse_list(slist, list) != 0)
			goto out_error;
	}

	return slist;
out_error:
	free(slist);
	return NULL;
}