Lines Matching refs:cm

183 mapper_close(struct _citrus_mapper *cm)  in mapper_close()  argument
185 if (cm->cm_module) { in mapper_close()
186 if (cm->cm_ops) { in mapper_close()
187 if (cm->cm_closure) in mapper_close()
188 (*cm->cm_ops->mo_uninit)(cm); in mapper_close()
189 free(cm->cm_ops); in mapper_close()
191 _citrus_unload_module(cm->cm_module); in mapper_close()
193 free(cm->cm_traits); in mapper_close()
194 free(cm); in mapper_close()
207 struct _citrus_mapper *cm; in mapper_open() local
212 cm = malloc(sizeof(*cm)); in mapper_open()
213 if (!cm) in mapper_open()
216 cm->cm_module = NULL; in mapper_open()
217 cm->cm_ops = NULL; in mapper_open()
218 cm->cm_closure = NULL; in mapper_open()
219 cm->cm_traits = NULL; in mapper_open()
220 cm->cm_refcount = 0; in mapper_open()
221 cm->cm_key = NULL; in mapper_open()
224 ret = _citrus_load_module(&cm->cm_module, module); in mapper_open()
230 _citrus_find_getops(cm->cm_module, module, "mapper"); in mapper_open()
235 cm->cm_ops = malloc(sizeof(*cm->cm_ops)); in mapper_open()
236 if (!cm->cm_ops) { in mapper_open()
240 ret = (*getops)(cm->cm_ops); in mapper_open()
244 if (!cm->cm_ops->mo_init || in mapper_open()
245 !cm->cm_ops->mo_uninit || in mapper_open()
246 !cm->cm_ops->mo_convert || in mapper_open()
247 !cm->cm_ops->mo_init_state) { in mapper_open()
253 cm->cm_traits = malloc(sizeof(*cm->cm_traits)); in mapper_open()
254 if (cm->cm_traits == NULL) { in mapper_open()
259 ret = (*cm->cm_ops->mo_init)(ma, cm, ma->ma_dir, in mapper_open()
261 cm->cm_traits, sizeof(*cm->cm_traits)); in mapper_open()
265 *rcm = cm; in mapper_open()
270 mapper_close(cm); in mapper_open()
301 match_func(struct _citrus_mapper *cm, const char *key) in match_func() argument
304 return (strcmp(cm->cm_key, key)); in match_func()
316 struct _citrus_mapper *cm; in _citrus_mapper_open() local
327 _CITRUS_HASH_SEARCH(&ma->ma_cache, cm, cm_entry, match_func, mapname, in _citrus_mapper_open()
329 if (cm) { in _citrus_mapper_open()
331 cm->cm_refcount++; in _citrus_mapper_open()
332 *rcm = cm; in _citrus_mapper_open()
345 ret = mapper_open(ma, &cm, module, variable); in _citrus_mapper_open()
349 cm->cm_key = strdup(mapname); in _citrus_mapper_open()
350 if (cm->cm_key == NULL) { in _citrus_mapper_open()
352 _mapper_close(cm); in _citrus_mapper_open()
357 cm->cm_refcount = 1; in _citrus_mapper_open()
358 _CITRUS_HASH_INSERT(&ma->ma_cache, cm, cm_entry, hashval); in _citrus_mapper_open()
360 *rcm = cm; in _citrus_mapper_open()
373 _citrus_mapper_close(struct _citrus_mapper *cm) in _citrus_mapper_close() argument
376 if (cm) { in _citrus_mapper_close()
378 if (cm->cm_refcount == REFCOUNT_PERSISTENT) in _citrus_mapper_close()
380 if (cm->cm_refcount > 0) { in _citrus_mapper_close()
381 if (--cm->cm_refcount > 0) in _citrus_mapper_close()
383 _CITRUS_HASH_REMOVE(cm, cm_entry); in _citrus_mapper_close()
384 free(cm->cm_key); in _citrus_mapper_close()
387 mapper_close(cm); in _citrus_mapper_close()
399 _citrus_mapper_set_persistent(struct _citrus_mapper * __restrict cm) in _citrus_mapper_set_persistent() argument
403 cm->cm_refcount = REFCOUNT_PERSISTENT; in _citrus_mapper_set_persistent()