2009-09-14 [colin] 3.7.2cvs32
[claws.git] / src / matcher.c
index ba8ee45d33b50bbb702acd7020c6c06a17c54976..8a7930b06af929c99201dec04525677487bfa795 100644 (file)
@@ -85,6 +85,10 @@ static const MatchParser matchparser_tab[] = {
        {MATCHCRITERIA_NOT_WATCH_THREAD, "~watch_thread"},
        {MATCHCRITERIA_SPAM, "spam"},
        {MATCHCRITERIA_NOT_SPAM, "~spam"},
+       {MATCHCRITERIA_HAS_ATTACHMENT, "has_attachment"},
+       {MATCHCRITERIA_HAS_NO_ATTACHMENT, "~has_attachment"},
+       {MATCHCRITERIA_SIGNED, "signed"},
+       {MATCHCRITERIA_NOT_SIGNED, "~signed"},
 
        /* msginfo headers */
        {MATCHCRITERIA_SUBJECT, "subject"},
@@ -351,7 +355,7 @@ static gboolean match_with_addresses_in_addressbook
        gboolean found = FALSE;
        gchar *path = NULL;
 
-       g_return_val_if_fail(address_list != NULL, FALSE);
+       cm_return_val_if_fail(address_list != NULL, FALSE);
 
        debug_print("match_with_addresses_in_addressbook(%d, %s)\n",
                                g_slist_length(address_list), folderpath?folderpath:"(null)");
@@ -798,6 +802,14 @@ gboolean matcherprop_match(MatcherProp *prop,
                return MSG_IS_SPAM(info->flags);
        case MATCHCRITERIA_NOT_SPAM:
                return !MSG_IS_SPAM(info->flags);
+       case MATCHCRITERIA_HAS_ATTACHMENT:
+               return MSG_IS_WITH_ATTACHMENT(info->flags);
+       case MATCHCRITERIA_HAS_NO_ATTACHMENT:
+               return !MSG_IS_WITH_ATTACHMENT(info->flags);
+       case MATCHCRITERIA_SIGNED:
+               return MSG_IS_SIGNED(info->flags);
+       case MATCHCRITERIA_NOT_SIGNED:
+               return !MSG_IS_SIGNED(info->flags);
        case MATCHCRITERIA_COLORLABEL:
        {
                gint color = MSG_GET_COLORLABEL_VALUE(info->flags);
@@ -1206,10 +1218,11 @@ void matcherlist_free(MatcherList *cond)
 {
        GSList *l;
 
-       g_return_if_fail(cond);
+       cm_return_if_fail(cond);
        for (l = cond->matchers ; l != NULL ; l = g_slist_next(l)) {
                matcherprop_free((MatcherProp *) l->data);
        }
+       g_slist_free(cond->matchers);
        g_free(cond);
 }
 
@@ -1685,6 +1698,10 @@ gboolean matcherlist_match(MatcherList *matchers, MsgInfo *info)
                case MATCHCRITERIA_NOT_LOCKED:
                case MATCHCRITERIA_SPAM:
                case MATCHCRITERIA_NOT_SPAM:
+               case MATCHCRITERIA_HAS_ATTACHMENT:
+               case MATCHCRITERIA_HAS_NO_ATTACHMENT:
+               case MATCHCRITERIA_SIGNED:
+               case MATCHCRITERIA_NOT_SIGNED:
                case MATCHCRITERIA_COLORLABEL:
                case MATCHCRITERIA_NOT_COLORLABEL:
                case MATCHCRITERIA_IGNORE_THREAD:
@@ -1880,6 +1897,10 @@ gchar *matcherprop_to_string(MatcherProp *matcher)
        case MATCHCRITERIA_NOT_LOCKED:
        case MATCHCRITERIA_SPAM:
        case MATCHCRITERIA_NOT_SPAM:
+       case MATCHCRITERIA_HAS_ATTACHMENT:
+       case MATCHCRITERIA_HAS_NO_ATTACHMENT:
+       case MATCHCRITERIA_SIGNED:
+       case MATCHCRITERIA_NOT_SIGNED:
        case MATCHCRITERIA_PARTIAL:
        case MATCHCRITERIA_NOT_PARTIAL:
        case MATCHCRITERIA_IGNORE_THREAD:
@@ -2002,9 +2023,9 @@ static void add_str_default(gchar ** dest,
 
 /* matching_build_command() - preferably cmd should be unescaped */
 /*!
- *\brief       Build the command line to execute
+ *\brief       Build the command-line to execute
  *
- *\param       cmd String with command line specifiers
+ *\param       cmd String with command-line specifiers
  *\param       info Message info to use for command
  *
  *\return      gchar * Newly allocated string
@@ -2371,8 +2392,17 @@ static void matcher_add_rulenames(const gchar *rcpath)
        FILE *dst = g_fopen(newpath, "wb");
        gchar buf[BUFFSIZE];
        int r;
+       if (src == NULL) {
+               perror("fopen");
+               if (dst)
+                       fclose(dst);
+               g_free(newpath);
+               return;
+       }
        if (dst == NULL) {
                perror("fopen");
+               if (src)
+                       fclose(src);
                g_free(newpath);
                return;
        }