Package: mime-support
Version: 3.39-1
Followup-For: Bug #77985

Attached, a patch to run-mailcap to use current file (4.23) to find the
MIME type of a file as a first guess.

-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (700, 'stable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-5-k7
Locale: LANG=en_GB, LC_CTYPE=en_GB (charmap=ISO-8859-1)

mime-support depends on no packages.

Versions of packages mime-support recommends:
ii  file                          4.21-3     Determines file type using "magic"

-- no debconf information
--- /usr/bin/run-mailcap        2008-04-01 19:11:34.000000000 +0100
+++ /usr/local/bin/run-mailcap  2008-01-12 20:01:18.000000000 +0000
@@ -16,7 +16,7 @@
 $locmimetyp="/usr/local/etc/mime.types";
 $usrmimetyp="$ENV{HOME}/.mime.types";
 $xtermprgrm="/usr/bin/x-terminal-emulator";    # xterm?
-$defmimetyp="application/*";
+$defmimetyp="application/octet-stream";
 $quotedsemi=chr(255);
 $quotedprct=chr(254);
 $retcode=0;
@@ -278,6 +278,18 @@
 
 
 
+sub MagicMimetype {
+       my($file) = @_;
+       my($typ);
+
+       open(READER, "-|", "file", "-b", "--mime-type", "-e", "tokens", "-L", 
"-z", $file);
+       $typ = <READER>;
+       chomp $typ;
+       return $typ;
+}
+
+
+
 sub PatternMimetype {
        my($file) = @_;
        my($key,$val);
@@ -296,12 +308,13 @@
 
 
 sub FileMimetype {
-       my($file) = @_;
+       my($realfile, $file) = @_;
        my($ext)  = ($file =~ m!\.([^/\.]+)$!);
 
        my $type;
 
-       $type = ExtensionMimetype($ext) if $ext;
+       $type = MagicMimetype($realfile) if -e $realfile;
+       $type = ExtensionMimetype($ext) unless $type || !$ext;
        $type = PatternMimetype($file) unless $type;
 
        return $type;
@@ -331,9 +344,9 @@
                if ($code) {
                        my $efile = $file;
                        $efile =~ s/\.[^\.]+$//;
-                       $type = FileMimetype($efile);
+                       $type = FileMimetype($file, $efile);
                } else {
-                       $type = FileMimetype($file);
+                       $type = FileMimetype($file, $file);
                }
                if ($type) {
                        push @files,"${type}:${code}:${file}";

Reply via email to