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

Annotation of src/usr.bin/file/magic.h, Revision 1.5

1.5     ! nicm        1: /* $OpenBSD$ */
        !             2:
1.1       tedu        3: /*
1.5     ! nicm        4:  * Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
        !             5:  *
        !             6:  * Permission to use, copy, modify, and distribute this software for any
        !             7:  * purpose with or without fee is hereby granted, provided that the above
        !             8:  * copyright notice and this permission notice appear in all copies.
        !             9:  *
        !            10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
        !            11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
        !            13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            14:  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
        !            15:  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
        !            16:  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1.1       tedu       17:  */
                     18:
1.5     ! nicm       19: #ifndef MAGIC_H
        !            20: #define MAGIC_H
        !            21:
        !            22: #include <sys/param.h>
        !            23: #include <sys/tree.h>
        !            24: #include <sys/queue.h>
        !            25: #include <sys/stat.h>
        !            26:
        !            27: #include <err.h>
        !            28: #include <regex.h>
        !            29: #include <stdio.h>
        !            30: #include <stdlib.h>
        !            31: #include <string.h>
        !            32:
        !            33: #define MAGIC_STRING_SIZE 31
        !            34: #define MAGIC_STRENGTH_MULTIPLIER 20
        !            35:
        !            36: enum magic_type {
        !            37:        MAGIC_TYPE_NONE = 0,
        !            38:        MAGIC_TYPE_BYTE,
        !            39:        MAGIC_TYPE_SHORT,
        !            40:        MAGIC_TYPE_LONG,
        !            41:        MAGIC_TYPE_QUAD,
        !            42:        MAGIC_TYPE_UBYTE,
        !            43:        MAGIC_TYPE_USHORT,
        !            44:        MAGIC_TYPE_ULONG,
        !            45:        MAGIC_TYPE_UQUAD,
        !            46:        MAGIC_TYPE_FLOAT,
        !            47:        MAGIC_TYPE_DOUBLE,
        !            48:        MAGIC_TYPE_STRING,
        !            49:        MAGIC_TYPE_PSTRING,
        !            50:        MAGIC_TYPE_DATE,
        !            51:        MAGIC_TYPE_QDATE,
        !            52:        MAGIC_TYPE_LDATE,
        !            53:        MAGIC_TYPE_QLDATE,
        !            54:        MAGIC_TYPE_UDATE,
        !            55:        MAGIC_TYPE_UQDATE,
        !            56:        MAGIC_TYPE_ULDATE,
        !            57:        MAGIC_TYPE_UQLDATE,
        !            58:        MAGIC_TYPE_BESHORT,
        !            59:        MAGIC_TYPE_BELONG,
        !            60:        MAGIC_TYPE_BEQUAD,
        !            61:        MAGIC_TYPE_UBESHORT,
        !            62:        MAGIC_TYPE_UBELONG,
        !            63:        MAGIC_TYPE_UBEQUAD,
        !            64:        MAGIC_TYPE_BEFLOAT,
        !            65:        MAGIC_TYPE_BEDOUBLE,
        !            66:        MAGIC_TYPE_BEDATE,
        !            67:        MAGIC_TYPE_BEQDATE,
        !            68:        MAGIC_TYPE_BELDATE,
        !            69:        MAGIC_TYPE_BEQLDATE,
        !            70:        MAGIC_TYPE_UBEDATE,
        !            71:        MAGIC_TYPE_UBEQDATE,
        !            72:        MAGIC_TYPE_UBELDATE,
        !            73:        MAGIC_TYPE_UBEQLDATE,
        !            74:        MAGIC_TYPE_BESTRING16,
        !            75:        MAGIC_TYPE_LESHORT,
        !            76:        MAGIC_TYPE_LELONG,
        !            77:        MAGIC_TYPE_LEQUAD,
        !            78:        MAGIC_TYPE_ULESHORT,
        !            79:        MAGIC_TYPE_ULELONG,
        !            80:        MAGIC_TYPE_ULEQUAD,
        !            81:        MAGIC_TYPE_LEFLOAT,
        !            82:        MAGIC_TYPE_LEDOUBLE,
        !            83:        MAGIC_TYPE_LEDATE,
        !            84:        MAGIC_TYPE_LEQDATE,
        !            85:        MAGIC_TYPE_LELDATE,
        !            86:        MAGIC_TYPE_LEQLDATE,
        !            87:        MAGIC_TYPE_ULEDATE,
        !            88:        MAGIC_TYPE_ULEQDATE,
        !            89:        MAGIC_TYPE_ULELDATE,
        !            90:        MAGIC_TYPE_ULEQLDATE,
        !            91:        MAGIC_TYPE_LESTRING16,
        !            92:        MAGIC_TYPE_MELONG,
        !            93:        MAGIC_TYPE_MEDATE,
        !            94:        MAGIC_TYPE_MELDATE,
        !            95:        MAGIC_TYPE_REGEX,
        !            96:        MAGIC_TYPE_SEARCH,
        !            97:        MAGIC_TYPE_DEFAULT,
        !            98: };
        !            99:
        !           100: TAILQ_HEAD(magic_lines, magic_line);
        !           101: RB_HEAD(magic_tree, magic_line);
        !           102:
        !           103: struct magic_line {
        !           104:        struct magic            *root;
        !           105:        u_int                    line;
        !           106:        u_int                    strength;
        !           107:        struct magic_line       *parent;
        !           108:
        !           109:        int                      text;
        !           110:
        !           111:        int64_t                  offset;
        !           112:        int                      offset_relative;
        !           113:
        !           114:        char                     indirect_type;
        !           115:        int                      indirect_relative;
        !           116:        int64_t                  indirect_offset;
        !           117:        char                     indirect_operator;
        !           118:        int64_t                  indirect_operand;
        !           119:
        !           120:        enum magic_type          type;
        !           121:        const char              *type_string;
        !           122:        char                     type_operator;
        !           123:        int64_t                  type_operand;
        !           124:
        !           125:        char                     test_operator;
        !           126:        int                      test_not;
        !           127:        const char              *test_string;
        !           128:        size_t                   test_string_size;
        !           129:        uint64_t                 test_unsigned;
        !           130:        int64_t                  test_signed;
        !           131:
        !           132:        int                      stringify;
        !           133:        const char              *result;
        !           134:        const char              *mimetype;
        !           135:
        !           136:        struct magic_lines       children;
        !           137:        TAILQ_ENTRY(magic_line)  entry;
        !           138:        RB_ENTRY(magic_line)     node;
        !           139: };
1.1       tedu      140:
1.5     ! nicm      141: struct magic {
        !           142:        const char              *path;
        !           143:        int                      warnings;
        !           144:
        !           145:        struct magic_tree        tree;
        !           146:
        !           147:        int                      compiled;
        !           148:        regex_t                  format_short;
        !           149:        regex_t                  format_long;
        !           150:        regex_t                  format_quad;
        !           151:        regex_t                  format_float;
        !           152:        regex_t                  format_string;
        !           153: };
1.1       tedu      154:
1.5     ! nicm      155: struct magic_state {
        !           156:        char                     out[4096];
        !           157:        const char              *mimetype;
        !           158:        int                      text;
        !           159:
        !           160:        const char              *base;
        !           161:        size_t                   size;
        !           162:        int64_t                  offset;
1.1       tedu      163: };
                    164:
1.5     ! nicm      165: #define MAGIC_TEST_TEXT 0x1
        !           166: #define MAGIC_TEST_MIME 0x2
        !           167:
        !           168: int             magic_compare(struct magic_line *, struct magic_line *);
        !           169: RB_PROTOTYPE(magic_tree, magic_line, node, magic_compare);
        !           170:
        !           171: char           *magic_strtoull(const char *, uint64_t *);
        !           172: char           *magic_strtoll(const char *, int64_t *);
        !           173: void            magic_warn(struct magic_line *, const char *, ...)
        !           174:                     __attribute__ ((format (printf, 2, 3)));
        !           175:
        !           176: void            magic_dump(struct magic *);
        !           177: struct magic   *magic_load(FILE *, const char *, int);
        !           178: const char     *magic_test(struct magic *, const void *, size_t, int);
        !           179:
        !           180: #endif /* MAGIC_H */