void api_register ( const api_hook_t *hook ) { api_link_t *t; SKEL_ALLOC(api_skel); api_skel->hook = hook; t = RB_INSERT_SORTED(&api_hook_tree, api_skel, link, ah_cmp); if (t) { tvherror("api", "trying to re-register subsystem"); } else { SKEL_USED(api_skel); } }
/* Internal insertion routine */ static int _lang_str_add ( lang_str_t *ls, const char *str, const char *lang, int update, int append ) { int save = 0; lang_str_ele_t *e; if (!str) return 0; /* Get proper code */ if (!lang) lang = lang_code_preferred(); if (!(lang = lang_code_get(lang))) return 0; /* Create skel */ SKEL_ALLOC(lang_str_ele_skel); lang_str_ele_skel->lang = lang; /* Create */ e = RB_INSERT_SORTED(ls, lang_str_ele_skel, link, _lang_cmp); if (!e) { lang_str_ele_skel->str = strdup(str); SKEL_USED(lang_str_ele_skel); save = 1; /* Append */ } else if (append) { e->str = realloc(e->str, strlen(e->str) + strlen(str) + 1); strcat(e->str, str); save = 1; /* Update */ } else if (update && strcmp(str, e->str)) { free(e->str); e->str = strdup(str); save = 1; } return save; }