in src/softmagic.c [46:140]
private int match(struct magic_set *, struct magic *, uint32_t,
const struct buffer *, size_t, int, int, int, uint16_t *,
uint16_t *, int *, int *, int *, int *);
private int mget(struct magic_set *, struct magic *, const struct buffer *,
const unsigned char *, size_t,
size_t, unsigned int, int, int, int, uint16_t *,
uint16_t *, int *, int *, int *, int *);
private int msetoffset(struct magic_set *, struct magic *, struct buffer *,
const struct buffer *, size_t, unsigned int);
private int magiccheck(struct magic_set *, struct magic *);
private int32_t mprint(struct magic_set *, struct magic *);
private int moffset(struct magic_set *, struct magic *, const struct buffer *,
int32_t *);
private void mdebug(uint32_t, const char *, size_t);
private int mcopy(struct magic_set *, union VALUETYPE *, int, int,
const unsigned char *, uint32_t, size_t, struct magic *);
private int mconvert(struct magic_set *, struct magic *, int);
private int print_sep(struct magic_set *, int);
private int handle_annotation(struct magic_set *, struct magic *, int);
private int cvt_8(union VALUETYPE *, const struct magic *);
private int cvt_16(union VALUETYPE *, const struct magic *);
private int cvt_32(union VALUETYPE *, const struct magic *);
private int cvt_64(union VALUETYPE *, const struct magic *);
#define OFFSET_OOB(n, o, i) ((n) < CAST(uint32_t, (o)) || (i) > ((n) - (o)))
#define BE64(p) ( \
(CAST(uint64_t, (p)->hq[0])<<56)| \
(CAST(uint64_t, (p)->hq[1])<<48)| \
(CAST(uint64_t, (p)->hq[2])<<40)| \
(CAST(uint64_t, (p)->hq[3])<<32)| \
(CAST(uint64_t, (p)->hq[4])<<24)| \
(CAST(uint64_t, (p)->hq[5])<<16)| \
(CAST(uint64_t, (p)->hq[6])<<8)| \
(CAST(uint64_t, (p)->hq[7])))
#define LE64(p) ( \
(CAST(uint64_t, (p)->hq[7])<<56)| \
(CAST(uint64_t, (p)->hq[6])<<48)| \
(CAST(uint64_t, (p)->hq[5])<<40)| \
(CAST(uint64_t, (p)->hq[4])<<32)| \
(CAST(uint64_t, (p)->hq[3])<<24)| \
(CAST(uint64_t, (p)->hq[2])<<16)| \
(CAST(uint64_t, (p)->hq[1])<<8)| \
(CAST(uint64_t, (p)->hq[0])))
#define LE32(p) ( \
(CAST(uint32_t, (p)->hl[3])<<24)| \
(CAST(uint32_t, (p)->hl[2])<<16)| \
(CAST(uint32_t, (p)->hl[1])<<8)| \
(CAST(uint32_t, (p)->hl[0])))
#define BE32(p) ( \
(CAST(uint32_t, (p)->hl[0])<<24)| \
(CAST(uint32_t, (p)->hl[1])<<16)| \
(CAST(uint32_t, (p)->hl[2])<<8)| \
(CAST(uint32_t, (p)->hl[3])))
#define ME32(p) ( \
(CAST(uint32_t, (p)->hl[1])<<24)| \
(CAST(uint32_t, (p)->hl[0])<<16)| \
(CAST(uint32_t, (p)->hl[3])<<8)| \
(CAST(uint32_t, (p)->hl[2])))
#define BE16(p) ((CAST(uint16_t, (p)->hs[0])<<8)|(CAST(uint16_t, (p)->hs[1])))
#define LE16(p) ((CAST(uint16_t, (p)->hs[1])<<8)|(CAST(uint16_t, (p)->hs[0])))
#define SEXT(s,v,p) ((s) ? \
CAST(intmax_t, CAST(int##v##_t, p)) : \
CAST(intmax_t, CAST(uint##v##_t, p)))
/*
* softmagic - lookup one file in parsed, in-memory copy of database
* Passed the name and FILE * of one file to be typed.
*/
/*ARGSUSED1*/ /* nbytes passed for regularity, maybe need later */
protected int
file_softmagic(struct magic_set *ms, const struct buffer *b,
uint16_t *indir_count, uint16_t *name_count, int mode, int text)
{
struct mlist *ml;
int rv, printed_something = 0, need_separator = 0;
uint16_t nc, ic;
if (name_count == NULL) {
nc = 0;
name_count = &nc;
}
if (indir_count == NULL) {
ic = 0;
indir_count = ⁣
}
for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next)
if ((rv = match(ms, ml->magic, ml->nmagic, b, 0, mode,
text, 0, indir_count, name_count,
&printed_something, &need_separator, NULL, NULL)) != 0)
return rv;
return 0;
}