[BACK]Return to magic.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / file

Diff for /src/usr.bin/file/magic.h between version 1.4 and 1.5

version 1.4, 2009/04/24 18:54:34 version 1.5, 2015/04/24 16:24:11
Line 1 
Line 1 
 /* $OpenBSD$ */  /* $OpenBSD$ */
   
 /*  /*
  * Copyright (c) Christos Zoulas 2003.   * Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
  * All Rights Reserved.   *
  *   * Permission to use, copy, modify, and distribute this software for any
  * Redistribution and use in source and binary forms, with or without   * purpose with or without fee is hereby granted, provided that the above
  * modification, are permitted provided that the following conditions   * copyright notice and this permission notice appear in all copies.
  * are met:   *
  * 1. Redistributions of source code must retain the above copyright   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  *    notice immediately at the beginning of the file, without modification,   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  *    this list of conditions, and the following disclaimer.   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  * 2. Redistributions in binary form must reproduce the above copyright   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  *    notice, this list of conditions and the following disclaimer in the   * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
  *    documentation and/or other materials provided with the distribution.   * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
  *   * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND  
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  
  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR  
  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  
  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  
  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  
  * SUCH DAMAGE.  
  */   */
 #ifndef _MAGIC_H  
 #define _MAGIC_H  
   
 #include <sys/types.h>  #ifndef MAGIC_H
   #define MAGIC_H
   
 #define MAGIC_NONE              0x000000 /* No flags */  #include <sys/param.h>
 #define MAGIC_DEBUG             0x000001 /* Turn on debugging */  #include <sys/tree.h>
 #define MAGIC_SYMLINK           0x000002 /* Follow symlinks */  #include <sys/queue.h>
 #define MAGIC_COMPRESS          0x000004 /* Check inside compressed files */  #include <sys/stat.h>
 #define MAGIC_DEVICES           0x000008 /* Look at the contents of devices */  
 #define MAGIC_MIME_TYPE         0x000010 /* Return only the MIME type */  
 #define MAGIC_CONTINUE          0x000020 /* Return all matches */  
 #define MAGIC_CHECK             0x000040 /* Print warnings to stderr */  
 #define MAGIC_PRESERVE_ATIME    0x000080 /* Restore access time on exit */  
 #define MAGIC_RAW               0x000100 /* Don't translate unprint chars */  
 #define MAGIC_ERROR             0x000200 /* Handle ENOENT etc as real errors */  
 #define MAGIC_MIME_ENCODING     0x000400 /* Return only the MIME encoding */  
 #define MAGIC_MIME              (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING)  
 #define MAGIC_NO_CHECK_COMPRESS 0x001000 /* Don't check for compressed files */  
 #define MAGIC_NO_CHECK_TAR      0x002000 /* Don't check for tar files */  
 #define MAGIC_NO_CHECK_SOFT     0x004000 /* Don't check magic entries */  
 #define MAGIC_NO_CHECK_APPTYPE  0x008000 /* Don't check application type */  
 #define MAGIC_NO_CHECK_ELF      0x010000 /* Don't check for elf details */  
 #define MAGIC_NO_CHECK_ASCII    0x020000 /* Don't check for ascii files */  
 #define MAGIC_NO_CHECK_TOKENS   0x100000 /* Don't check ascii/tokens */  
   
 /* Defined for backwards compatibility; do nothing */  #include <err.h>
 #define MAGIC_NO_CHECK_FORTRAN  0x000000 /* Don't check ascii/fortran */  #include <regex.h>
 #define MAGIC_NO_CHECK_TROFF    0x000000 /* Don't check ascii/troff */  #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   
   #define MAGIC_STRING_SIZE 31
   #define MAGIC_STRENGTH_MULTIPLIER 20
   
 #ifdef __cplusplus  enum magic_type {
 extern "C" {          MAGIC_TYPE_NONE = 0,
 #endif          MAGIC_TYPE_BYTE,
           MAGIC_TYPE_SHORT,
           MAGIC_TYPE_LONG,
           MAGIC_TYPE_QUAD,
           MAGIC_TYPE_UBYTE,
           MAGIC_TYPE_USHORT,
           MAGIC_TYPE_ULONG,
           MAGIC_TYPE_UQUAD,
           MAGIC_TYPE_FLOAT,
           MAGIC_TYPE_DOUBLE,
           MAGIC_TYPE_STRING,
           MAGIC_TYPE_PSTRING,
           MAGIC_TYPE_DATE,
           MAGIC_TYPE_QDATE,
           MAGIC_TYPE_LDATE,
           MAGIC_TYPE_QLDATE,
           MAGIC_TYPE_UDATE,
           MAGIC_TYPE_UQDATE,
           MAGIC_TYPE_ULDATE,
           MAGIC_TYPE_UQLDATE,
           MAGIC_TYPE_BESHORT,
           MAGIC_TYPE_BELONG,
           MAGIC_TYPE_BEQUAD,
           MAGIC_TYPE_UBESHORT,
           MAGIC_TYPE_UBELONG,
           MAGIC_TYPE_UBEQUAD,
           MAGIC_TYPE_BEFLOAT,
           MAGIC_TYPE_BEDOUBLE,
           MAGIC_TYPE_BEDATE,
           MAGIC_TYPE_BEQDATE,
           MAGIC_TYPE_BELDATE,
           MAGIC_TYPE_BEQLDATE,
           MAGIC_TYPE_UBEDATE,
           MAGIC_TYPE_UBEQDATE,
           MAGIC_TYPE_UBELDATE,
           MAGIC_TYPE_UBEQLDATE,
           MAGIC_TYPE_BESTRING16,
           MAGIC_TYPE_LESHORT,
           MAGIC_TYPE_LELONG,
           MAGIC_TYPE_LEQUAD,
           MAGIC_TYPE_ULESHORT,
           MAGIC_TYPE_ULELONG,
           MAGIC_TYPE_ULEQUAD,
           MAGIC_TYPE_LEFLOAT,
           MAGIC_TYPE_LEDOUBLE,
           MAGIC_TYPE_LEDATE,
           MAGIC_TYPE_LEQDATE,
           MAGIC_TYPE_LELDATE,
           MAGIC_TYPE_LEQLDATE,
           MAGIC_TYPE_ULEDATE,
           MAGIC_TYPE_ULEQDATE,
           MAGIC_TYPE_ULELDATE,
           MAGIC_TYPE_ULEQLDATE,
           MAGIC_TYPE_LESTRING16,
           MAGIC_TYPE_MELONG,
           MAGIC_TYPE_MEDATE,
           MAGIC_TYPE_MELDATE,
           MAGIC_TYPE_REGEX,
           MAGIC_TYPE_SEARCH,
           MAGIC_TYPE_DEFAULT,
   };
   
 typedef struct magic_set *magic_t;  TAILQ_HEAD(magic_lines, magic_line);
 magic_t magic_open(int);  RB_HEAD(magic_tree, magic_line);
 void magic_close(magic_t);  
   
 const char *magic_file(magic_t, const char *);  struct magic_line {
 const char *magic_descriptor(magic_t, int);          struct magic            *root;
 const char *magic_buffer(magic_t, const void *, size_t);          u_int                    line;
           u_int                    strength;
           struct magic_line       *parent;
   
 const char *magic_error(magic_t);          int                      text;
 int magic_setflags(magic_t, int);  
   
 int magic_load(magic_t, const char *);          int64_t                  offset;
 int magic_compile(magic_t, const char *);          int                      offset_relative;
 int magic_check(magic_t, const char *);  
 int magic_errno(magic_t);  
   
 #ifdef __cplusplus          char                     indirect_type;
           int                      indirect_relative;
           int64_t                  indirect_offset;
           char                     indirect_operator;
           int64_t                  indirect_operand;
   
           enum magic_type          type;
           const char              *type_string;
           char                     type_operator;
           int64_t                  type_operand;
   
           char                     test_operator;
           int                      test_not;
           const char              *test_string;
           size_t                   test_string_size;
           uint64_t                 test_unsigned;
           int64_t                  test_signed;
   
           int                      stringify;
           const char              *result;
           const char              *mimetype;
   
           struct magic_lines       children;
           TAILQ_ENTRY(magic_line)  entry;
           RB_ENTRY(magic_line)     node;
 };  };
 #endif  
   
 #endif /* _MAGIC_H */  struct magic {
           const char              *path;
           int                      warnings;
   
           struct magic_tree        tree;
   
           int                      compiled;
           regex_t                  format_short;
           regex_t                  format_long;
           regex_t                  format_quad;
           regex_t                  format_float;
           regex_t                  format_string;
   };
   
   struct magic_state {
           char                     out[4096];
           const char              *mimetype;
           int                      text;
   
           const char              *base;
           size_t                   size;
           int64_t                  offset;
   };
   
   #define MAGIC_TEST_TEXT 0x1
   #define MAGIC_TEST_MIME 0x2
   
   int              magic_compare(struct magic_line *, struct magic_line *);
   RB_PROTOTYPE(magic_tree, magic_line, node, magic_compare);
   
   char            *magic_strtoull(const char *, uint64_t *);
   char            *magic_strtoll(const char *, int64_t *);
   void             magic_warn(struct magic_line *, const char *, ...)
                        __attribute__ ((format (printf, 2, 3)));
   
   void             magic_dump(struct magic *);
   struct magic    *magic_load(FILE *, const char *, int);
   const char      *magic_test(struct magic *, const void *, size_t, int);
   
   #endif /* MAGIC_H */

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5