2004-11-13 [paul] 0.9.12cvs146.8
[claws.git] / src / procmime.c
index 02b7f2b09563f31c7f4039ca9c5f11236f8a7496..b9b49b8ca047c32694d7fd0e1ac78bfbe0fbeb45 100644 (file)
@@ -738,28 +738,24 @@ FILE *procmime_get_first_text_content(MsgInfo *msginfo)
 }
 
 gboolean procmime_find_string_part(MimeInfo *mimeinfo, const gchar *filename,
-                                  const gchar *str, gboolean case_sens)
+                                  const gchar *str, StrFindFunc find_func)
 {
        FILE *outfp;
        gchar buf[BUFFSIZE];
-       gchar *(* StrFindFunc) (const gchar *haystack, const gchar *needle);
 
        g_return_val_if_fail(mimeinfo != NULL, FALSE);
        g_return_val_if_fail(mimeinfo->type == MIMETYPE_TEXT, FALSE);
        g_return_val_if_fail(str != NULL, FALSE);
+       g_return_val_if_fail(find_func != NULL, FALSE);
 
        outfp = procmime_get_text_content(mimeinfo);
 
        if (!outfp)
                return FALSE;
 
-       if (case_sens)
-               StrFindFunc = strstr;
-       else
-               StrFindFunc = strcasestr;
-
        while (fgets(buf, sizeof(buf), outfp) != NULL) {
-               if (StrFindFunc(buf, str) != NULL) {
+               strretchomp(buf);
+               if (find_func(buf, str)) {
                        fclose(outfp);
                        return TRUE;
                }
@@ -771,7 +767,7 @@ gboolean procmime_find_string_part(MimeInfo *mimeinfo, const gchar *filename,
 }
 
 gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
-                             gboolean case_sens)
+                             StrFindFunc find_func)
 {
        MimeInfo *mimeinfo;
        MimeInfo *partinfo;
@@ -780,6 +776,7 @@ gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
 
        g_return_val_if_fail(msginfo != NULL, FALSE);
        g_return_val_if_fail(str != NULL, FALSE);
+       g_return_val_if_fail(find_func != NULL, FALSE);
 
        filename = procmsg_get_message_file(msginfo);
        if (!filename) return FALSE;
@@ -789,7 +786,7 @@ gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
             partinfo = procmime_mimeinfo_next(partinfo)) {
                if (partinfo->type == MIMETYPE_TEXT) {
                        if (procmime_find_string_part
-                               (partinfo, filename, str, case_sens) == TRUE) {
+                               (partinfo, filename, str, find_func) == TRUE) {
                                found = TRUE;
                                break;
                        }
@@ -805,7 +802,7 @@ gboolean procmime_find_string(MsgInfo *msginfo, const gchar *str,
 gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo)
 {
        static guint32 id = 0;
-       const gchar *base;
+       gchar *base;
        gchar *filename;
        gchar f_prefix[10];
 
@@ -817,16 +814,18 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo)
                base = "mimetmp.html";
        else {
                const gchar *basetmp;
+               gchar *basename;
 
                basetmp = procmime_mimeinfo_get_parameter(mimeinfo, "filename");
                if (basetmp == NULL)
                        basetmp = procmime_mimeinfo_get_parameter(mimeinfo, "name");
                if (basetmp == NULL)
                        basetmp = "mimetmp";
-               base = g_basename(basetmp);
+               basename = g_path_get_basename(basetmp);
                if (*base == '\0') base = "mimetmp";
-               Xstrdup_a(base, base, return NULL);
+               Xstrdup_a(base, basename, {g_free(basename); return NULL;});
                subst_for_shellsafe_filename(base);
+               g_free(basename);
        }
 
        filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
@@ -843,14 +842,16 @@ gchar *procmime_get_mime_type(const gchar *filename)
        MimeType *mime_type;
        const gchar *p;
        gchar *ext;
+       gchar *base;
 
        if (!mime_type_table) {
                mime_type_table = procmime_get_mime_type_table();
                if (!mime_type_table) return NULL;
        }
 
-       filename = g_basename(filename);
-       p = strrchr(filename, '.');
+       base = g_path_get_basename(filename);
+       p = strrchr(base, '.');
+       g_free(base);
        if (!p) return NULL;
 
        Xstrdup_a(ext, p + 1, return NULL);