Lines Matching refs:ms

119 file_softmagic(struct magic_set *ms, const struct buffer *b,  in file_softmagic()  argument
135 for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next) { in file_softmagic()
136 int ret = match(ms, ml->magic, ml->magic_rxcomp, ml->nmagic, b, in file_softmagic()
146 if ((ms->flags & MAGIC_CONTINUE) == 0) in file_softmagic()
161 file_fmtcheck(struct magic_set *ms, const char *desc, const char *def, in file_fmtcheck() argument
171 file_magerror(ms, in file_fmtcheck()
208 match(struct magic_set *ms, struct magic *magic, file_regex_t **magic_rxcomp, in match() argument
219 int print = (ms->flags & MAGIC_NODESC) == 0; in match()
230 if (file_check_mem(ms, cont_level) == -1) in match()
253 if (msetoffset(ms, m, &bb, b, offset, cont_level) == -1) in match()
255 ms->line = m->lineno; in match()
258 switch (mget(ms, m, b, CAST(const unsigned char *, bb.fbuf), in match()
275 switch (magiccheck(ms, m, m_rxcomp)) { in match()
295 if ((e = handle_annotation(ms, m, *firstline)) != 0) in match()
315 if (print_sep(ms, *firstline) == -1) in match()
317 if (mprint(ms, m) == -1) in match()
322 switch (moffset(ms, m, &bb, offset, &ms->c.li[cont_level].off)) { in match()
331 if (file_check_mem(ms, ++cont_level) == -1) in match()
338 ms->line = m->lineno; /* for messages */ in match()
349 if (msetoffset(ms, m, &bb, b, offset, cont_level) == -1) in match()
353 if ((ms->flags & MAGIC_DEBUG) != 0) in match()
359 ms->offset += in match()
360 ms->c.li[cont_level - 1].off; in match()
366 if (ms->c.li[cont_level].last_match == 1) in match()
370 switch (mget(ms, m, b, CAST(const unsigned char *, in match()
391 switch (flush ? 1 : magiccheck(ms, m, m_rxcomp)) { in match()
396 ms->c.li[cont_level].last_match = 0; in match()
401 ms->c.li[cont_level].last_match = 1; in match()
404 ms->c.li[cont_level].got_match = 0; in match()
405 else if (ms->c.li[cont_level].got_match) { in match()
409 ms->c.li[cont_level].got_match = 1; in match()
411 if ((e = handle_annotation(ms, m, *firstline)) in match()
437 if (print_sep(ms, *firstline) in match()
444 if (file_printf(ms, " ") == -1) in match()
447 if (mprint(ms, m) == -1) in match()
452 switch (moffset(ms, m, &bb, offset, in match()
453 &ms->c.li[cont_level].off)) { in match()
467 if (file_check_mem(ms, ++cont_level) == -1) in match()
476 if ((ms->flags & MAGIC_CONTINUE) == 0) in match()
488 check_fmt(struct magic_set *ms, const char *fmt) in check_fmt() argument
497 rc = file_regcomp(ms, &rx, pat, REG_EXTENDED|REG_NOSUB); in check_fmt()
499 rc = file_regexec(ms, &rx, fmt, 0, 0, 0); in check_fmt()
529 varexpand(struct magic_set *ms, char *buf, size_t len, const char *str) in varexpand() argument
554 if (ms->mode & 0111) { in varexpand()
584 mprint(struct magic_set *ms, struct magic *m) in mprint() argument
591 union VALUETYPE *p = &ms->ms_value; in mprint()
593 if (varexpand(ms, ebuf, sizeof(ebuf), m->desc) == -1) in mprint()
599 v = file_signextend(ms, m, CAST(uint64_t, value)); \ in mprint()
600 switch (check_fmt(ms, desc)) { \ in mprint()
611 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) \ in mprint()
616 if (file_printf(ms, F(ms, desc, "%" format "u"), \ in mprint()
620 if (file_printf(ms, F(ms, desc, "%" format "d"), \ in mprint()
654 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
655 file_printable(ms, sbuf, sizeof(sbuf), m->value.s, in mprint()
670 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
671 file_printable(ms, sbuf, sizeof(sbuf), str, in mprint()
676 size_t l = file_pstring_length_size(ms, m); in mprint()
687 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
696 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
705 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
713 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
721 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
731 switch (check_fmt(ms, desc)) { in mprint()
736 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
740 if (file_printf(ms, F(ms, desc, "%g"), vf) == -1) in mprint()
750 switch (check_fmt(ms, desc)) { in mprint()
755 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
759 if (file_printf(ms, F(ms, desc, "%g"), vd) == -1) in mprint()
770 cp = strndup(RCAST(const char *, ms->search.s), in mprint()
771 ms->search.rm_len); in mprint()
773 file_oomem(ms, ms->search.rm_len); in mprint()
778 rval = file_printf(ms, F(ms, desc, "%s"), file_printable(ms, in mprint()
779 sbuf, sizeof(sbuf), scp, ms->search.rm_len)); in mprint()
789 if (file_printf(ms, "%s", m->desc) == -1) in mprint()
798 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
799 file_printable(ms, sbuf, sizeof(sbuf), ms->ms_value.s, in mprint()
800 sizeof(ms->ms_value.s))) == -1) in mprint()
804 (void) file_print_guid(buf, sizeof(buf), ms->ms_value.guid); in mprint()
805 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
811 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
818 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
824 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
828 file_magerror(ms, "invalid m->type (%d) in mprint()", m->type); in mprint()
835 moffset(struct magic_set *ms, struct magic *m, const struct buffer *b, in moffset() argument
843 o = CAST(int32_t, (ms->offset + sizeof(char))); in moffset()
855 o = CAST(int32_t, (ms->offset + sizeof(short))); in moffset()
862 o = CAST(int32_t, (ms->offset + sizeof(int32_t))); in moffset()
868 o = CAST(int32_t, (ms->offset + sizeof(int64_t))); in moffset()
877 o = ms->offset + m->vallen; in moffset()
879 union VALUETYPE *p = &ms->ms_value; in moffset()
883 o = CAST(uint32_t, (ms->offset + strlen(p->s))); in moffset()
885 size_t l = file_pstring_length_size(ms, m); in moffset()
897 o = CAST(int32_t, (ms->offset + sizeof(uint32_t))); in moffset()
904 o = CAST(int32_t, (ms->offset + sizeof(uint32_t))); in moffset()
910 o = CAST(int32_t, (ms->offset + sizeof(uint64_t))); in moffset()
916 o = CAST(int32_t, (ms->offset + sizeof(uint64_t))); in moffset()
922 o = CAST(int32_t, (ms->offset + sizeof(float))); in moffset()
928 o = CAST(int32_t, (ms->offset + sizeof(double))); in moffset()
933 o = CAST(int32_t, ms->search.offset - offset); in moffset()
936 (ms->search.offset + ms->search.rm_len - offset)); in moffset()
941 o = CAST(int32_t, ms->search.offset - offset); in moffset()
943 o = CAST(int32_t, (ms->search.offset + m->vallen - offset)); in moffset()
951 o = ms->offset; in moffset()
955 o = der_offs(ms, m, nbytes); in moffset()
957 if ((ms->flags & MAGIC_DEBUG) != 0) { in moffset()
968 o = CAST(int32_t, (ms->offset + 2 * sizeof(uint64_t))); in moffset()
978 file_error(ms, 0, "Offset out of range %" SIZE_T_FORMAT in moffset()
988 cvt_id3(struct magic_set *ms, uint32_t v) in cvt_id3() argument
994 if ((ms->flags & MAGIC_DEBUG) != 0) in cvt_id3()
1151 mconvert(struct magic_set *ms, struct magic *m, int flip) in mconvert() argument
1153 union VALUETYPE *p = &ms->ms_value; in mconvert()
1194 size_t len, sz = file_pstring_length_size(ms, m); in mconvert()
1199 len = file_pstring_get_length(ms, m, ptr1); in mconvert()
1304 file_magerror(ms, "invalid type %d in mconvert()", m->type); in mconvert()
1308 file_magerror(ms, "zerodivide in mconvert()"); in mconvert()
1323 mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir, in mcopy() argument
1337 ms->search.s = RCAST(const char *, s) + offset; in mcopy()
1338 ms->search.s_len = nbytes - offset; in mcopy()
1339 ms->search.offset = offset; in mcopy()
1351 ms->search.s_len = 0; in mcopy()
1352 ms->search.s = NULL; in mcopy()
1366 if (bytecnt > ms->regex_max) in mcopy()
1367 bytecnt = ms->regex_max; in mcopy()
1387 ms->search.s = buf; in mcopy()
1388 ms->search.s_len = last - buf; in mcopy()
1389 ms->search.offset = offset; in mcopy()
1390 ms->search.rm_len = 0; in mcopy()
1461 do_ops(struct magic_set *ms, struct magic *m, uint32_t *rv, intmax_t lhs, in do_ops() argument
1468 if ((ms->flags & MAGIC_DEBUG) != 0) in do_ops()
1505 if ((ms->flags & MAGIC_DEBUG) != 0) in do_ops()
1514 msetoffset(struct magic_set *ms, struct magic *m, struct buffer *bb, in msetoffset() argument
1524 file_error(ms, 0, "negative offset %d at continuation" in msetoffset()
1533 file_magerror(ms, "non zero offset %" SIZE_T_FORMAT in msetoffset()
1540 ms->eoffset = ms->offset = CAST(int32_t, b->elen - m->offset); in msetoffset()
1547 ms->offset = offset; in msetoffset()
1548 ms->eoffset = 0; in msetoffset()
1550 ms->offset = ms->eoffset + offset; in msetoffset()
1553 if ((ms->flags & MAGIC_DEBUG) != 0) { in msetoffset()
1557 bb->fbuf, bb->flen, bb->elen, ms->offset, b->fbuf, in msetoffset()
1564 save_cont(struct magic_set *ms, struct cont *c) in save_cont() argument
1567 *c = ms->c; in save_cont()
1569 ms->c.li = CAST(struct level_info *, malloc(len)); in save_cont()
1570 if (ms->c.li == NULL) { in save_cont()
1571 ms->c = *c; in save_cont()
1574 memcpy(ms->c.li, c->li, len); in save_cont()
1579 restore_cont(struct magic_set *ms, struct cont *c) in restore_cont() argument
1581 free(ms->c.li); in restore_cont()
1582 ms->c = *c; in restore_cont()
1586 mget(struct magic_set *ms, struct magic *m, const struct buffer *b, in mget() argument
1592 uint32_t eoffset, offset = ms->offset; in mget()
1598 union VALUETYPE *p = &ms->ms_value; in mget()
1602 if (*indir_count >= ms->indir_max) { in mget()
1603 file_error(ms, 0, "indirect count (%hu) exceeded", in mget()
1608 if (*name_count >= ms->name_max) { in mget()
1609 file_error(ms, 0, "name use count (%hu) exceeded", in mget()
1615 if (mcopy(ms, p, m->type, m->flag & INDIR, s, in mget()
1619 if ((ms->flags & MAGIC_DEBUG) != 0) { in mget()
1702 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1706 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1713 if (do_ops(ms, m, &offset, SEXT(sgn,8,p->b), off)) in mget()
1719 if (do_ops(ms, m, &offset, SEXT(sgn,16,BE16(p->hs)), off)) in mget()
1725 if (do_ops(ms, m, &offset, SEXT(sgn,16,LE16(p->hs)), off)) in mget()
1731 if (do_ops(ms, m, &offset, SEXT(sgn,16,p->h), off)) in mget()
1740 lhs = cvt_id3(ms, CAST(uint32_t, lhs)); in mget()
1741 if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) in mget()
1750 lhs = cvt_id3(ms, CAST(uint32_t, lhs)); in mget()
1751 if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) in mget()
1757 if (do_ops(ms, m, &offset, SEXT(sgn,32,ME32(p->hl)), off)) in mget()
1763 if (do_ops(ms, m, &offset, SEXT(sgn,32,p->l), off)) in mget()
1769 if (do_ops(ms, m, &offset, SEXT(sgn,64,LE64(p->hq)), off)) in mget()
1775 if (do_ops(ms, m, &offset, SEXT(sgn,64,BE64(p->hq)), off)) in mget()
1781 if(do_ops(ms, m, &offset, in mget()
1786 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1793 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1798 offset += ms->c.li[cont_level - 1].off; in mget()
1800 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1805 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1808 if (mcopy(ms, p, m->type, 0, s, offset, nbytes, m) == -1) in mget()
1810 ms->offset = offset; in mget()
1812 if ((ms->flags & MAGIC_DEBUG) != 0) { in mget()
1888 if ((pb = file_push_buffer(ms)) == NULL) in mget()
1898 for (mlp = ms->mlist[0]->next; mlp != ms->mlist[0]; in mget()
1901 if ((rv = match(ms, mlp->magic, mlp->magic_rxcomp, in mget()
1909 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1912 rbuf = file_pop_buffer(ms, pb); in mget()
1913 if (rbuf == NULL && ms->event_flags & EVENT_HAD_ERR) in mget()
1917 if ((ms->flags & MAGIC_NODESC) == 0 && in mget()
1918 file_printf(ms, F(ms, m->desc, "%u"), offset) == -1) in mget()
1923 if (file_printf(ms, "%s", rbuf) == -1) { in mget()
1939 if (file_magicfind(ms, rbuf, &ml) == -1) { in mget()
1940 file_error(ms, 0, "cannot find entry `%s'", rbuf); in mget()
1943 if (save_cont(ms, &c) == -1) { in mget()
1944 file_error(ms, errno, "can't allocate continuation"); in mget()
1954 eoffset = ms->eoffset; in mget()
1955 rv = match(ms, ml.magic, ml.magic_rxcomp, ml.nmagic, b, in mget()
1959 ms->ms_value.q = nfound_match; in mget()
1963 restore_cont(ms, &c); in mget()
1967 ms->offset = offset; in mget()
1968 ms->eoffset = eoffset; in mget()
1972 if (ms->flags & MAGIC_NODESC) in mget()
1974 if (file_printf(ms, "%s", m->desc) == -1) in mget()
1983 if (!mconvert(ms, m, flip)) in mget()
2079 alloc_regex(struct magic_set *ms, struct magic *m) in alloc_regex() argument
2085 file_error(ms, errno, "can't allocate %" SIZE_T_FORMAT in alloc_regex()
2090 rc = file_regcomp(ms, rx, m->value.s, REG_EXTENDED | REG_NEWLINE | in alloc_regex()
2100 magiccheck(struct magic_set *ms, struct magic *m, file_regex_t **m_cache) in magiccheck() argument
2107 union VALUETYPE *p = &ms->ms_value; in magiccheck()
2184 file_magerror(ms, "cannot happen with float: " in magiccheck()
2217 file_magerror(ms, "cannot happen with double: " in magiccheck()
2248 if (ms->search.s == NULL) in magiccheck()
2254 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2255 size_t xlen = ms->search.s_len > 100 ? 100 in magiccheck()
2256 : ms->search.s_len; in magiccheck()
2259 file_showstr(stderr, ms->search.s, xlen); in magiccheck()
2260 fprintf(stderr, "%s] for [", ms->search.s_len == xlen in magiccheck()
2268 if (m->str_range == 0 || ms->search.s_len < idx) in magiccheck()
2269 idx = ms->search.s_len; in magiccheck()
2270 found = CAST(const char *, memmem(ms->search.s, idx, in magiccheck()
2272 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2280 idx = found - ms->search.s; in magiccheck()
2281 ms->search.offset += idx; in magiccheck()
2282 ms->search.rm_len = ms->search.s_len - idx; in magiccheck()
2288 if (slen + idx > ms->search.s_len) { in magiccheck()
2293 v = file_strncmp(m->value.s, ms->search.s + idx, slen, in magiccheck()
2294 ms->search.s_len - idx, m->str_flags); in magiccheck()
2296 ms->search.offset += idx; in magiccheck()
2297 ms->search.rm_len = ms->search.s_len - idx; in magiccheck()
2301 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2311 size_t slen = ms->search.s_len; in magiccheck()
2314 if (ms->search.s == NULL) in magiccheck()
2318 rx = *m_cache = alloc_regex(ms, m); in magiccheck()
2326 file_error(ms, errno, in magiccheck()
2331 memcpy(copy, ms->search.s, slen); in magiccheck()
2338 rc = file_regexec(ms, rx, RCAST(const char *, search), in magiccheck()
2343 ms->search.s += CAST(int, pmatch.rm_so); in magiccheck()
2344 ms->search.offset += CAST(size_t, pmatch.rm_so); in magiccheck()
2345 ms->search.rm_len = CAST(size_t, in magiccheck()
2360 return ms->ms_value.q != 0; in magiccheck()
2365 matched = der_cmp(ms, m); in magiccheck()
2367 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2379 file_magerror(ms, "invalid type %d in magiccheck()", m->type); in magiccheck()
2383 v = file_signextend(ms, m, v); in magiccheck()
2387 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2395 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2404 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2414 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2422 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2433 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2441 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2451 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2462 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2471 file_magerror(ms, "cannot happen: invalid relation `%c'", in magiccheck()
2475 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2484 handle_annotation(struct magic_set *ms, struct magic *m, int firstline) in handle_annotation() argument
2486 if ((ms->flags & MAGIC_APPLE) && m->apple[0]) { in handle_annotation()
2487 if (print_sep(ms, firstline) == -1) in handle_annotation()
2489 if (file_printf(ms, "%.8s", m->apple) == -1) in handle_annotation()
2493 if ((ms->flags & MAGIC_EXTENSION) && m->ext[0]) { in handle_annotation()
2494 if (print_sep(ms, firstline) == -1) in handle_annotation()
2496 if (file_printf(ms, "%s", m->ext) == -1) in handle_annotation()
2500 if ((ms->flags & MAGIC_MIME_TYPE) && m->mimetype[0]) { in handle_annotation()
2503 if (print_sep(ms, firstline) == -1) in handle_annotation()
2505 if (varexpand(ms, buf, sizeof(buf), m->mimetype) == -1) in handle_annotation()
2509 if (file_printf(ms, "%s", p) == -1) in handle_annotation()
2517 print_sep(struct magic_set *ms, int firstline) in print_sep() argument
2525 return file_separator(ms); in print_sep()