Lines Matching refs:iter
129 struct fs_dict_iterate_context *iter;
137 iter = i_new(struct fs_dict_iterate_context, 1);
138 iter->ctx.dict = _dict;
139 iter->paths = p_strarray_dup(default_pool, paths);
140 iter->flags = flags;
141 iter->value_pool = pool_alloconly_create("iterate value pool", 128);
142 iter->fs_iter = fs_iter_init(dict->fs,
144 return &iter->ctx;
150 struct fs_dict_iterate_context *iter =
156 if (iter->error != NULL)
159 *key_r = fs_iter_next(iter->fs_iter);
161 if (fs_iter_deinit(&iter->fs_iter) < 0) {
162 iter->error = i_strdup(fs_last_error(dict->fs));
165 if (iter->paths[++iter->path_idx] == NULL)
167 path = fs_dict_get_full_key(dict, iter->paths[iter->path_idx]);
168 iter->fs_iter = fs_iter_init(dict->fs, path, 0);
171 if ((iter->flags & DICT_ITERATE_FLAG_NO_VALUE) != 0) {
175 p_clear(iter->value_pool);
176 path = t_strconcat(iter->paths[iter->path_idx], *key_r, NULL);
177 if ((ret = fs_dict_lookup(ctx->dict, iter->value_pool, path, value_r, &error)) < 0) {
179 iter->error = i_strdup(error);
191 struct fs_dict_iterate_context *iter =
196 if (iter->fs_iter != NULL) {
197 if (fs_iter_deinit(&iter->fs_iter) < 0 && iter->error == NULL)
198 iter->error = i_strdup(fs_last_error(dict->fs));
200 ret = iter->error != NULL ? -1 : 0;
201 *error_r = t_strdup(iter->error);
203 pool_unref(&iter->value_pool);
204 i_free(iter->paths);
205 i_free(iter->error);
206 i_free(iter);