#include "defs.h"
+#ifdef G_OS_WIN32
+#define UNICODE
+#define _UNICODE
+#endif
+
#include <glib.h>
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
#include <sys/types.h>
#include <sys/stat.h>
-#ifndef HAVE_APACHE_FNMATCH
-/* kludge: apache's fnmatch clashes with <regex.h>, don't include
- * fnmatch.h */
-#include <fnmatch.h>
-#endif
-
#include "main.h"
#include "mimeview.h"
#include "textview.h"
GSList *cur;
MimeViewerFactory *factory = NULL;
MimeViewer *viewer = NULL;
- gchar *real_contenttype = NULL;
+ gchar *real_contenttype = NULL, *tmp;
-/*
- * FNM_CASEFOLD is a GNU extension
- */
-#ifndef FNM_CASEFOLD
-#define FNM_CASEFOLD 0
real_contenttype = g_utf8_strdown((gchar *)content_type, -1);
-#else
- real_contenttype = g_strdup(content_type);
-#endif
for (cur = mimeviewer_factories; cur != NULL; cur = g_slist_next(cur)) {
MimeViewerFactory *curfactory = cur->data;
gint i = 0;
while (curfactory->content_types[i] != NULL) {
- if(!fnmatch(curfactory->content_types[i], real_contenttype, FNM_CASEFOLD)) {
+ tmp = g_utf8_strdown(curfactory->content_types[i], -1);
+ if (g_pattern_match_simple(tmp, real_contenttype)) {
debug_print("%s\n", curfactory->content_types[i]);
factory = curfactory;
+ g_free(tmp);
break;
}
+ g_free(tmp);
i++;
}
if (factory != NULL)
MimeInfo *partinfo = NULL;
gboolean has_next;
+ if (!mimeview->opened) return;
+
gtk_tree_model_get_iter(model, &iter, mimeview->opened);
path = gtk_tree_model_get_path(model, &iter);
skip:
MimeInfo *partinfo = NULL;
gboolean has_prev;
+ if (!mimeview->opened) return;
+
gtk_tree_model_get_iter(model, &iter, mimeview->opened);
path = gtk_tree_model_get_path(model, &iter);
skip:
#ifndef G_OS_WIN32
gchar *p;
gchar buf[BUFFSIZE];
+
if (cmd == NULL)
mimeview_open_part_with(mimeview, partinfo, TRUE);
else {
}
#else
SHFILEINFO file_info;
- if ((SHGetFileInfo(filename, 0, &file_info, sizeof(SHFILEINFO), SHGFI_EXETYPE)) != 0) {
+ GError *error = NULL;
+ gunichar2 *fn16 = g_utf8_to_utf16(filename, -1, NULL, NULL, &error);
+
+ if (error != NULL) {
+ alertpanel_error(_("Could not convert attachment name to UTF-16:\n\n%s"),
+ error->message);
+ debug_print("filename '%s' conversion to UTF-16 failed\n", filename);
+ g_error_free(error);
+ return;
+ }
+
+ if ((SHGetFileInfo((LPCWSTR)fn16, 0, &file_info, sizeof(SHFILEINFO), SHGFI_EXETYPE)) != 0) {
AlertValue val = alertpanel_full(_("Execute untrusted binary?"),
_("This attachment is an executable file. Executing "
"untrusted binaries is dangerous and could probably "
NULL, FALSE, NULL, ALERT_WARNING, G_ALERTDEFAULT);
if (val == G_ALERTALTERNATE) {
debug_print("executing binary\n");
- ShellExecute(NULL, "open", filename, NULL, NULL, SW_SHOW);
+ ShellExecute(NULL, L"open", (LPCWSTR)fn16, NULL, NULL, SW_SHOW);
}
- } else
- ShellExecute(NULL, "open", filename, NULL, NULL, SW_SHOW);
+ } else {
+ ShellExecute(NULL, L"open", (LPCWSTR)fn16, NULL, NULL, SW_SHOW);
+ }
+
+ g_free(fn16);
#endif
}