Blob Blame History Raw
diff -up file-4.26/src/funcs.c.mime file-4.26/src/funcs.c
--- file-4.26/src/funcs.c.mime	2008-10-14 13:07:44.000000000 +0200
+++ file-4.26/src/funcs.c	2008-10-16 11:47:01.000000000 +0200
@@ -152,6 +152,20 @@ file_badread(struct magic_set *ms)
 	file_error(ms, errno, "error reading");
 }
 
+private int mime_encoding(struct magic_set * ms, const unsigned char * buf, size_t size)
+{
+size_t dummy;
+
+if( file_looks_utf8(buf, size, NULL, &dummy) == 1 )
+{
+        if(file_printf(ms, "7bit") == -1)
+                return -1;
+} else if(file_printf(ms, "binary") == -1)
+                return -1;
+                
+return 1;                  
+}
+
 #ifndef COMPILE_ONLY
 protected int
 file_buffer(struct magic_set *ms, int fd, const char *inname, const void *buf,
@@ -187,6 +201,8 @@ file_buffer(struct magic_set *ms, int fd
 		}
 	}
 #endif
+        if (ms->flags & MAGIC_MIME_ENCODING && !(ms->flags & MAGIC_MIME_TYPE)) 
+                return mime_encoding(ms, ubuf, nb);
 
 	/* try compression stuff */
 	if ((ms->flags & MAGIC_NO_CHECK_COMPRESS) != 0 ||
@@ -206,9 +222,9 @@ file_buffer(struct magic_set *ms, int fd
 				"data") == -1)
 				return -1;
 			m = 1;
-		    }
-		}
-	    }
+		    } 
+		} 
+	    } 
 	}
 #ifdef BUILTIN_ELF
 	if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && m == 1 &&