* src/filtering.c
* src/filtering.h
* src/prefs_filtering_action.c
Fix bug 1935, 'problems with very long filtering actions':
Use a dynamic buffer in action to string, and a bigger
buffer in string to action
+2009-06-29 [colin] 3.7.1cvs83
+
+ * src/filtering.c
+ * src/filtering.h
+ * src/prefs_filtering_action.c
+ Fix bug 1935, 'problems with very long filtering actions':
+ Use a dynamic buffer in action to string, and a bigger
+ buffer in string to action
+
2009-06-29 [colin] 3.7.1cvs82
* src/matcher_parser_lex.l
2009-06-29 [colin] 3.7.1cvs82
* src/matcher_parser_lex.l
( cvs diff -u -r 1.1.2.22 -r 1.1.2.23 src/ldapupdate.c; cvs diff -u -r 1.12.2.20 -r 1.12.2.21 src/ldif.c; ) > 3.7.1cvs80.patchset
( cvs diff -u -r 1.60.2.133 -r 1.60.2.134 src/addressbook.c; cvs diff -u -r 1.11.2.22 -r 1.11.2.23 src/editgroup.c; cvs diff -u -r 1.1.2.12 -r 1.1.2.13 src/gtk/gtkcmctree.c; cvs diff -u -r 1.1.4.56 -r 1.1.4.57 src/gtk/gtksctree.c; ) > 3.7.1cvs81.patchset
( cvs diff -u -r 1.16.2.13 -r 1.16.2.14 src/matcher_parser_lex.l; ) > 3.7.1cvs82.patchset
( cvs diff -u -r 1.1.2.22 -r 1.1.2.23 src/ldapupdate.c; cvs diff -u -r 1.12.2.20 -r 1.12.2.21 src/ldif.c; ) > 3.7.1cvs80.patchset
( cvs diff -u -r 1.60.2.133 -r 1.60.2.134 src/addressbook.c; cvs diff -u -r 1.11.2.22 -r 1.11.2.23 src/editgroup.c; cvs diff -u -r 1.1.2.12 -r 1.1.2.13 src/gtk/gtkcmctree.c; cvs diff -u -r 1.1.4.56 -r 1.1.4.57 src/gtk/gtksctree.c; ) > 3.7.1cvs81.patchset
( cvs diff -u -r 1.16.2.13 -r 1.16.2.14 src/matcher_parser_lex.l; ) > 3.7.1cvs82.patchset
+( cvs diff -u -r 1.60.2.52 -r 1.60.2.53 src/filtering.c; cvs diff -u -r 1.21.2.17 -r 1.21.2.18 src/filtering.h; cvs diff -u -r 1.1.4.60 -r 1.1.4.61 src/prefs_filtering_action.c; ) > 3.7.1cvs83.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
gboolean * final)
{
gboolean result = TRUE;
gboolean * final)
{
gboolean result = TRUE;
GSList * tmp;
* final = FALSE;
GSList * tmp;
* final = FALSE;
FilteringAction * action;
action = tmp->data;
FilteringAction * action;
action = tmp->data;
- filteringaction_to_string(buf, sizeof buf, action);
- if (debug_filtering_session)
- log_print(LOG_DEBUG_FILTERING, _("applying action [ %s ]\n"), buf);
+ buf = filteringaction_to_string(action);
+ if (debug_filtering_session)
+ log_print(LOG_DEBUG_FILTERING, _("applying action [ %s ]\n"), buf);
if (FALSE == (result = filteringaction_apply(action, info))) {
if (debug_filtering_session) {
if (FALSE == (result = filteringaction_apply(action, info))) {
if (debug_filtering_session) {
} else
g_warning("No further processing after rule %s\n", buf);
}
} else
g_warning("No further processing after rule %s\n", buf);
}
if (filtering_is_final_action(action)) {
* final = TRUE;
break;
}
if (filtering_is_final_action(action)) {
* final = TRUE;
break;
}
-gchar *filteringaction_to_string(gchar *dest, gint destlen, FilteringAction *action)
+gchar *filteringaction_to_string(FilteringAction *action)
{
const gchar *command_str;
gchar * quoted_dest;
gchar * quoted_header;
{
const gchar *command_str;
gchar * quoted_dest;
gchar * quoted_header;
+ GString *dest = g_string_new("");
+ gchar *deststr = NULL;
+
command_str = get_matchparser_tab_str(action->type);
if (command_str == NULL)
command_str = get_matchparser_tab_str(action->type);
if (command_str == NULL)
case MATCHACTION_SET_TAG:
case MATCHACTION_UNSET_TAG:
quoted_dest = matcher_quote_str(action->destination);
case MATCHACTION_SET_TAG:
case MATCHACTION_UNSET_TAG:
quoted_dest = matcher_quote_str(action->destination);
- g_snprintf(dest, destlen, "%s \"%s\"", command_str, quoted_dest);
+ g_string_append_printf(dest, "%s \"%s\"", command_str, quoted_dest);
case MATCHACTION_DELETE:
case MATCHACTION_MARK:
case MATCHACTION_DELETE:
case MATCHACTION_MARK:
case MATCHACTION_IGNORE:
case MATCHACTION_WATCH:
case MATCHACTION_CLEAR_TAGS:
case MATCHACTION_IGNORE:
case MATCHACTION_WATCH:
case MATCHACTION_CLEAR_TAGS:
- g_snprintf(dest, destlen, "%s", command_str);
- return dest;
+ g_string_append_printf(dest, "%s", command_str);
+ break;
case MATCHACTION_REDIRECT:
case MATCHACTION_FORWARD:
case MATCHACTION_FORWARD_AS_ATTACHMENT:
quoted_dest = matcher_quote_str(action->destination);
case MATCHACTION_REDIRECT:
case MATCHACTION_FORWARD:
case MATCHACTION_FORWARD_AS_ATTACHMENT:
quoted_dest = matcher_quote_str(action->destination);
- g_snprintf(dest, destlen, "%s %d \"%s\"", command_str, action->account_id, quoted_dest);
+ g_string_append_printf(dest, "%s %d \"%s\"", command_str, action->account_id, quoted_dest);
- g_snprintf(dest, destlen, "%s %d", command_str, action->labelcolor);
- return dest;
+ g_string_append_printf(dest, "%s %d", command_str, action->labelcolor);
+ break;
case MATCHACTION_CHANGE_SCORE:
case MATCHACTION_SET_SCORE:
case MATCHACTION_CHANGE_SCORE:
case MATCHACTION_SET_SCORE:
- g_snprintf(dest, destlen, "%s %d", command_str, action->score);
- return dest;
+ g_string_append_printf(dest, "%s %d", command_str, action->score);
+ break;
case MATCHACTION_ADD_TO_ADDRESSBOOK:
quoted_header = matcher_quote_str(action->header);
quoted_dest = matcher_quote_str(action->destination);
case MATCHACTION_ADD_TO_ADDRESSBOOK:
quoted_header = matcher_quote_str(action->header);
quoted_dest = matcher_quote_str(action->destination);
- g_snprintf(dest, destlen, "%s \"%s\" \"%s\"", command_str, quoted_header, quoted_dest);
+ g_string_append_printf(dest, "%s \"%s\" \"%s\"", command_str, quoted_header, quoted_dest);
g_free(quoted_dest);
g_free(quoted_header);
g_free(quoted_dest);
g_free(quoted_header);
+ deststr = dest->str;
+ g_string_free(dest, FALSE);
+ return deststr;
}
gchar * filteringaction_list_to_string(GSList * action_list)
{
gchar *action_list_str;
}
gchar * filteringaction_list_to_string(GSList * action_list)
{
gchar *action_list_str;
GSList * tmp;
gchar *list_str;
GSList * tmp;
gchar *list_str;
- action_str = filteringaction_to_string(buf,
- sizeof buf, action);
+ action_str = filteringaction_to_string(action);
if (action_list_str != NULL) {
list_str = g_strconcat(action_list_str, " ", action_str, NULL);
if (action_list_str != NULL) {
list_str = g_strconcat(action_list_str, " ", action_str, NULL);
else {
list_str = g_strdup(action_str);
}
else {
list_str = g_strdup(action_str);
}
action_list_str = list_str;
}
action_list_str = list_str;
}
gboolean filter_message_by_msginfo(GSList *flist, MsgInfo *info, PrefsAccount *ac_prefs,
FilteringInvocationType context, gchar *extra_info);
gboolean filter_message_by_msginfo(GSList *flist, MsgInfo *info, PrefsAccount *ac_prefs,
FilteringInvocationType context, gchar *extra_info);
-gchar * filteringaction_to_string(gchar *dest, gint destlen, FilteringAction *action);
+gchar * filteringaction_to_string(FilteringAction *action);
void prefs_filtering_write_config(void);
void prefs_filtering_read_config(void);
gchar * filteringaction_list_to_string(GSList * action_list);
void prefs_filtering_write_config(void);
void prefs_filtering_read_config(void);
gchar * filteringaction_list_to_string(GSList * action_list);
static void prefs_filtering_action_list_view_set_row(GtkTreeIter *row,
FilteringAction *action)
{
static void prefs_filtering_action_list_view_set_row(GtkTreeIter *row,
FilteringAction *action)
{
if (row == NULL && action == NULL) {
prefs_filtering_action_list_view_insert_action
if (row == NULL && action == NULL) {
prefs_filtering_action_list_view_insert_action
- filteringaction_to_string(buf, sizeof buf, action);
+ buf = filteringaction_to_string(action);
prefs_filtering_action_list_view_insert_action
(filtering_action.action_list_view,
row, buf, TRUE);
prefs_filtering_action_list_view_insert_action
(filtering_action.action_list_view,
row, buf, TRUE);