From: Sami Kerola Date: Mon, 25 May 2020 07:30:24 +0000 (+0100) Subject: more: avoid libmagic telling an empty file is binary X-Git-Tag: v2.36-rc1~59 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2eb527722af2093038bf38d4554c086d20df79c9;p=thirdparty%2Futil-linux.git more: avoid libmagic telling an empty file is binary 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 --- diff --git a/text-utils/more.c b/text-utils/more.c index b69fa5c5b8..3855d8549c 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);