]> granicus.if.org Git - file/commitdiff
- compile with all warnings turned on.
authorChristos Zoulas <christos@zoulas.com>
Fri, 9 May 2008 14:20:28 +0000 (14:20 +0000)
committerChristos Zoulas <christos@zoulas.com>
Fri, 9 May 2008 14:20:28 +0000 (14:20 +0000)
- don't tack .mgc if the file ends in .mgc

src/Makefile.am
src/apprentice.c
src/ascmagic.c
src/file.h
src/fsmagic.c
src/funcs.c
src/vasprintf.c

index 99934dab662d719267996d97dc75c2606ffeaf07..b569493070995eae4b2a84d2030053ae41745c75 100644 (file)
@@ -5,6 +5,10 @@ include_HEADERS = magic.h
 bin_PROGRAMS = file
 
 AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"'
+AM_CFLAGS = -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
+    -Wmissing-declarations -Wredundant-decls -Wnested-externs \
+    -Wsign-compare -Wreturn-type -Wswitch -Wshadow \
+    -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter
 
 libmagic_la_SOURCES = magic.c apprentice.c softmagic.c ascmagic.c \
        compress.c is_tar.c readelf.c print.c fsmagic.c \
index 987dc93cde1e081b1c070cbad7f13187fdccd21c..63f5e0cee2604dd81699e93798a083bed30f378b 100644 (file)
@@ -49,7 +49,7 @@
 #include <dirent.h>
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: apprentice.c,v 1.133 2008/04/04 15:01:09 christos Exp $")
+FILE_RCSID("@(#)$File: apprentice.c,v 1.134 2008/04/29 01:11:39 christos Exp $")
 #endif /* lint */
 
 #define        EATAB {while (isascii((unsigned char) *l) && \
@@ -505,7 +505,7 @@ apprentice_sort(const void *a, const void *b)
                return 1;
 }
 
-private int
+private void
 set_test_type(struct magic *mstart, struct magic *m)
 {
        switch (m->type) {
@@ -550,7 +550,7 @@ set_test_type(struct magic *mstart, struct magic *m)
        case FILE_REGEX:
        case FILE_SEARCH:
                /* binary test if pattern is not text */
-               if (file_looks_utf8(m->value.s, m->vallen, NULL, NULL) <= 0)
+               if (file_looks_utf8(m->value.us, m->vallen, NULL, NULL) <= 0)
                        mstart->flag |= BINTEST;
                break;
        case FILE_DEFAULT:
@@ -643,10 +643,11 @@ apprentice_load(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
        if (stat(fn, &st) == 0 && S_ISDIR(st.st_mode)) {
                dir = opendir(fn);
                if (dir) {
-                       while (d = readdir(dir)) {
+                       while ((d = readdir(dir)) != NULL) {
                                snprintf(subfn, sizeof(subfn), "%s/%s",
                                    fn, d->d_name);
-                               if (stat(subfn, &st) == 0 && S_ISREG(st.st_mode)) {
+                               if (stat(subfn, &st) == 0 &&
+                                   S_ISREG(st.st_mode)) {
                                        load_1(ms, action, subfn, &errs,
                                            &marray, &marraycount);
                                }
@@ -668,26 +669,27 @@ apprentice_load(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
 
                starttest = i;
                do {
+                       static const char text[] = "text";
+                       static const char binary[] = "binary";
+                       static const size_t len = sizeof(text);
                        set_test_type(marray[starttest].mp, marray[i].mp);
-                       if (ms->flags & MAGIC_DEBUG) {
-                               (void)fprintf(stderr, "%s%s%s: %s\n",
-                                       marray[i].mp->mimetype,
-                                       marray[i].mp->mimetype[0] == '\0' ? "" : "; ",
-                                       marray[i].mp->desc[0] ? marray[i].mp->desc : "(no description)",
-                                       marray[i].mp->flag & BINTEST ? "binary" : "text");
-                               if (marray[i].mp->flag & BINTEST) {
-#define SYMBOL "text"
-#define SYMLEN sizeof(SYMBOL)
-                                       char *p = strstr(marray[i].mp->desc, "text");
-                                       if (p && (p == marray[i].mp->desc || isspace(p[-1])) &&
-                                           (p + SYMLEN - marray[i].mp->desc == MAXstring ||
-                                            (p[SYMLEN] == '\0' || isspace(p[SYMLEN])))) {
-                                               (void)fprintf(stderr,
-                                                             "*** Possible binary test for text type\n");
-                                       }
-#undef SYMBOL
-#undef SYMLEN
-                               }
+                       if ((ms->flags & MAGIC_DEBUG) == 0)
+                               continue;
+                       (void)fprintf(stderr, "%s%s%s: %s\n",
+                           marray[i].mp->mimetype,
+                           marray[i].mp->mimetype[0] == '\0' ? "" : "; ",
+                           marray[i].mp->desc[0] ? marray[i].mp->desc :
+                           "(no description)",
+                           marray[i].mp->flag & BINTEST ? binary : text);
+                       if (marray[i].mp->flag & BINTEST) {
+                               char *p = strstr(marray[i].mp->desc, text);
+                               if (p && (p == marray[i].mp->desc ||
+                                   isspace((unsigned char)p[-1])) &&
+                                   (p + len - marray[i].mp->desc == 
+                                   MAXstring || (p[len] == '\0' ||
+                                   isspace((unsigned char)p[len]))))
+                                       (void)fprintf(stderr, "*** Possible "
+                                           "binary test for text type\n");
                        }
                } while (++i < marraycount && marray[i].mp->cont_level != 0);
        }
@@ -1938,7 +1940,7 @@ apprentice_map(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
        ptr = (uint32_t *)(void *)*magicp;
        if (*ptr != MAGICNO) {
                if (swap4(*ptr) != MAGICNO) {
-                       file_error(ms, 0, "bad magic in `%s'");
+                       file_error(ms, 0, "bad magic in `%s'", dbname);
                        goto error1;
                }
                needsbyteswap = 1;
@@ -2036,14 +2038,18 @@ private const char ext[] = ".mgc";
 private void
 mkdbname(const char *fn, char **buf, int strip)
 {
+       const char *p;
        if (strip) {
-               const char *p;
                if ((p = strrchr(fn, '/')) != NULL)
                        fn = ++p;
        }
 
-       (void)asprintf(buf, "%s%s", fn, ext);
-       if (*buf && strlen(*buf) > MAXPATHLEN) {
+       if ((p = strstr(fn, ext)) != NULL && p[sizeof(ext) - 1] == '\0')
+               *buf = strdup(fn);
+       else
+               (void)asprintf(buf, "%s%s", fn, ext);
+
+       if (buf && *buf && strlen(*buf) > MAXPATHLEN) {
                free(*buf);
                *buf = NULL;
        }
index 4576fcadb39c55340f5deb5fc89886690c06bcf4..75ed43bbc196c5cc5bb77b8f3774422a82ff567c 100644 (file)
@@ -49,7 +49,7 @@
 #include "names.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: ascmagic.c,v 1.61 2008/02/27 15:02:33 rrt Exp $")
+FILE_RCSID("@(#)$File: ascmagic.c,v 1.62 2008/03/01 22:21:48 rrt Exp $")
 #endif /* lint */
 
 #define MAXLINELEN 300 /* longest sane line length */
@@ -59,7 +59,6 @@ FILE_RCSID("@(#)$File: ascmagic.c,v 1.61 2008/02/27 15:02:33 rrt Exp $")
 private int looks_ascii(const unsigned char *, size_t, unichar *, size_t *);
 private int looks_utf8_with_BOM(const unsigned char *, size_t, unichar *,
     size_t *);
-protected int file_looks_utf8(const unsigned char *, size_t, unichar *, size_t *);
 private int looks_ucs16(const unsigned char *, size_t, unichar *, size_t *);
 private int looks_latin1(const unsigned char *, size_t, unichar *, size_t *);
 private int looks_extended(const unsigned char *, size_t, unichar *, size_t *);
index f00693f3805261e850952f3fb72e6058f20eee49..b8b211b82159e8ea91ab7b7d4ea127cbea64f690 100644 (file)
@@ -27,7 +27,7 @@
  */
 /*
  * file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.102 2008/02/24 01:35:58 christos Exp $
+ * @(#)$File: file.h,v 1.103 2008/03/01 22:21:49 rrt Exp $
  */
 
 #ifndef __file_h__
@@ -243,6 +243,7 @@ struct magic {
                uint8_t hl[4];  /* 4 bytes of a fixed-endian "long" */
                uint8_t hq[8];  /* 8 bytes of a fixed-endian "quad" */
                char s[MAXstring];      /* the search string or regex pattern */
+               unsigned char us[MAXstring];
                float f;
                double d;
        } value;                /* either number or string */
@@ -323,7 +324,8 @@ protected int file_buffer(struct magic_set *, int, const char *, const void *,
     size_t);
 protected int file_fsmagic(struct magic_set *, const char *, struct stat *);
 protected int file_pipe2file(struct magic_set *, int, const void *, size_t);
-protected int file_printf(struct magic_set *, const char *, ...);
+protected int file_printf(struct magic_set *, const char *, ...)
+    __attribute__((__format__(__printf__, 2, 3)));
 protected int file_reset(struct magic_set *);
 protected int file_tryelf(struct magic_set *, int, const unsigned char *,
     size_t);
@@ -339,9 +341,12 @@ protected void file_delmagic(struct magic *, int type, size_t entries);
 protected void file_badread(struct magic_set *);
 protected void file_badseek(struct magic_set *);
 protected void file_oomem(struct magic_set *, size_t);
-protected void file_error(struct magic_set *, int, const char *, ...);
-protected void file_magerror(struct magic_set *, const char *, ...);
-protected void file_magwarn(struct magic_set *, const char *, ...);
+protected void file_error(struct magic_set *, int, const char *, ...)
+    __attribute__((__format__(__printf__, 3, 4)));
+protected void file_magerror(struct magic_set *, const char *, ...)
+    __attribute__((__format__(__printf__, 2, 3)));
+protected void file_magwarn(struct magic_set *, const char *, ...)
+    __attribute__((__format__(__printf__, 2, 3)));
 protected void file_mdump(struct magic *);
 protected void file_showstr(FILE *, const char *, size_t);
 protected size_t file_mbswidth(const char *);
index d43532853560065714043964f879f277b37ef065..4bb62dc0e1704988195e985f4c4210bd80248aca 100644 (file)
 #undef HAVE_MAJOR
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: fsmagic.c,v 1.49 2008/02/07 00:58:52 christos Exp $")
+FILE_RCSID("@(#)$File: fsmagic.c,v 1.50 2008/02/12 17:22:54 rrt Exp $")
 #endif /* lint */
 
 private int
 bad_link(struct magic_set *ms, int err, char *buf)
 {
-       char *errfmt;
+       const char *errfmt;
        if (err == ELOOP)
                errfmt = "symbolic link in a loop";
        else
index e804c3be52689fbd8d8811ed2a4e2cccd7619376..ef3d3e7daca828e8ac3828369cb5b6802467684e 100644 (file)
@@ -38,7 +38,7 @@
 #endif
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: funcs.c,v 1.38 2008/02/19 00:58:59 rrt Exp $")
+FILE_RCSID("@(#)$File: funcs.c,v 1.39 2008/03/01 22:21:49 rrt Exp $")
 #endif /* lint */
 
 /*
@@ -48,7 +48,6 @@ protected int
 file_printf(struct magic_set *ms, const char *fmt, ...)
 {
        va_list ap;
-       size_t size;
        int len;
        char *buf, *newstr;
 
index 6e1846b738c291382306c915367a06717f45cda4..2ee73121730866af37711f7e45722a69b2c68e63 100644 (file)
@@ -265,7 +265,7 @@ static int getint(const char **string)
 {
   int i = 0;
 
-  while (isdigit(**string) != 0) {
+  while (isdigit((unsigned char)**string) != 0) {
     i = i * 10 + (**string - '0');
     (*string)++;
   }
@@ -356,7 +356,7 @@ static int dispatch(xprintf_struct *s)
     width = va_arg(s->vargs, int);
     if ((size_t)width > 0x3fffU) /* 'size_t' to check against negative values too */
       width = 0x3fff;
-  } else if (isdigit(*SRCTXT)) /* width given as ASCII number */
+  } else if (isdigit((unsigned char)*SRCTXT)) /* width given as ASCII number */
     width = getint(&SRCTXT);
   else
     width = -1;                 /* no width specified */
@@ -372,7 +372,7 @@ static int dispatch(xprintf_struct *s)
       if ((size_t)prec >= 0x3fffU) /* 'size_t' to check against negative values too */
         prec = 0x3fff;
     } else {                    /* .prec given as ASCII number */
-      if (isdigit(*SRCTXT) == 0)
+      if (isdigit((unsigned char)*SRCTXT) == 0)
         INCOHERENT();
       prec = getint(&SRCTXT);
     }