void rmodifier_config_modifier_delete_cb (void *data, struct t_config_option *option) { struct t_rmodifier *ptr_rmodifier; /* make C compiler happy */ (void) data; ptr_rmodifier = rmodifier_search (weechat_config_option_get_pointer (option, "name")); if (ptr_rmodifier) rmodifier_free (ptr_rmodifier); }
int rmodifier_config_modifier_create_option_cb (void *data, struct t_config_file *config_file, struct t_config_section *section, const char *option_name, const char *value) { struct t_rmodifier *ptr_rmodifier; int rc; /* make C compiler happy */ (void) data; (void) config_file; (void) section; /* create rmodifier */ ptr_rmodifier = rmodifier_search (option_name); if (ptr_rmodifier) rmodifier_free (ptr_rmodifier); if (value && value[0]) { ptr_rmodifier = rmodifier_new_with_string (option_name, value); if (ptr_rmodifier) { rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; /* create option */ rmodifier_config_modifier_new_option (ptr_rmodifier->name, ptr_rmodifier->modifiers, ptr_rmodifier->str_regex, ptr_rmodifier->groups); } else rc = WEECHAT_CONFIG_OPTION_SET_ERROR; } else rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; if (rc == WEECHAT_CONFIG_OPTION_SET_ERROR) { weechat_printf (NULL, _("%s%s: error creating rmodifier " "\"%s\" => \"%s\""), weechat_prefix ("error"), RMODIFIER_PLUGIN_NAME, option_name, value); } return rc; }
struct t_rmodifier * rmodifier_new (const char *name, const char *modifiers, const char *str_regex, const char *groups) { struct t_rmodifier *new_rmodifier, *ptr_rmodifier; regex_t *regex; if (!name || !name[0] || !modifiers || !modifiers[0] || !str_regex || !str_regex[0]) { return NULL; } regex = malloc (sizeof (*regex)); if (!regex) return NULL; if (weechat_string_regcomp (regex, str_regex, REG_EXTENDED | REG_ICASE) != 0) { weechat_printf (NULL, _("%s%s: error compiling regular expression \"%s\""), weechat_prefix ("error"), RMODIFIER_PLUGIN_NAME, str_regex); free (regex); return NULL; } ptr_rmodifier = rmodifier_search (name); if (ptr_rmodifier) rmodifier_free (ptr_rmodifier); new_rmodifier = malloc (sizeof (*new_rmodifier)); if (new_rmodifier) { new_rmodifier->name = strdup (name); new_rmodifier->hooks = NULL; new_rmodifier->modifiers = strdup (modifiers); new_rmodifier->str_regex = strdup (str_regex); new_rmodifier->regex = regex; new_rmodifier->groups = strdup ((groups) ? groups : ""); /* create modifiers */ rmodifier_hook_modifiers (new_rmodifier); if (rmodifier_list) { /* add rmodifier to end of list */ new_rmodifier->prev_rmodifier = last_rmodifier; new_rmodifier->next_rmodifier = NULL; last_rmodifier->next_rmodifier = new_rmodifier; last_rmodifier = new_rmodifier; } else { new_rmodifier->prev_rmodifier = NULL; new_rmodifier->next_rmodifier = NULL; rmodifier_list = new_rmodifier; last_rmodifier = new_rmodifier; } rmodifier_count++; } return new_rmodifier; }