Lines Matching defs:ms

67 file_clearbuf(struct magic_set *ms)
69 free(ms->o.buf);
70 ms->o.buf = NULL;
71 ms->o.blen = 0;
133 file_vprintf(struct magic_set *ms, const char *fmt, va_list ap)
139 if (ms->event_flags & EVENT_HAD_ERR)
143 file_clearbuf(ms);
144 file_error(ms, 0, "Bad magic format `%s' (%s)", fmt, tbuf);
149 if (len < 0 || (size_t)len > 1024 || len + ms->o.blen > 1024 * 1024) {
150 size_t blen = ms->o.blen;
152 file_clearbuf(ms);
153 file_error(ms, 0, "Output buffer space exceeded %d+%"
158 if (ms->o.buf != NULL) {
159 len = asprintf(&newstr, "%s%s", ms->o.buf, buf);
163 free(ms->o.buf);
166 ms->o.buf = buf;
167 ms->o.blen = len;
170 file_clearbuf(ms);
171 file_error(ms, errno, "vasprintf failed");
176 file_printf(struct magic_set *ms, const char *fmt, ...)
182 rv = file_vprintf(ms, fmt, ap);
193 file_error_core(struct magic_set *ms, int error, const char *f, va_list va,
197 if (ms->event_flags & EVENT_HAD_ERR)
200 file_clearbuf(ms);
201 (void)file_printf(ms, "line %" SIZE_T_FORMAT "u:", lineno);
203 if (ms->o.buf && *ms->o.buf)
204 (void)file_printf(ms, " ");
205 (void)file_vprintf(ms, f, va);
207 (void)file_printf(ms, " (%s)", strerror(error));
208 ms->event_flags |= EVENT_HAD_ERR;
209 ms->error = error;
214 file_error(struct magic_set *ms, int error, const char *f, ...)
218 file_error_core(ms, error, f, va, 0);
227 file_magerror(struct magic_set *ms, const char *f, ...)
231 file_error_core(ms, 0, f, va, ms->line);
236 file_oomem(struct magic_set *ms, size_t len)
238 file_error(ms, errno, "cannot allocate %" SIZE_T_FORMAT "u bytes",
243 file_badseek(struct magic_set *ms)
245 file_error(ms, errno, "error seeking");
249 file_badread(struct magic_set *ms)
251 file_error(ms, errno, "error reading");
258 file_separator(struct magic_set *ms)
260 return file_printf(ms, FILE_SEPARATOR);
264 trim_separator(struct magic_set *ms)
268 if (ms->o.buf == NULL)
271 l = strlen(ms->o.buf);
276 if (strcmp(ms->o.buf + l, FILE_SEPARATOR) != 0)
279 ms->o.buf[l] = '\0';
283 checkdone(struct magic_set *ms, int *rv)
285 if ((ms->flags & MAGIC_CONTINUE) == 0)
287 if (file_separator(ms) == -1)
293 file_default(struct magic_set *ms, size_t nb)
295 if (ms->flags & MAGIC_MIME) {
296 if ((ms->flags & MAGIC_MIME_TYPE) &&
297 file_printf(ms, "application/%s",
302 if (ms->flags & MAGIC_APPLE) {
303 if (file_printf(ms, "UNKNUNKN") == -1)
307 if (ms->flags & MAGIC_EXTENSION) {
308 if (file_printf(ms, "???") == -1)
323 file_buffer(struct magic_set *ms, int fd, struct stat *st,
336 ms->mode = b.st.st_mode;
346 if ((ms->flags & MAGIC_NO_CHECK_ENCODING) == 0) {
347 looks_text = file_encoding(ms, &b, NULL, 0,
352 if ((ms->flags & MAGIC_NO_CHECK_APPTYPE) == 0 && inname) {
353 m = file_os2_apptype(ms, inname, &b);
354 if ((ms->flags & MAGIC_DEBUG) != 0)
368 if ((ms->flags & MAGIC_NO_CHECK_COMPRESS) == 0) {
369 m = file_zmagic(ms, &b, inname);
370 if ((ms->flags & MAGIC_DEBUG) != 0)
378 if ((ms->flags & MAGIC_NO_CHECK_TAR) == 0) {
379 m = file_is_tar(ms, &b);
380 if ((ms->flags & MAGIC_DEBUG) != 0)
383 if (checkdone(ms, &rv))
389 if ((ms->flags & MAGIC_NO_CHECK_JSON) == 0) {
390 m = file_is_json(ms, &b);
391 if ((ms->flags & MAGIC_DEBUG) != 0)
394 if (checkdone(ms, &rv))
400 if ((ms->flags & MAGIC_NO_CHECK_CSV) == 0) {
401 m = file_is_csv(ms, &b, looks_text, code);
402 if ((ms->flags & MAGIC_DEBUG) != 0)
405 if (checkdone(ms, &rv))
411 if ((ms->flags & MAGIC_NO_CHECK_SIMH) == 0) {
412 m = file_is_simh(ms, &b);
413 if ((ms->flags & MAGIC_DEBUG) != 0)
416 if (checkdone(ms, &rv))
422 if ((ms->flags & MAGIC_NO_CHECK_CDF) == 0) {
423 m = file_trycdf(ms, &b);
424 if ((ms->flags & MAGIC_DEBUG) != 0)
427 if (checkdone(ms, &rv))
432 if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && nb > 5 && fd != -1) {
444 if ((pb = file_push_buffer(ms)) == NULL)
447 rv = file_tryelf(ms, &b);
448 rbuf = file_pop_buffer(ms, pb);
453 if ((ms->flags & MAGIC_DEBUG) != 0)
459 if ((ms->flags & MAGIC_NO_CHECK_SOFT) == 0) {
460 m = file_softmagic(ms, &b, NULL, NULL, BINTEST, looks_text);
461 if ((ms->flags & MAGIC_DEBUG) != 0)
464 if (file_printf(ms, "%s", rbuf) == -1)
468 if (checkdone(ms, &rv))
474 if ((ms->flags & MAGIC_NO_CHECK_TEXT) == 0) {
476 m = file_ascmagic(ms, &b, looks_text);
477 if ((ms->flags & MAGIC_DEBUG) != 0)
488 rv = file_default(ms, nb);
490 if (file_printf(ms, "%s", def) == -1)
494 trim_separator(ms);
495 if ((ms->flags & MAGIC_MIME_ENCODING) != 0) {
496 if (ms->flags & MAGIC_MIME_TYPE)
497 if (file_printf(ms, "; charset=") == -1)
499 if (file_printf(ms, "%s", code_mime) == -1)
515 file_reset(struct magic_set *ms, int checkloaded)
517 if (checkloaded && ms->mlist[0] == NULL) {
518 file_error(ms, 0, "no magic files loaded");
521 file_clearbuf(ms);
522 if (ms->o.pbuf) {
523 free(ms->o.pbuf);
524 ms->o.pbuf = NULL;
526 ms->event_flags &= ~EVENT_HAD_ERR;
527 ms->error = -1;
540 file_getbuffer(struct magic_set *ms)
545 if (ms->event_flags & EVENT_HAD_ERR)
548 if (ms->flags & MAGIC_RAW)
549 return ms->o.buf;
551 if (ms->o.buf == NULL)
555 len = strlen(ms->o.buf);
557 file_oomem(ms, len);
561 if ((pbuf = CAST(char *, realloc(ms->o.pbuf, psize))) == NULL) {
562 file_oomem(ms, psize);
565 ms->o.pbuf = pbuf;
576 np = ms->o.pbuf;
577 op = ms->o.buf;
602 return ms->o.pbuf;
606 for (np = ms->o.pbuf, op = ms->o.buf; *op;) {
614 return ms->o.pbuf;
618 file_check_mem(struct magic_set *ms, unsigned int level)
622 if (level >= ms->c.len) {
623 len = (ms->c.len = 20 + level) * sizeof(*ms->c.li);
624 ms->c.li = CAST(struct level_info *, (ms->c.li == NULL) ?
626 realloc(ms->c.li, len));
627 if (ms->c.li == NULL) {
628 file_oomem(ms, len);
632 ms->c.li[level].got_match = 0;
634 ms->c.li[level].last_match = 0;
635 ms->c.li[level].last_cond = COND_NONE;
641 file_printedlen(const struct magic_set *ms)
643 return ms->o.blen;
647 file_replace(struct magic_set *ms, const char *pat, const char *rep)
652 rc = file_regcomp(ms, &rx, pat, REG_EXTENDED);
656 while (file_regexec(ms, &rx, ms->o.buf, 1, &rm, 0) == 0) {
657 ms->o.buf[rm.rm_so] = '\0';
658 if (file_printf(ms, "%s%s", rep,
659 rm.rm_eo != 0 ? ms->o.buf + rm.rm_eo : "") == -1)
671 check_regex(struct magic_set *ms, const char *pat)
683 file_magwarn(ms,
686 file_printable(ms, sbuf, sizeof(sbuf), pat, len));
707 file_magwarn(ms,
709 c, file_printable(ms, sbuf, sizeof(sbuf), pat, len));
714 file_magwarn(ms, "bounds too large %ld in regex `%s'", l, pat);
719 file_regcomp(struct magic_set *ms file_locale_used, file_regex_t *rx,
722 if (check_regex(ms, pat) == -1)
726 locale_t old = uselocale(ms->c_lc_ctype);
741 if (rc > 0 && (ms->flags & MAGIC_CHECK)) {
745 file_magerror(ms, "regex error %d for `%s', (%s)", rc,
746 file_printable(ms, buf, sizeof(buf), pat, strlen(pat)),
754 file_regexec(struct magic_set *ms file_locale_used, file_regex_t *rx,
758 locale_t old = uselocale(ms->c_lc_ctype);
785 file_push_buffer(struct magic_set *ms)
789 if (ms->event_flags & EVENT_HAD_ERR)
795 pb->buf = ms->o.buf;
796 pb->blen = ms->o.blen;
797 pb->offset = ms->offset;
799 ms->o.buf = NULL;
800 ms->o.blen = 0;
801 ms->offset = 0;
807 file_pop_buffer(struct magic_set *ms, file_pushbuf_t *pb)
811 if (ms->event_flags & EVENT_HAD_ERR) {
817 rbuf = ms->o.buf;
819 ms->o.buf = pb->buf;
820 ms->o.blen = pb->blen;
821 ms->offset = pb->offset;
831 file_printable(struct magic_set *ms, char *buf, size_t bufsiz,
839 if ((ms->flags & MAGIC_RAW) != 0 || isprint(*s)) {