Lines Matching +full:1 +full:ms

9  * 1. Redistributions of source code must retain the above copyright
75 (CAST(uint64_t, (p)[1])<<48)| \
89 (CAST(uint64_t, (p)[1])<<8)| \
94 (CAST(uint32_t, (p)[1])<<8)| \
98 (CAST(uint32_t, (p)[1])<<16)| \
102 (CAST(uint32_t, (p)[1])<<24)| \
107 #define BE16(p) ((CAST(uint16_t, (p)[0])<<8)|(CAST(uint16_t, (p)[1])))
108 #define LE16(p) ((CAST(uint16_t, (p)[1])<<8)|(CAST(uint16_t, (p)[0])))
119 file_softmagic(struct magic_set *ms, const struct buffer *b, in file_softmagic() argument
123 int rv = 0, printed_something = 0, need_separator = 0, firstline = 1; in file_softmagic()
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()
141 case -1: 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
216 int found_matchv = 0; /* if a match is found it is set to 1*/ in match()
219 int print = (ms->flags & MAGIC_NODESC) == 0; in match()
230 if (file_check_mem(ms, cont_level) == -1) in match()
231 return -1; in match()
246 while (magindex < nmagic - 1 && in match()
247 magic[magindex + 1].cont_level != 0) 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()
264 case -1: in match()
265 return -1; in match()
271 *found_match = 1; in match()
272 *returnval = 1; in match()
275 switch (magiccheck(ms, m, m_rxcomp)) { in match()
276 case -1: in match()
277 return -1; in match()
295 if ((e = handle_annotation(ms, m, *firstline)) != 0) in match()
297 *found_match = 1; in match()
298 *need_separator = 1; in match()
299 *printed_something = 1; in match()
300 *returnval = 1; in match()
310 *found_match = 1; in match()
312 *returnval = 1; in match()
313 *need_separator = 1; in match()
314 *printed_something = 1; in match()
315 if (print_sep(ms, *firstline) == -1) in match()
316 return -1; in match()
317 if (mprint(ms, m) == -1) in match()
318 return -1; in match()
322 switch (moffset(ms, m, &bb, offset, &ms->c.li[cont_level].off)) { in match()
323 case -1: in match()
331 if (file_check_mem(ms, ++cont_level) == -1) in match()
332 return -1; in match()
334 while (magindex + 1 < nmagic && in match()
335 magic[magindex + 1].cont_level != 0) { 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()
375 case -1: in match()
376 return -1; in match()
380 flush = 1; in match()
384 *found_match = 1; in match()
385 *returnval = 1; in match()
391 switch (flush ? 1 : magiccheck(ms, m, m_rxcomp)) { in match()
392 case -1: in match()
393 return -1; 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()
413 *found_match = 1; in match()
414 *need_separator = 1; in match()
415 *printed_something = 1; in match()
416 *returnval = 1; in match()
420 *found_match = 1; in match()
423 *returnval = 1; in match()
436 *printed_something = 1; in match()
437 if (print_sep(ms, *firstline) in match()
438 == -1) in match()
439 return -1; in match()
444 if (file_printf(ms, " ") == -1) in match()
445 return -1; in match()
447 if (mprint(ms, m) == -1) in match()
448 return -1; in match()
449 *need_separator = 1; in match()
452 switch (moffset(ms, m, &bb, offset, in match()
453 &ms->c.li[cont_level].off)) { in match()
454 case -1: in match()
467 if (file_check_mem(ms, ++cont_level) == -1) in match()
468 return -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
491 int rc, rv = -1; in check_fmt()
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()
520 if ((copy = CAST(char *, malloc(len + 1))) == NULL) in strndup()
529 varexpand(struct magic_set *ms, char *buf, size_t len, const char *str) in varexpand() argument
537 return -1; in varexpand()
542 if (!*ptr || ptr[1] != '?') in varexpand()
543 return -1; in varexpand()
547 return -1; in varexpand()
548 for (ee = e = et + 1; *ee && *ee != '}'; ee++) in varexpand()
551 return -1; in varexpand()
554 if (ms->mode & 0111) { in varexpand()
563 return -1; in varexpand()
566 return -1; in varexpand()
570 sptr = ee + 1; in varexpand()
575 return -1; 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()
601 case -1: \ in mprint()
602 return -1; \ in mprint()
603 case 1: \ in mprint()
611 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) \ in mprint()
612 return -1; \ in mprint()
616 if (file_printf(ms, F(ms, desc, "%" format "u"), \ in mprint()
617 CAST(utype, v)) == -1) \ in mprint()
618 return -1; \ in mprint()
620 if (file_printf(ms, F(ms, desc, "%" format "d"), \ in mprint()
621 CAST(stype, v)) == -1) \ in mprint()
622 return -1; \ 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()
656 sizeof(m->value.s))) == -1) in mprint()
657 return -1; in mprint()
670 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
671 file_printable(ms, sbuf, sizeof(sbuf), str, in mprint()
672 sizeof(p->s) - (str - p->s))) == -1) in mprint()
673 return -1; in mprint()
676 size_t l = file_pstring_length_size(ms, m); in mprint()
678 return -1; in mprint()
687 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
688 file_fmtdatetime(tbuf, sizeof(tbuf), p->l, 0)) == -1) in mprint()
689 return -1; in mprint()
696 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
698 == -1) in mprint()
699 return -1; in mprint()
705 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
706 file_fmtdatetime(tbuf, sizeof(tbuf), p->q, 0)) == -1) in mprint()
707 return -1; in mprint()
713 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
714 file_fmtdatetime(tbuf, sizeof(tbuf), p->q, FILE_T_LOCAL)) == -1) in mprint()
715 return -1; in mprint()
721 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
723 == -1) in mprint()
724 return -1; in mprint()
731 switch (check_fmt(ms, desc)) { in mprint()
732 case -1: in mprint()
733 return -1; in mprint()
734 case 1: in mprint()
736 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
737 return -1; in mprint()
740 if (file_printf(ms, F(ms, desc, "%g"), vf) == -1) in mprint()
741 return -1; in mprint()
750 switch (check_fmt(ms, desc)) { in mprint()
751 case -1: in mprint()
752 return -1; in mprint()
753 case 1: in mprint()
755 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
756 return -1; in mprint()
759 if (file_printf(ms, F(ms, desc, "%g"), vd) == -1) in mprint()
760 return -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()
774 return -1; 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()
782 if (rval == -1) in mprint()
783 return -1; in mprint()
789 if (file_printf(ms, "%s", m->desc) == -1) in mprint()
790 return -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()
801 return -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()
806 return -1; in mprint()
811 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
812 file_fmtdate(tbuf, sizeof(tbuf), p->h)) == -1) in mprint()
813 return -1; in mprint()
818 if (file_printf(ms, F(ms, desc, "%s"), in mprint()
819 file_fmttime(tbuf, sizeof(tbuf), p->h)) == -1) in mprint()
820 return -1; in mprint()
824 if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) in mprint()
825 return -1; in mprint()
828 file_magerror(ms, "invalid m->type (%d) in mprint()", m->type); in mprint()
829 return -1; 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()
887 return -1; 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()
956 if (o == -1 || CAST(size_t, o) > 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()
981 return -1; in moffset()
984 return 1; 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()
1072 return -1; \
1077 return -1; \
1126 return -1; \
1151 mconvert(struct magic_set *ms, struct magic *m, int flip) in mconvert() argument
1153 union VALUETYPE *p = &ms->ms_value; in mconvert()
1157 if (cvt_8(p, m) == -1) in mconvert()
1159 return 1; in mconvert()
1167 if (cvt_16(p, m) == -1) in mconvert()
1169 return 1; in mconvert()
1173 if (cvt_32(p, m) == -1) in mconvert()
1175 return 1; in mconvert()
1181 if (cvt_64(p, m) == -1) in mconvert()
1183 return 1; in mconvert()
1189 p->s[sizeof(p->s) - 1] = '\0'; in mconvert()
1190 return 1; 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()
1206 * is 1, 2, or 4. We need at least 1 byte for NUL in mconvert()
1217 return 1; in mconvert()
1221 if (cvt_16(p, m) == -1) in mconvert()
1223 return 1; in mconvert()
1228 if (cvt_32(p, m) == -1) in mconvert()
1230 return 1; in mconvert()
1236 if (cvt_64(p, m) == -1) in mconvert()
1238 return 1; in mconvert()
1241 if (cvt_16(p, m) == -1) in mconvert()
1243 return 1; in mconvert()
1248 if (cvt_32(p, m) == -1) in mconvert()
1250 return 1; in mconvert()
1256 if (cvt_64(p, m) == -1) in mconvert()
1258 return 1; in mconvert()
1263 if (cvt_32(p, m) == -1) in mconvert()
1265 return 1; in mconvert()
1267 if (cvt_float(p, m) == -1) in mconvert()
1269 return 1; in mconvert()
1272 if (cvt_float(p, m) == -1) in mconvert()
1274 return 1; in mconvert()
1277 if (cvt_float(p, m) == -1) in mconvert()
1279 return 1; in mconvert()
1281 if (cvt_double(p, m) == -1) in mconvert()
1283 return 1; in mconvert()
1286 if (cvt_double(p, m) == -1) in mconvert()
1288 return 1; in mconvert()
1291 if (cvt_double(p, m) == -1) in mconvert()
1293 return 1; in mconvert()
1302 return 1; 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()
1378 if (b < end - 1 && b[0] == '\r' && b[1] == '\n') in mcopy()
1380 if (b < end - 1 && b[0] == '\n') 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()
1398 char *edst = &p->s[sizeof(p->s) - 1]; in mcopy()
1413 *(src - 1) != '\0' : in mcopy()
1414 ((src + 1 < esrc) && in mcopy()
1415 *(src + 1) != '\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()
1470 return 1; in do_ops()
1505 if ((ms->flags & MAGIC_DEBUG) != 0) in do_ops()
1507 return 1; 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()
1526 return -1; in msetoffset()
1529 if (buffer_fill(b) == -1) in msetoffset()
1530 return -1; in msetoffset()
1533 file_magerror(ms, "non zero offset %" SIZE_T_FORMAT in msetoffset()
1535 return -1; in msetoffset()
1538 return -1; in msetoffset()
1539 buffer_init(bb, -1, NULL, b->ebuf, b->elen); in msetoffset()
1540 ms->eoffset = ms->offset = CAST(int32_t, b->elen - m->offset); in msetoffset()
1546 buffer_init(bb, -1, NULL, b->fbuf, b->flen); 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()
1572 return -1; 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()
1605 return -1; in mget()
1608 if (*name_count >= ms->name_max) { in mget()
1609 file_error(ms, 0, "name use count (%hu) exceeded", in mget()
1611 return -1; in mget()
1615 if (mcopy(ms, p, m->type, m->flag & INDIR, s, in mget()
1616 CAST(uint32_t, offset + o), CAST(uint32_t, nbytes), m) == -1) in mget()
1617 return -1; in mget()
1619 if ((ms->flags & MAGIC_DEBUG) != 0) { in mget()
1643 if (OFFSET_OOB(nbytes, offset + off, 1)) in mget()
1702 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1706 if ((ms->flags & MAGIC_DEBUG) != 0) in mget()
1711 if (OFFSET_OOB(nbytes, offset, 1)) 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()
1809 return -1; in mget()
1810 ms->offset = offset; in mget()
1812 if ((ms->flags & MAGIC_DEBUG) != 0) { in mget()
1824 if (OFFSET_OOB(nbytes, offset, 1)) in mget()
1888 if ((pb = file_push_buffer(ms)) == NULL) in mget()
1889 return -1; in mget()
1897 rv = -1; 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()
1914 return -1; in mget()
1916 if (rv == 1) { in mget()
1917 if ((ms->flags & MAGIC_NODESC) == 0 && in mget()
1918 file_printf(ms, F(ms, m->desc, "%u"), offset) == -1) in mget()
1921 return -1; in mget()
1923 if (file_printf(ms, "%s", rbuf) == -1) { in mget()
1925 return -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()
1941 return -1; in mget()
1943 if (save_cont(ms, &c) == -1) { in mget()
1944 file_error(ms, errno, "can't allocate continuation"); in mget()
1945 return -1; 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()
1965 if (rv != 1) in mget()
1967 ms->offset = offset; in mget()
1968 ms->eoffset = eoffset; in mget()
1972 if (ms->flags & MAGIC_NODESC) in mget()
1973 return 1; in mget()
1974 if (file_printf(ms, "%s", m->desc) == -1) in mget()
1975 return -1; in mget()
1976 return 1; in mget()
1983 if (!mconvert(ms, m, flip)) in mget()
1985 return 1; in mget()
1993 * Convert the source args to unsigned here so that (1) the in file_strncmp()
2019 v = 1; in file_strncmp()
2042 v = 1; in file_strncmp()
2059 v = 1; in file_strncmp()
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()
2164 matched = 1; in magiccheck()
2168 matched = isunordered(fl, fv) ? 1 : fv != fl; in magiccheck()
2184 file_magerror(ms, "cannot happen with float: " in magiccheck()
2186 return -1; in magiccheck()
2197 matched = 1; in magiccheck()
2201 matched = isunordered(dv, dl) ? 1 : dv != dl; in magiccheck()
2217 file_magerror(ms, "cannot happen with double: " in magiccheck()
2219 return -1; in magiccheck()
2244 case FILE_SEARCH: { /* search ms->search.s for the string m->value.s */ 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()
2277 v = 1; 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()
2289 v = 1; 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()
2320 return -1; in magiccheck()
2326 file_error(ms, errno, in magiccheck()
2329 return -1; in magiccheck()
2331 memcpy(copy, ms->search.s, slen); in magiccheck()
2338 rc = file_regexec(ms, rx, RCAST(const char *, search), in magiccheck()
2339 1, &pmatch, 0); 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()
2351 v = 1; in magiccheck()
2355 return -1; in magiccheck()
2360 return ms->ms_value.q != 0; in magiccheck()
2363 return 1; in magiccheck()
2365 matched = der_cmp(ms, m); in magiccheck()
2366 if (matched == -1) { in magiccheck()
2367 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2379 file_magerror(ms, "invalid type %d in magiccheck()", m->type); in magiccheck()
2380 return -1; in magiccheck()
2383 v = file_signextend(ms, m, v); in magiccheck()
2387 if ((ms->flags & MAGIC_DEBUG) != 0) in magiccheck()
2389 "u == *any* = 1", CAST(unsigned long long, v)); in magiccheck()
2390 matched = 1; 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()
2473 return -1; in magiccheck()
2475 if ((ms->flags & MAGIC_DEBUG) != 0) { in magiccheck()
2477 file_magic_strength(m, 1)); 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()
2488 return -1; in handle_annotation()
2489 if (file_printf(ms, "%.8s", m->apple) == -1) in handle_annotation()
2490 return -1; in handle_annotation()
2491 return 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()
2495 return -1; in handle_annotation()
2496 if (file_printf(ms, "%s", m->ext) == -1) in handle_annotation()
2497 return -1; in handle_annotation()
2498 return 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()
2504 return -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()
2510 return -1; in handle_annotation()
2511 return 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()