Lines Matching refs:ms
115 file_private int getvalue(struct magic_set *ms, struct magic *, const char **, int);
196 struct magic_set *ms; in main() local
209 if ((ms = magic_open(MAGIC_CHECK)) == NULL) { in main()
213 ret = magic_compile(ms, argv[1]) == -1 ? 1 : 0; in main()
215 (void)fprintf(stderr, "%s: %s\n", progname, magic_error(ms)); in main()
216 magic_close(ms); in main()
474 apprentice_1(struct magic_set *ms, const char *fn, int action) in apprentice_1() argument
482 file_error(ms, 0, "magic element size %lu != %lu", in apprentice_1()
489 map = apprentice_load(ms, fn, action); in apprentice_1()
492 return apprentice_compile(ms, map, fn); in apprentice_1()
496 map = apprentice_map(ms, fn); in apprentice_1()
498 if (ms->flags & MAGIC_CHECK) in apprentice_1()
500 map = apprentice_load(ms, fn, action); in apprentice_1()
506 if (add_mlist(ms->mlist[i], map, i) == -1) { in apprentice_1()
511 mlist_free_all(ms); in apprentice_1()
512 file_oomem(ms, sizeof(*ms->mlist[0])); in apprentice_1()
521 apprentice_list(ms->mlist[i], BINTEST); in apprentice_1()
523 apprentice_list(ms->mlist[i], TEXTTEST); in apprentice_1()
533 file_ms_free(struct magic_set *ms) in file_ms_free() argument
536 if (ms == NULL) in file_ms_free()
539 mlist_free(ms->mlist[i]); in file_ms_free()
540 free(ms->o.pbuf); in file_ms_free()
541 free(ms->o.buf); in file_ms_free()
542 free(ms->c.li); in file_ms_free()
544 freelocale(ms->c_lc_ctype); in file_ms_free()
546 free(ms); in file_ms_free()
552 struct magic_set *ms; in file_ms_alloc() local
555 if ((ms = CAST(struct magic_set *, calloc(CAST(size_t, 1u), in file_ms_alloc()
556 sizeof(*ms)))) == NULL) in file_ms_alloc()
559 if (magic_setflags(ms, flags) == -1) { in file_ms_alloc()
564 ms->o.buf = ms->o.pbuf = NULL; in file_ms_alloc()
565 ms->o.blen = 0; in file_ms_alloc()
566 len = (ms->c.len = 10) * sizeof(*ms->c.li); in file_ms_alloc()
568 if ((ms->c.li = CAST(struct level_info *, malloc(len))) == NULL) in file_ms_alloc()
571 ms->event_flags = 0; in file_ms_alloc()
572 ms->error = -1; in file_ms_alloc()
574 ms->mlist[i] = NULL; in file_ms_alloc()
575 ms->file = "unknown"; in file_ms_alloc()
576 ms->line = 0; in file_ms_alloc()
577 ms->indir_max = FILE_INDIR_MAX; in file_ms_alloc()
578 ms->name_max = FILE_NAME_MAX; in file_ms_alloc()
579 ms->elf_shnum_max = FILE_ELF_SHNUM_MAX; in file_ms_alloc()
580 ms->elf_shsize_max = FILE_ELF_SHSIZE_MAX; in file_ms_alloc()
581 ms->elf_phnum_max = FILE_ELF_PHNUM_MAX; in file_ms_alloc()
582 ms->elf_notes_max = FILE_ELF_NOTES_MAX; in file_ms_alloc()
583 ms->regex_max = FILE_REGEX_MAX; in file_ms_alloc()
584 ms->bytes_max = FILE_BYTES_MAX; in file_ms_alloc()
585 ms->encoding_max = FILE_ENCODING_MAX; in file_ms_alloc()
587 ms->c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0); in file_ms_alloc()
588 assert(ms->c_lc_ctype != NULL); in file_ms_alloc()
590 return ms; in file_ms_alloc()
592 free(ms); in file_ms_alloc()
642 mlist_free_all(struct magic_set *ms) in mlist_free_all() argument
647 mlist_free(ms->mlist[i]); in mlist_free_all()
648 ms->mlist[i] = NULL; in mlist_free_all()
691 buffer_apprentice(struct magic_set *ms, struct magic **bufs, in buffer_apprentice() argument
700 (void)file_reset(ms, 0); in buffer_apprentice()
705 mlist_free(ms->mlist[i]); in buffer_apprentice()
706 if ((ms->mlist[i] = mlist_alloc()) == NULL) { in buffer_apprentice()
707 file_oomem(ms, sizeof(*ms->mlist[0])); in buffer_apprentice()
713 map = apprentice_buf(ms, bufs[i], sizes[i]); in buffer_apprentice()
718 if (add_mlist(ms->mlist[j], map, j) == -1) { in buffer_apprentice()
719 file_oomem(ms, sizeof(*ms->mlist[0])); in buffer_apprentice()
727 mlist_free_all(ms); in buffer_apprentice()
734 file_apprentice(struct magic_set *ms, const char *fn, int action) in file_apprentice() argument
740 (void)file_reset(ms, 0); in file_apprentice()
748 file_oomem(ms, strlen(fn)); in file_apprentice()
753 mlist_free(ms->mlist[i]); in file_apprentice()
754 if ((ms->mlist[i] = mlist_alloc()) == NULL) { in file_apprentice()
755 file_oomem(ms, sizeof(*ms->mlist[0])); in file_apprentice()
757 mlist_free(ms->mlist[j]); in file_apprentice()
758 ms->mlist[j] = NULL; in file_apprentice()
772 fileerr = apprentice_1(ms, fn, action); in file_apprentice()
781 mlist_free(ms->mlist[i]); in file_apprentice()
782 ms->mlist[i] = NULL; in file_apprentice()
784 file_error(ms, 0, "could not find any valid magic files!"); in file_apprentice()
796 mlist_free(ms->mlist[i]); in file_apprentice()
797 ms->mlist[i] = NULL; in file_apprentice()
808 file_error(ms, 0, "Invalid action %d", action); in file_apprentice()
1283 addentry(struct magic_set *ms, struct magic_entry *me, in addentry() argument
1294 file_oomem(ms, sizeof(*mp) * incr); in addentry()
1312 load_1(struct magic_set *ms, int action, const char *fn, int *errs, in load_1() argument
1320 FILE *f = fopen(ms->file = fn, "r"); in load_1()
1323 file_error(ms, errno, "cannot read magic file `%s'", in load_1()
1331 for (ms->line = 1; (len = getline(&line, &llen, f)) != -1; in load_1()
1332 ms->line++) { in load_1()
1354 file_error(ms, 0, in load_1()
1360 file_error(ms, 0, in load_1()
1366 if ((*bang[i].fun)(ms, &me, in load_1()
1377 switch (parse(ms, &me, line, lineno, action)) { in load_1()
1381 (void)addentry(ms, &me, mset); in load_1()
1390 (void)addentry(ms, &me, mset); in load_1()
1407 set_text_binary(struct magic_set *ms, struct magic_entry *me, uint32_t nme, in set_text_binary() argument
1418 if ((ms->flags & MAGIC_DEBUG) == 0) in set_text_binary()
1440 set_last_default(struct magic_set *ms, struct magic_entry *me, uint32_t nme) in set_last_default() argument
1451 ms->line = me[i].mp->lineno; in set_last_default()
1452 file_magwarn(ms, in set_last_default()
1461 coalesce_entries(struct magic_set *ms, struct magic_entry *me, uint32_t nme, in coalesce_entries() argument
1478 file_oomem(ms, slen); in coalesce_entries()
1504 apprentice_load(struct magic_set *ms, const char *fn, int action) in apprentice_load() argument
1517 ms->flags |= MAGIC_CHECK; /* Enable checks for parsed files */ in apprentice_load()
1522 file_oomem(ms, sizeof(*map)); in apprentice_load()
1542 file_oomem(ms, in apprentice_load()
1559 file_oomem(ms, mlen); in apprentice_load()
1573 load_1(ms, action, filearr[i], &errs, mset); in apprentice_load()
1580 load_1(ms, action, fn, &errs, mset); in apprentice_load()
1591 i = set_text_binary(ms, mset[j].me, mset[j].count, i); in apprentice_load()
1601 set_last_default(ms, mset[j].me, mset[j].count); in apprentice_load()
1607 if (coalesce_entries(ms, mset[j].me, mset[j].count, in apprentice_load()
1630 file_signextend(struct magic_set *ms, struct magic *m, uint64_t v) in file_signextend() argument
1706 if (ms->flags & MAGIC_CHECK) in file_signextend()
1707 file_magwarn(ms, "cannot happen: m->type=%d\n", in file_signextend()
1716 string_modifier_check(struct magic_set *ms, struct magic *m) in string_modifier_check() argument
1718 if ((ms->flags & MAGIC_CHECK) == 0) in string_modifier_check()
1723 file_magwarn(ms, in string_modifier_check()
1731 file_magwarn(ms, in string_modifier_check()
1739 file_magwarn(ms, in string_modifier_check()
1747 file_magwarn(ms, in string_modifier_check()
1756 file_magwarn(ms, "'/%c' not allowed on regex\n", in string_modifier_check()
1761 file_magwarn(ms, "'/%c' not allowed on regex\n", in string_modifier_check()
1767 file_magwarn(ms, "coding error: m->type=%d\n", in string_modifier_check()
1827 check_cond(struct magic_set *ms, int cond, uint32_t cont_level) in check_cond() argument
1830 last_cond = ms->c.li[cont_level].last_cond; in check_cond()
1835 if (ms->flags & MAGIC_CHECK) in check_cond()
1836 file_magwarn(ms, "syntax error: `if'"); in check_cond()
1844 if (ms->flags & MAGIC_CHECK) in check_cond()
1845 file_magwarn(ms, "syntax error: `elif'"); in check_cond()
1853 if (ms->flags & MAGIC_CHECK) in check_cond()
1854 file_magwarn(ms, "syntax error: `else'"); in check_cond()
1865 ms->c.li[cont_level].last_cond = last_cond; in check_cond()
1871 parse_indirect_modifier(struct magic_set *ms, struct magic *m, const char **lp) in parse_indirect_modifier() argument
1881 if (ms->flags & MAGIC_CHECK) in parse_indirect_modifier()
1882 file_magwarn(ms, "indirect modifier `%c' " in parse_indirect_modifier()
1892 parse_op_modifier(struct magic_set *ms, struct magic *m, const char **lp, in parse_op_modifier() argument
1903 m->num_mask = file_signextend(ms, m, val); in parse_op_modifier()
1909 parse_string_modifier(struct magic_set *ms, struct magic *m, const char **lp) in parse_string_modifier() argument
1921 if (have_range && (ms->flags & MAGIC_CHECK)) in parse_string_modifier()
1922 file_magwarn(ms, "multiple ranges"); in parse_string_modifier()
1926 file_magwarn(ms, "zero range"); in parse_string_modifier()
1994 if (ms->flags & MAGIC_CHECK) in parse_string_modifier()
1995 file_magwarn(ms, "string modifier `%c' " in parse_string_modifier()
2003 if (string_modifier_check(ms, m) == -1) in parse_string_modifier()
2016 parse(struct magic_set *ms, struct magic_entry *me, const char *line, in parse() argument
2041 if (file_check_mem(ms, cont_level) == -1) in parse()
2047 file_magerror(ms, "No current entry for continuation"); in parse()
2051 file_magerror(ms, "Continuations present with 0 count"); in parse()
2057 file_magwarn(ms, "New continuation level %u is more " in parse()
2065 file_oomem(ms, sizeof(*nm) * cnt); in parse()
2079 file_oomem(ms, len); in parse()
2108 if (ms->flags & MAGIC_CHECK) in parse()
2109 file_magwarn(ms, "relative offset at level 0"); in parse()
2120 if (ms->flags & MAGIC_CHECK) in parse()
2121 file_magwarn(ms, "offset `%s' invalid", l); in parse()
2188 if (ms->flags & MAGIC_CHECK) in parse()
2189 file_magwarn(ms, in parse()
2212 if (ms->flags & MAGIC_CHECK) in parse()
2213 file_magwarn(ms, in parse()
2221 if (ms->flags & MAGIC_CHECK) in parse()
2222 file_magwarn(ms, in parse()
2231 if (check_cond(ms, m->cond, cont_level) == -1) in parse()
2287 if (ms->flags & MAGIC_CHECK) in parse()
2288 file_magwarn(ms, "type `%s' invalid", l); in parse()
2293 if (ms->flags & MAGIC_CHECK) in parse()
2294 file_magwarn(ms, "`name%s' entries can only be " in parse()
2306 else if (ms->flags & MAGIC_CHECK) in parse()
2307 file_magwarn(ms, "'~' invalid for string types"); in parse()
2317 if (ms->flags & MAGIC_CHECK) in parse()
2318 file_magwarn(ms, in parse()
2325 r = parse_indirect_modifier(ms, m, &l); in parse()
2327 r = parse_string_modifier(ms, m, &l); in parse()
2331 parse_op_modifier(ms, m, &l, op); in parse()
2346 if (ms->flags & MAGIC_CHECK) { in parse()
2347 file_magwarn(ms, "%c= not supported", in parse()
2381 if (m->reln != 'x' && getvalue(ms, m, &l, action)) in parse()
2406 if (ms->flags & MAGIC_CHECK) in parse()
2407 file_magwarn(ms, "description `%s' truncated", m->desc); in parse()
2414 if (ms->flags & MAGIC_CHECK) { in parse()
2415 if (check_format(ms, m) == -1) in parse()
2433 parse_strength(struct magic_set *ms, struct magic_entry *me, const char *line, in parse_strength() argument
2443 file_magwarn(ms, in parse_strength()
2449 file_magwarn(ms, "%s: Strength setting is not supported in " in parse_strength()
2451 file_printable(ms, sbuf, sizeof(sbuf), m->value.s, in parse_strength()
2466 file_magwarn(ms, "Unknown factor op `%c'", *l); in parse_strength()
2472 file_magwarn(ms, "Too large factor `%lu'", factor); in parse_strength()
2476 file_magwarn(ms, "Bad factor `%s'", l); in parse_strength()
2481 file_magwarn(ms, "Cannot have factor op `%c' and factor %u", in parse_strength()
2499 parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line, in parse_extra() argument
2510 file_magwarn(ms, "Current entry already has a %s type " in parse_extra()
2516 file_magwarn(ms, "Current entry does not yet have a " in parse_extra()
2529 if (ms->flags & MAGIC_CHECK) in parse_extra()
2530 file_magwarn(ms, "%s type `%s' truncated %" in parse_extra()
2534 file_magwarn(ms, "%s type `%s' has bad char '%c'", in parse_extra()
2543 file_magerror(ms, "Bad magic entry '%s'", line); in parse_extra()
2552 parse_apple(struct magic_set *ms, struct magic_entry *me, const char *line, in parse_apple() argument
2555 return parse_extra(ms, me, line, len, in parse_apple()
2564 parse_ext(struct magic_set *ms, struct magic_entry *me, const char *line, in parse_ext() argument
2567 return parse_extra(ms, me, line, len, in parse_ext()
2579 parse_mime(struct magic_set *ms, struct magic_entry *me, const char *line, in parse_mime() argument
2582 return parse_extra(ms, me, line, len, in parse_mime()
2782 check_format(struct magic_set *ms, struct magic *m) in check_format() argument
2798 file_magwarn(ms, "Internal error inconsistency between " in check_format()
2803 file_magwarn(ms, "No format string for `%s' with description " in check_format()
2814 file_magwarn(ms, "Printf format is %s for type " in check_format()
2822 file_magwarn(ms, in check_format()
2838 getvalue(struct magic_set *ms, struct magic *m, const char **p, int action) in getvalue() argument
2855 *p = getstr(ms, m, *p, action == FILE_COMPILE); in getvalue()
2857 if (ms->flags & MAGIC_CHECK) in getvalue()
2858 file_magwarn(ms, "cannot get string from `%s'", in getvalue()
2865 file_regcomp(ms, &rx, m->value.s, REG_EXTENDED); in getvalue()
2907 m->value.q = file_signextend(ms, m, ull); in getvalue()
2909 file_magwarn(ms, "Unparsable number `%s'", *p); in getvalue()
2917 file_magwarn(ms, in getvalue()
2948 file_magwarn(ms, "Overflow for numeric" in getvalue()
2969 getstr(struct magic_set *ms, struct magic *m, const char *s, int warn) in getstr() argument
2984 file_error(ms, 0, "string too long: `%s'", origs); in getstr()
3001 file_magwarn(ms, "incomplete escape"); in getstr()
3007 file_magwarn(ms, "escaped dot ('.') found, " in getstr()
3014 file_magwarn(ms, in getstr()
3028 file_magwarn(ms, "no " in getstr()
3033 file_magwarn(ms, in getstr()
3136 size_t l = file_pstring_length_size(ms, m); in getstr()
3251 apprentice_buf(struct magic_set *ms, struct magic *buf, size_t len) in apprentice_buf() argument
3256 file_oomem(ms, sizeof(*map)); in apprentice_buf()
3262 if (check_buffer(ms, map, "buffer") != 0) { in apprentice_buf()
3274 apprentice_map(struct magic_set *ms, const char *fn) in apprentice_map() argument
3284 file_oomem(ms, sizeof(*map)); in apprentice_map()
3289 dbname = mkdbname(ms, fn, 0); in apprentice_map()
3297 file_error(ms, errno, "cannot stat `%s'", dbname); in apprentice_map()
3301 file_error(ms, 0, "file `%s' is too %s", dbname, in apprentice_map()
3311 file_error(ms, errno, "cannot map `%s'", dbname); in apprentice_map()
3317 file_oomem(ms, map->len); in apprentice_map()
3321 file_badread(ms); in apprentice_map()
3328 if (check_buffer(ms, map, dbname) != 0) { in apprentice_map()
3333 file_error(ms, errno, "cannot mprotect `%s'", dbname); in apprentice_map()
3350 check_buffer(struct magic_set *ms, struct magic_map *map, const char *dbname) in check_buffer() argument
3360 file_error(ms, 0, "bad magic in `%s'", dbname); in check_buffer()
3371 file_error(ms, 0, "File %s supports only version %d magic " in check_buffer()
3378 file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not " in check_buffer()
3395 file_error(ms, 0, "Inconsistent entries in `%s' %u != %u", in check_buffer()
3409 apprentice_compile(struct magic_set *ms, struct magic_map *map, const char *fn) in apprentice_compile() argument
3423 dbname = mkdbname(ms, fn, 1); in apprentice_compile()
3430 file_error(ms, errno, "cannot open `%s'", dbname); in apprentice_compile()
3439 file_error(ms, errno, "error writing `%s'", dbname); in apprentice_compile()
3446 file_error(ms, errno, "error writing `%s'", dbname); in apprentice_compile()
3466 mkdbname(struct magic_set *ms, const char *fn, int strip) in mkdbname() argument
3490 if (ms->flags & MAGIC_MIME) { in mkdbname()
3495 ms->flags &= MAGIC_MIME_TYPE; in mkdbname()
3505 ms->flags &= MAGIC_MIME_TYPE; in mkdbname()
3634 file_pstring_length_size(struct magic_set *ms, const struct magic *m) in file_pstring_length_size() argument
3646 file_error(ms, 0, "corrupt magic file " in file_pstring_length_size()
3653 file_pstring_get_length(struct magic_set *ms, const struct magic *m, in file_pstring_get_length() argument
3689 file_error(ms, 0, "corrupt magic file " in file_pstring_get_length()
3696 size_t l = file_pstring_length_size(ms, m); in file_pstring_get_length()
3706 file_magicfind(struct magic_set *ms, const char *name, struct mlist *v) in file_magicfind() argument
3711 mlist = ms->mlist[1]; in file_magicfind()