void * atf_list_index(atf_list_t *list, const size_t idx) { atf_list_iter_t iter; PRE(idx < atf_list_size(list)); iter = atf_list_begin(list); { size_t pos = 0; while (pos < idx && !atf_equal_list_iter_list_iter((iter), atf_list_end(list))) { iter = atf_list_iter_next(iter); pos++; } } return atf_list_iter_data(iter); }
static void check_split(const char *str, const char *delim, const char *words[]) { atf_list_t list; const char **word; size_t i; printf("Splitting '%s' with delimiter '%s'\n", str, delim); CE(atf_text_split(str, delim, &list)); printf("Expecting %zd words\n", array_size(words)); ATF_CHECK_EQ(atf_list_size(&list), array_size(words)); for (word = words, i = 0; *word != NULL; word++, i++) { printf("Word at position %zd should be '%s'\n", i, words[i]); ATF_CHECK_STREQ((const char *)atf_list_index_c(&list, i), words[i]); } atf_list_fini(&list); }
static atf_error_t list_to_array(const atf_list_t *l, char ***ap) { atf_error_t err; char **a; a = (char **)malloc((atf_list_size(l) + 1) * sizeof(char *)); if (a == NULL) err = atf_no_memory_error(); else { char **aiter; atf_list_citer_t liter; aiter = a; atf_list_for_each_c(liter, l) { *aiter = strdup((const char *)atf_list_citer_data(liter)); aiter++; } *aiter = NULL; err = atf_no_error(); }