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