[PATCH] more: avoid libmagic telling an empty file is binary

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



My earlier change that took libmagic in use to identify mime-type of an input
file caused empty files to be marked binary.  Before the change empty files
were simply displayed as empty.  This change will restore that behavior.

Addresses: 09070e1a658e70ec203150e4fa5f486b32771858
Signed-off-by: Sami Kerola <kerolasa@xxxxxx>
---
 text-utils/more.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/text-utils/more.c b/text-utils/more.c
index b69fa5c5b..3855d8549 100644
--- a/text-utils/more.c
+++ b/text-utils/more.c
@@ -395,7 +395,23 @@ static void print_separator(const int c, int n)
 static int check_magic(struct more_control *ctl, char *fs)
 {
 #ifdef HAVE_MAGIC
-	const char *mime_encoding = magic_descriptor(ctl->magic, fileno(ctl->current_file));
+	const int fd = fileno(ctl->current_file);
+	const char *mime_encoding = magic_descriptor(ctl->magic, fd);
+	const char *magic_error_msg = magic_error(ctl->magic);
+	struct stat st;
+
+	if (magic_error_msg) {
+		printf(_("magic failed: %s\n"), magic_error_msg);
+		return 0;
+	}
+	if (fstat(fd, &st)) {
+		warn(_("cannot stat %s"), fs);
+		return 1;
+	}
+	if (st.st_size == 0) {
+		/* libmagic tells an empty file has binary encoding */
+		return 0;
+	}
 
 	if (!mime_encoding || !(strcmp("binary", mime_encoding))) {
 		printf(_("\n******** %s: Not a text file ********\n\n"), fs);
-- 
2.26.2




[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux