]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
more: avoid libmagic telling an empty file is binary
authorSami Kerola <kerolasa@iki.fi>
Mon, 25 May 2020 07:30:24 +0000 (08:30 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 25 May 2020 12:16:45 +0000 (14:16 +0200)
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@iki.fi>
text-utils/more.c

index b69fa5c5b880f8e8ae6f76e17f7602ecae8c7cfd..3855d8549cfb256fb8669e0b223a24859baa751c 100644 (file)
@@ -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);