Lines Matching refs:list

27 	struct master_instance_list *list;
39 struct master_instance_list *list;
43 list = p_new(pool, struct master_instance_list, 1);
44 list->pool = pool;
45 list->path = p_strdup(pool, path);
46 p_array_init(&list->instances, pool, 8);
47 return list;
52 struct master_instance_list *list = *_list;
55 pool_unref(&list->pool);
59 master_instance_update_config_path(struct master_instance_list *list,
73 inst->config_path = p_strdup(list->pool, config_path);
74 list->config_paths_changed = TRUE;
79 master_instance_list_add_line(struct master_instance_list *list,
93 inst = array_append_space(&list->instances);
95 inst->name = p_strdup(list->pool, args[1]);
96 inst->base_dir = p_strdup(list->pool, args[2]);
97 inst->config_path = p_strdup_empty(list->pool, args[3]);
98 master_instance_update_config_path(list, inst);
102 static int master_instance_list_refresh(struct master_instance_list *list)
108 array_clear(&list->instances);
110 fd = open(list->path, O_RDONLY);
115 i_error("open(%s) failed: %m", list->path);
120 if (master_instance_list_add_line(list, line) < 0)
121 i_error("Invalid line in %s: %s", list->path, line);
132 master_instance_list_write(struct master_instance_list *list,
142 array_foreach(&list->instances, inst) {
162 static int master_instance_write_init(struct master_instance_list *list,
167 i_assert(!list->locked);
171 fd = file_dotlock_open_mode(&dotlock_set, list->path, 0, 0644,
174 i_error("file_dotlock_open(%s) failed: %m", list->path);
177 if (master_instance_list_refresh(list) < 0) {
181 list->locked = TRUE;
185 static int master_instance_write_finish(struct master_instance_list *list,
191 i_assert(list->locked);
194 ret = master_instance_list_write(list, fd, lock_path);
197 list->locked = FALSE;
207 list->config_paths_changed = FALSE;
212 master_instance_find(struct master_instance_list *list,
217 array_foreach_modifiable(&list->instances, inst) {
224 int master_instance_list_update(struct master_instance_list *list,
231 if ((fd = master_instance_write_init(list, &dotlock)) == -1)
234 inst = master_instance_find(list, base_dir);
236 inst = array_append_space(&list->instances);
238 inst->base_dir = p_strdup(list->pool, base_dir);
241 master_instance_update_config_path(list, inst);
243 return master_instance_write_finish(list, fd, &dotlock);
246 int master_instance_list_set_name(struct master_instance_list *list,
256 if ((fd = master_instance_write_init(list, &dotlock)) == -1)
259 orig_inst = master_instance_list_find_by_name(list, name);
264 list->locked = FALSE;
268 inst = master_instance_find(list, base_dir);
270 inst = array_append_space(&list->instances);
271 inst->base_dir = p_strdup(list->pool, base_dir);
273 inst->name = p_strdup(list->pool, name);
276 return master_instance_write_finish(list, fd, &dotlock) < 0 ? -1 : 1;
279 int master_instance_list_remove(struct master_instance_list *list,
287 if ((fd = master_instance_write_init(list, &dotlock)) == -1)
290 instances = array_get(&list->instances, &count);
293 array_delete(&list->instances, i, 1);
300 list->locked = FALSE;
303 return master_instance_write_finish(list, fd, &dotlock) < 0 ? -1 : 1;
307 master_instance_list_refresh_and_update(struct master_instance_list *list)
312 if (master_instance_list_refresh(list) < 0)
314 if (list->config_paths_changed && !list->locked) {
316 if ((fd = master_instance_write_init(list, &dotlock)) == -1)
318 if (master_instance_write_finish(list, fd, &dotlock) < 0)
325 master_instance_list_find_by_name(struct master_instance_list *list,
332 if (array_count(&list->instances) == 0)
333 (void)master_instance_list_refresh_and_update(list);
335 array_foreach(&list->instances, inst) {
343 master_instance_list_iterate_init(struct master_instance_list *list)
348 iter->list = list;
349 (void)master_instance_list_refresh_and_update(list);
356 if (iter->idx == array_count(&iter->list->instances))
358 return array_idx(&iter->list->instances, iter->idx++);