]> granicus.if.org Git - file/commitdiff
- use err(3) inspired functions to report errors and warnings
authorChristos Zoulas <christos@zoulas.com>
Mon, 18 Sep 2017 20:40:10 +0000 (20:40 +0000)
committerChristos Zoulas <christos@zoulas.com>
Mon, 18 Sep 2017 20:40:10 +0000 (20:40 +0000)
- use EXIT_SUCCESS/EXIT_FAILURE
- reformat usage.

src/file.c
src/file.h

index c8f992a15d0fce6b68efd8b749a5f8124a3e9cf2..90e0b7e7ca6d9dd9eee8a414918be74b5f5b0341 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: file.c,v 1.171 2016/05/17 15:52:45 christos Exp $")
+FILE_RCSID("@(#)$File: file.c,v 1.173 2017/09/18 20:40:10 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -74,11 +74,11 @@ int getopt_long(int argc, char * const *argv, const char *optstring, const struc
 #endif
 
 # define USAGE  \
-    "Usage: %s [" FILE_FLAGS \
-       "] [--apple] [--extension] [--mime-encoding] [--mime-type]\n" \
-    "            [-e testname] [-F separator] [-f namefile] [-m magicfiles] " \
-    "file ...\n" \
-    "       %s -C [-m magicfiles]\n" \
+    "Usage: %s [" FILE_FLAGS "] [--apple] [--extension] [--mime-encoding]\n" \
+    "            [--mime-type] [-e <testname>] [-F <separator>] " \
+    " [-f <namefile>]\n" \
+    "            [-m <magicfiles>] <file> ...\n" \
+    "       %s -C [-m <magicfiles>]\n" \
     "       %s [--help]\n"
 
 private int            /* Global command-line options          */
@@ -102,7 +102,7 @@ private const struct option long_options[] = {
 #undef OPT
 #undef OPT_LONGONLY
     {0, 0, NULL, 0}
-};
+    };
 #define OPTSTRING      "bcCde:Ef:F:hiklLm:nNpP:rsvzZ0"
 
 private const struct {
@@ -135,7 +135,6 @@ private struct {
        { "bytes",      MAGIC_PARAM_BYTES_MAX, 0 },
 };
 
-private char *progname;                /* used throughout              */
 private int posixly;
 
 #ifdef __dead
@@ -168,6 +167,7 @@ main(int argc, char *argv[])
        struct magic_set *magic = NULL;
        int longindex;
        const char *magicfile = NULL;           /* where the magic is   */
+       char *progname;
 
        /* makes islower etc work for other langs */
 #ifdef HAVE_SETLOCALE
@@ -184,6 +184,8 @@ main(int argc, char *argv[])
        else
                progname = argv[0];
 
+       file_setprogname(progname);
+
 #ifdef S_IFLNK
        posixly = getenv("POSIXLY_CORRECT") != NULL;
        flags |=  posixly ? MAGIC_SYMLINK : 0;
@@ -283,9 +285,10 @@ main(int argc, char *argv[])
                case 'v':
                        if (magicfile == NULL)
                                magicfile = magic_getpath(magicfile, action);
-                       (void)fprintf(stdout, "%s-%s\n", progname, VERSION);
+                       (void)fprintf(stdout, "%s-%s\n", file_getprogname(),
+                           VERSION);
                        (void)fprintf(stdout, "magic file from %s\n",
-                                      magicfile);
+                           magicfile);
                        return 0;
                case 'z':
                        flags |= MAGIC_COMPRESS;
@@ -315,9 +318,9 @@ main(int argc, char *argv[])
                return e;
 
        if (MAGIC_VERSION != magic_version())
-               (void)fprintf(stderr, "%s: compiled magic version [%d] "
+               file_warnx("Compiled magic version [%d] "
                    "does not match with shared library magic version [%d]\n",
-                   progname, MAGIC_VERSION, magic_version());
+                   MAGIC_VERSION, magic_version());
 
        switch(action) {
        case FILE_CHECK:
@@ -329,8 +332,7 @@ main(int argc, char *argv[])
                 */
                magic = magic_open(flags|MAGIC_CHECK);
                if (magic == NULL) {
-                       (void)fprintf(stderr, "%s: %s\n", progname,
-                           strerror(errno));
+                       file_warn("Can't create magic");
                        return 1;
                }
 
@@ -349,8 +351,7 @@ main(int argc, char *argv[])
                        abort();
                }
                if (c == -1) {
-                       (void)fprintf(stderr, "%s: %s\n", progname,
-                           magic_error(magic));
+                       file_warnx("%s", magic_error(magic));
                        e = 1;
                        goto out;
                }
@@ -398,11 +399,8 @@ applyparam(magic_t magic)
        for (i = 0; i < __arraycount(pm); i++) {
                if (pm[i].value == 0)
                        continue;
-               if (magic_setparam(magic, pm[i].tag, &pm[i].value) == -1) {
-                       (void)fprintf(stderr, "%s: Can't set %s %s\n", progname,
-                               pm[i].name, strerror(errno));
-                       exit(1);
-               }
+               if (magic_setparam(magic, pm[i].tag, &pm[i].value) == -1)
+                       file_err(EXIT_FAILURE, "Can't set %s", pm[i].name);
        }
 }
 
@@ -422,8 +420,7 @@ setparam(const char *p)
                return;
        }
 badparm:
-       (void)fprintf(stderr, "%s: Unknown param %s\n", progname, p);
-       exit(1);
+       file_errx(EXIT_FAILURE, "Unknown param %s", p);
 }
 
 private struct magic_set *
@@ -434,17 +431,16 @@ load(const char *magicfile, int flags)
        const char *e;
 
        if (magic == NULL) {
-               (void)fprintf(stderr, "%s: %s\n", progname, strerror(errno));
+               file_warn("Can't create magic");
                return NULL;
        }
        if (magic_load(magic, magicfile) == -1) {
-               (void)fprintf(stderr, "%s: %s\n",
-                   progname, magic_error(magic));
+               file_warn("%s", magic_error(magic));
                magic_close(magic);
                return NULL;
        }
        if ((e = magic_error(magic)) != NULL)
-               (void)fprintf(stderr, "%s: Warning: %s\n", progname, e);
+               file_warn("%s", e);
        return magic;
 }
 
@@ -466,8 +462,7 @@ unwrap(struct magic_set *ms, const char *fn)
                wid = 1;
        } else {
                if ((f = fopen(fn, "r")) == NULL) {
-                       (void)fprintf(stderr, "%s: Cannot open `%s' (%s).\n",
-                           progname, fn, strerror(errno));
+                       file_warn("Cannot open `%s'", fn);
                        return 1;
                }
 
@@ -567,8 +562,9 @@ file_mbswidth(const char *s)
 private void
 usage(void)
 {
-       (void)fprintf(stderr, USAGE, progname, progname, progname);
-       exit(1);
+       const char *pn = file_getprogname();
+       (void)fprintf(stderr, USAGE, pn, pn, pn);
+       exit(EXIT_FAILURE);
 }
 
 private void
@@ -629,5 +625,74 @@ help(void)
 #undef OPT
 #undef OPT_LONGONLY
        fprintf(stdout, "\nReport bugs to http://bugs.gw.com/\n");
-       exit(0);
+       exit(EXIT_SUCCESS);
+}
+
+private const char *file_progname;
+
+protected void
+file_setprogname(const char *progname)
+{
+       file_progname = progname;
+}
+
+protected const char *
+file_getprogname(void)
+{
+       return file_progname;
+}
+
+protected void
+file_err(int e, const char *fmt, ...)
+{
+       va_list ap;
+       int se = errno;
+
+       va_start(ap, fmt);
+       fprintf(stderr, "%s: ", file_progname);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, " (%s)\n", strerror(se));
+       exit(e);
+}
+
+protected void
+file_errx(int e, const char *fmt, ...)
+{
+       va_list ap;
+
+       va_start(ap, fmt);
+       fprintf(stderr, "%s: ", file_progname);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, "\n");
+       exit(e);
+}
+
+protected void
+file_warn(const char *fmt, ...)
+{
+       va_list ap;
+       int se = errno;
+
+       va_start(ap, fmt);
+       fprintf(stderr, "%s: ", file_progname);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, " (%s)\n", strerror(se));
+       errno = se;
+}
+
+protected void
+file_warnx(const char *fmt, ...)
+{
+       va_list ap;
+       int se = errno;
+
+       va_start(ap, fmt);
+       fprintf(stderr, "%s: ", file_progname);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, "\n");
+       errno = se;
 }
index eb9c05421db6c3cb5ff51319a2e9adc833fd07b7..3a993a3e6c991a69ce29157603c63f4eddbc403a 100644 (file)
@@ -27,7 +27,7 @@
  */
 /*
  * file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.183 2017/08/28 13:39:18 christos Exp $
+ * @(#)$File: file.h,v 1.184 2017/09/18 20:40:10 christos Exp $
  */
 
 #ifndef __file_h__
@@ -590,6 +590,17 @@ const char *fmtcheck(const char *, const char *)
      __attribute__((__format_arg__(2)));
 #endif
 
+protected const char *file_getprogname(void);
+protected void file_setprogname(const char *);
+protected void file_err(int, const char *, ...)
+    __attribute__((__format__(__printf__, 2, 3)));
+protected void file_errx(int, const char *, ...)
+    __attribute__((__format__(__printf__, 2, 3)));
+protected void file_warn(const char *, ...)
+    __attribute__((__format__(__printf__, 1, 2)));
+protected void file_warnx(const char *, ...)
+    __attribute__((__format__(__printf__, 1, 2)));
+
 #if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
 #define QUICK
 #endif