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 &&