aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-identify.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-identify.c')
-rw-r--r--mail/mail-identify.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/mail/mail-identify.c b/mail/mail-identify.c
index f8c7f65231..ba8a943f38 100644
--- a/mail/mail-identify.c
+++ b/mail/mail-identify.c
@@ -32,6 +32,20 @@
#include <libgnomevfs/gnome-vfs-mime-sniff-buffer.h>
#include "mail.h"
+/* gnome-vfs 0.2 has a bug that makes memory-based sniff buffers cause
+ * segfaults sometimes. It's fixed in CVS, but we'll work around it for
+ * now until gnome-vfs 0.3 comes out.
+ */
+#define GNOME_VFS_0_2_WORKAROUND
+
+#ifdef GNOME_VFS_0_2_WORKAROUND
+#include <libgnomevfs/gnome-vfs-mime-sniff-buffer-private.h>
+
+static GnomeVFSResult sniffer_seek (gpointer context,
+ GnomeVFSSeekPosition whence,
+ GnomeVFSFileOffset offset);
+#endif
+
/**
* mail_identify_mime_part:
* @part: a CamelMimePart
@@ -80,6 +94,9 @@ mail_identify_mime_part (CamelMimePart *part)
if (ba->len) {
sniffer = gnome_vfs_mime_sniff_buffer_new_from_memory (
ba->data, ba->len);
+#ifdef GNOME_VFS_0_2_WORKAROUND
+ sniffer->seek = sniffer_seek;
+#endif
type = gnome_vfs_get_mime_type_for_buffer (sniffer);
gnome_vfs_mime_sniff_buffer_free (sniffer);
} else
@@ -99,3 +116,12 @@ mail_identify_mime_part (CamelMimePart *part)
/* We give up. */
return NULL;
}
+
+#ifdef GNOME_VFS_0_2_WORKAROUND
+static GnomeVFSResult
+sniffer_seek (gpointer context, GnomeVFSSeekPosition whence,
+ GnomeVFSFileOffset offset)
+{
+ return GNOME_VFS_ERROR_EOF;
+}
+#endif