Imported Upstream version 5.32
[platform/upstream/file.git] / src / fsmagic.c
index 5b537ac..c0a437a 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: fsmagic.c,v 1.75 2014/12/04 15:56:46 christos Exp $")
+FILE_RCSID("@(#)$File: fsmagic.c,v 1.77 2017/05/24 19:17:50 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -104,14 +104,13 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
 {
        int ret, did = 0;
        int mime = ms->flags & MAGIC_MIME;
+       int silent = ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION);
 #ifdef S_IFLNK
        char buf[BUFSIZ+4];
        ssize_t nch;
        struct stat tstatbuf;
 #endif
 
-       if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))
-               return 0;
        if (fn == NULL)
                return 0;
 
@@ -168,7 +167,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
        }
 
        ret = 1;
-       if (!mime) {
+       if (!mime && !silent) {
 #ifdef S_ISUID
                if (sb->st_mode & S_ISUID)
                        if (file_printf(ms, "%ssetuid", COMMA) == -1)
@@ -191,6 +190,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                if (mime) {
                        if (handle_mime(ms, mime, "directory") == -1)
                                return -1;
+               } else if (silent) {
                } else if (file_printf(ms, "%sdirectory", COMMA) == -1)
                        return -1;
                break;
@@ -208,6 +208,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                if (mime) {
                        if (handle_mime(ms, mime, "chardevice") == -1)
                                return -1;
+               } else if (silent) {
                } else {
 #ifdef HAVE_STRUCT_STAT_ST_RDEV
 # ifdef dv_unit
@@ -242,6 +243,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                if (mime) {
                        if (handle_mime(ms, mime, "blockdevice") == -1)
                                return -1;
+               } else if (silent) {
                } else {
 #ifdef HAVE_STRUCT_STAT_ST_RDEV
 # ifdef dv_unit
@@ -270,6 +272,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                if (mime) {
                        if (handle_mime(ms, mime, "fifo") == -1)
                                return -1;
+               } else if (silent) {
                } else if (file_printf(ms, "%sfifo (named pipe)", COMMA) == -1)
                        return -1;
                break;
@@ -279,6 +282,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                if (mime) {
                        if (handle_mime(ms, mime, "door") == -1)
                                return -1;
+               } else if (silent) {
                } else if (file_printf(ms, "%sdoor", COMMA) == -1)
                        return -1;
                break;
@@ -294,6 +298,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                        if (mime) {
                                if (handle_mime(ms, mime, "symlink") == -1)
                                        return -1;
+                       } else if (silent) {
                        } else if (file_printf(ms,
                            "%sunreadable symlink `%s' (%s)", COMMA, fn,
                            strerror(errno)) == -1)
@@ -323,6 +328,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                                                if (handle_mime(ms, mime,
                                                    "x-path-too-long") == -1)
                                                        return -1;
+                                       } else if (silent) {
                                        } else if (file_printf(ms,
                                            "%spath too long: `%s'", COMMA,
                                            fn) == -1)
@@ -352,6 +358,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                        if (mime) {
                                if (handle_mime(ms, mime, "symlink") == -1)
                                        return -1;
+                       } else if (silent) {
                        } else if (file_printf(ms, "%ssymbolic link to %s",
                            COMMA, buf) == -1)
                                return -1;
@@ -364,6 +371,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                if (mime) {
                        if (handle_mime(ms, mime, "socket") == -1)
                                return -1;
+               } else if (silent) {
                } else if (file_printf(ms, "%ssocket", COMMA) == -1)
                        return -1;
                break;
@@ -386,6 +394,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                        if (mime) {
                                if (handle_mime(ms, mime, "x-empty") == -1)
                                        return -1;
+                       } else if (silent) {
                        } else if (file_printf(ms, "%sempty", COMMA) == -1)
                                return -1;
                        break;
@@ -399,7 +408,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                /*NOTREACHED*/
        }
 
-       if (!mime && did && ret == 0) {
+       if (!silent && !mime && did && ret == 0) {
            if (file_printf(ms, " ") == -1)
                    return -1;
        }