Lines Matching refs:mp
286 getdata(register Magic_t* mp, register long off, register int siz) in getdata() argument
292 if (off + siz <= mp->fbsz) in getdata()
293 return mp->fbuf + off; in getdata()
294 if (off < mp->xoff || off + siz > mp->xoff + mp->xbsz) in getdata()
296 if (off + siz > mp->fbmx) in getdata()
299 if (sfseek(mp->fp, n, SEEK_SET) != n) in getdata()
301 if ((mp->xbsz = sfread(mp->fp, mp->xbuf, sizeof(mp->xbuf) - 1)) < 0) in getdata()
303 mp->xoff = 0; in getdata()
304 mp->xbsz = 0; in getdata()
307 mp->xbuf[mp->xbsz] = 0; in getdata()
308 mp->xoff = n; in getdata()
309 if (off + siz > mp->xoff + mp->xbsz) in getdata()
312 return mp->xbuf + off - mp->xoff; in getdata()
323 register Magic_t* mp = (Magic_t*)handle; in indirect() local
331 n = *++s == '(' ? strexpr(s, e, indirect, mp) : strtol(s, e, 0); in indirect()
337 if (p = getdata(mp, n, 1)) in indirect()
345 if (p = getdata(mp, n, 2)) in indirect()
346 n = swapget(mp->swap, p, 2); in indirect()
353 if (p = getdata(mp, n, 8)) in indirect()
354 n = swapget(mp->swap, p, 8); in indirect()
361 if (p = getdata(mp, n, 4)) in indirect()
362 n = swapget(mp->swap, p, 4); in indirect()
370 else if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in indirect()
371 (*mp->disc->errorf)(mp, mp->disc, 2, "%s in indirect expression", *e); in indirect()
380 regmessage(Magic_t* mp, regex_t* re, int code) in regmessage() argument
384 if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in regmessage()
387 (*mp->disc->errorf)(mp, mp->disc, 3, "regex: %s", buf); in regmessage()
476 ckmagic(register Magic_t* mp, const char* file, char* buf, struct stat* st, unsigned long off) in ckmagic() argument
491 mp->swap = 0; in ckmagic()
492 b = mp->msg[0] = buf; in ckmagic()
493 mp->mime = mp->cap[0] = 0; in ckmagic()
494 mp->keep[0] = 0; in ckmagic()
495 for (ep = mp->magic; ep; ep = ep->next) in ckmagic()
504 mp->keep[0] = 0; in ckmagic()
505 b = mp->msg[0]; in ckmagic()
506 mp->mime = mp->cap[0]; in ckmagic()
509 mp->keep[level] = mp->keep[level - 1] != 0; in ckmagic()
510 mp->msg[level] = b; in ckmagic()
511 mp->cap[level] = mp->mime; in ckmagic()
516 if (mp->keep[level] && b > buf) in ckmagic()
521 mp->swap = 0; in ckmagic()
522 b = mp->msg[0] = buf; in ckmagic()
523 mp->mime = mp->cap[0] = 0; in ckmagic()
528 if (mp->keep[level] && call < (MAXNEST - 1)) in ckmagic()
530 mp->ret[++call] = ep; in ckmagic()
536 ep = mp->ret[call--]; in ckmagic()
541 if (mp->keep[level] > 1) in ckmagic()
545 if (!mp->keep[level]) in ckmagic()
547 b = mp->msg[level]; in ckmagic()
548 mp->mime = mp->cap[level]; in ckmagic()
561 num = strexpr(ep->expr, NiL, indirect, mp) + off; in ckmagic()
643 if (!(p = getdata(mp, num, 1))) in ckmagic()
649 if (!(p = getdata(mp, num, 2))) in ckmagic()
651 num = swapget(ep->swap ? (~ep->swap ^ mp->swap) : mp->swap, p, 2); in ckmagic()
657 if (!(p = getdata(mp, num, 4))) in ckmagic()
659 num = swapget(ep->swap ? (~ep->swap ^ mp->swap) : mp->swap, p, 4); in ckmagic()
663 if (!(p = getdata(mp, num, 8))) in ckmagic()
665 num = swapget(ep->swap ? (~ep->swap ^ mp->swap) : mp->swap, p, 8); in ckmagic()
669 if (!(p = getdata(mp, num, 0))) in ckmagic()
677 c = mp->fbsz; in ckmagic()
678 if (c >= sizeof(mp->nbuf)) in ckmagic()
679 c = sizeof(mp->nbuf) - 1; in ckmagic()
680 p = (char*)memcpy(mp->nbuf, p, c); in ckmagic()
682 ccmapstr(mp->x2n, p, c); in ckmagic()
686 regmessage(mp, ep->value.sub, c); in ckmagic()
693 … if (mp->keep[level]++ && b > buf && *(b - 1) != ' ' && *t && *t != ',' && *t != '.' && *t != '\b') in ckmagic()
697 mp->mime = ep->mime; in ckmagic()
701 if (!(p = getdata(mp, num, ep->mask))) in ckmagic()
705 if (!(p = getdata(mp, num, 0))) in ckmagic()
717 if (p == mp->nbuf || ep->mask >= sizeof(mp->nbuf)) in ckmagic()
719 p = (char*)memcpy(mp->nbuf, p, ep->mask); in ckmagic()
721 ccmapstr(mp->x2n, p, ep->mask); in ckmagic()
724 … if (mp->keep[level]++ && b > buf && *(b - 1) != ' ' && *q && *q != ',' && *q != '.' && *q != '\b') in ckmagic()
731 mp->mime = ep->mime; in ckmagic()
750 if ((num = swapget(mp->swap = 1, p, 2) & mask) == ep->value.num) in ckmagic()
752 if (!(mp->swap & (mp->swap + 1))) in ckmagic()
753 mp->swap = 7; in ckmagic()
760 if ((num = swapget(mp->swap = c, p, 4) & mask) == ep->value.num) in ckmagic()
762 if (!(mp->swap & (mp->swap + 1))) in ckmagic()
763 mp->swap = 7; in ckmagic()
770 if ((num = swapget(mp->swap = c, p, 8) & mask) == ep->value.num) in ckmagic()
796 if (num > 0 && mp->keep[level] && call < (MAXNEST - 1)) in ckmagic()
811 mp->ret[++call] = ep; in ckmagic()
818 c = mp->swap; in ckmagic()
819 t = ckmagic(mp, file, b + (b > buf), st, num); in ckmagic()
820 mp->swap = c; in ckmagic()
837 sfprintf(mp->tmp, "/reg/classes_root/%s", t); in ckmagic()
838 if (!(t = sfstruse(mp->tmp)) || !(rp = sfopen(NiL, t, "r"))) in ckmagic()
847 ep->mime = vmnewof(mp->vm, ep->mime, char, sfvalue(rp), 0); in ckmagic()
854 sfprintf(mp->tmp, "/reg/classes_root/%s", t); in ckmagic()
855 if ((e = sfstruse(mp->tmp)) && (gp = sfopen(NiL, e, "r"))) in ckmagic()
857 ep->desc = vmnewof(mp->vm, ep->desc, char, strlen(t), 1); in ckmagic()
875 ep->mime = vmnewof(mp->vm, ep->mime, char, strlen(t), strlen(e)); in ckmagic()
884 ep->desc = vmnewof(mp->vm, ep->desc, char, sfvalue(gp), 0); in ckmagic()
895 if (!mp->keep[level]) in ckmagic()
896 mp->keep[level] = 2; in ckmagic()
897 mp->mime = ep->mime; in ckmagic()
901 if (ep->cont == '#' && !mp->keep[level]) in ckmagic()
902 mp->keep[level] = 1; in ckmagic()
907 if (!(p = getdata(mp, num, 4))) in ckmagic()
915 if (!(p = getdata(mp, num, c))) in ckmagic()
917 if (mp->keep[level]++ && b > buf && *(b - 1) != ' ') in ckmagic()
928 if (mp->keep[level]++ && b > buf && *(b - 1) != ' ' && *q && *q != ',' && *q != '.' && *q != '\b') in ckmagic()
937 mp->mime = ep->mime; in ckmagic()
941 if (!mp->keep[level]) in ckmagic()
943 b = mp->msg[level]; in ckmagic()
944 mp->mime = mp->cap[level]; in ckmagic()
947 mp->keep[level - 1] = mp->keep[level]; in ckmagic()
951 mp->keep[0] = 0; in ckmagic()
957 mp->keep[level] = 0; in ckmagic()
960 if (mp->keep[level] && b > buf) in ckmagic()
973 ckenglish(register Magic_t* mp, int pun, int badpun) in ckenglish() argument
982 if (2 * mp->count[';'] > mp->count['E'] + mp->count['e']) in ckenglish()
984 if ((mp->count['>'] + mp->count['<'] + mp->count['/']) > mp->count['E'] + mp->count['e']) in ckenglish()
987 vowl += mp->count[toupper(*s)] + mp->count[*s]; in ckenglish()
989 freq += mp->count[toupper(*s)] + mp->count[*s]; in ckenglish()
991 rare += mp->count[toupper(*s)] + mp->count[*s]; in ckenglish()
992 return 5 * vowl >= mp->fbsz - mp->count[' '] && freq >= 10 * rare; in ckenglish()
1000 cklang(register Magic_t* mp, const char* file, char* buf, struct stat* st) in cklang() argument
1020 b = (unsigned char*)mp->fbuf; in cklang()
1021 e = b + mp->fbsz; in cklang()
1022 memzero(mp->count, sizeof(mp->count)); in cklang()
1023 memzero(mp->multi, sizeof(mp->multi)); in cklang()
1024 memzero(mp->identifier, sizeof(mp->identifier)); in cklang()
1032 flags |= mp->cctype[*b++]; in cklang()
1033 b = (unsigned char*)mp->fbuf; in cklang()
1053 ccmaps(mp->fbuf, mp->fbsz, q, CC_NATIVE); in cklang()
1071 sfsprintf(mp->mbuf, sizeof(mp->mbuf), "application/x-%s", *s ? s : "sh"); in cklang()
1072 mp->mime = mp->mbuf; in cklang()
1090 sfsprintf(mp->sbuf, sizeof(mp->sbuf), T("%s%s script"), s, t1); in cklang()
1091 s = mp->sbuf; in cklang()
1095 b = (unsigned char*)mp->fbuf; in cklang()
1105 mp->count[c]++; in cklang()
1108 mp->multi[q]++; in cklang()
1127 if (s > mp->fbuf) in cklang()
1132 mp->multi[':']++; in cklang()
1135 if (((char*)b - s) == 3 && (s == (mp->fbuf + 1) || *(s - 2) == '\n')) in cklang()
1136 mp->multi['.']++; in cklang()
1145 mp->multi['X']++; in cklang()
1148 if (!mp->idtab) in cklang()
1150 if (mp->idtab = dtnew(mp->vm, &mp->dtdisc, Dthash)) in cklang()
1152 dtinsert(mp->idtab, &dict[q]); in cklang()
1153 else if (mp->disc->errorf) in cklang()
1154 (*mp->disc->errorf)(mp, mp->disc, 3, "out of space"); in cklang()
1157 if (mp->idtab) in cklang()
1160 if (ip = (Info_t*)dtmatch(mp->idtab, s)) in cklang()
1161 mp->identifier[ip->value]++; in cklang()
1169 if (b == (unsigned char*)(mp->fbuf + 1) || *(b - 2) == '\n') in cklang()
1170 mp->multi['\t']++; in cklang()
1184 mp->multi['$']++; in cklang()
1191 mp->multi[c]++; in cklang()
1194 mp->multi[c]++; in cklang()
1197 if (*b == ':' && isspace(*(b + 1)) && b > (unsigned char*)(mp->fbuf + 1) && isspace(*(b - 2))) in cklang()
1198 mp->multi[':']++; in cklang()
1217 mp->count[*b++]++; in cklang()
1250 mp->mime = "application/sh"; in cklang()
1253 if (strmatch(mp->fbuf, "From * [0-9][0-9]:[0-9][0-9]:[0-9][0-9] *")) in cklang()
1256 mp->mime = "message/rfc822"; in cklang()
1263 mp->mime = "application/mk"; in cklang()
1266 …if (match(base, "*@(makefile|.mk)") || mp->multi['\t'] >= mp->count[':'] && (mp->multi['$'] > 0 ||… in cklang()
1270 mp->mime = "application/make"; in cklang()
1273 if (mp->multi['.'] >= 3) in cklang()
1276 mp->mime = "application/x-troff"; in cklang()
1279 if (mp->multi['X'] >= 3) in cklang()
1282 mp->mime = "application/x-tex"; in cklang()
1285 if (mp->fbsz < SF_BUFSIZE && in cklang()
1286 (mp->multi['('] == mp->multi[')'] && in cklang()
1287 mp->multi['{'] == mp->multi['}'] && in cklang()
1288 mp->multi['['] == mp->multi[']']) || in cklang()
1289 mp->fbsz >= SF_BUFSIZE && in cklang()
1290 (mp->multi['('] >= mp->multi[')'] && in cklang()
1291 mp->multi['{'] >= mp->multi['}'] && in cklang()
1292 mp->multi['['] >= mp->multi[']'])) in cklang()
1294 c = mp->identifier[ID_INCL1]; in cklang()
1295 …if (c >= 2 && mp->identifier[ID_INCL2] >= c && mp->identifier[ID_INCL3] >= c && mp->count['.'] >= … in cklang()
1296 mp->identifier[ID_C] >= 5 && mp->count[';'] >= 5 || in cklang()
1297 mp->count['='] >= 20 && mp->count[';'] >= 20) in cklang()
1307 mp->mime = "application/x-cc"; in cklang()
1312 mp->mime = "application/x-lex"; in cklang()
1316 if (mp->identifier[ID_YACC] < 5 || mp->count['%'] < 5) in cklang()
1318 mp->mime = "application/x-cc"; in cklang()
1325 mp->mime = "application/x-yacc"; in cklang()
1328 if (mp->identifier[ID_CPLUSPLUS] >= 3) in cklang()
1331 mp->mime = "application/x-c++"; in cklang()
1333 sfsprintf(mp->sbuf, sizeof(mp->sbuf), "%s%s%s", t1, t2, t3); in cklang()
1334 s = mp->sbuf; in cklang()
1338 if (mp->identifier[ID_MAM1] >= 2 && mp->identifier[ID_MAM3] >= 2 && in cklang()
1339 (mp->fbsz < SF_BUFSIZE && mp->identifier[ID_MAM1] == mp->identifier[ID_MAM2] || in cklang()
1340 mp->fbsz >= SF_BUFSIZE && mp->identifier[ID_MAM1] >= mp->identifier[ID_MAM2])) in cklang()
1344 mp->mime = "application/x-mam"; in cklang()
1347 if (mp->identifier[ID_FORTRAN] >= 8) in cklang()
1351 mp->mime = "application/x-fortran"; in cklang()
1354 …if (mp->identifier[ID_HTML] > 0 && mp->count['<'] >= 8 && (c = mp->count['<'] - mp->count['>']) >=… in cklang()
1358 mp->mime = "text/html"; in cklang()
1361 …if (mp->identifier[ID_COPYBOOK] > 0 && mp->identifier[ID_COBOL] == 0 && (c = mp->count['('] - mp->… in cklang()
1365 mp->mime = "application/x-cobol"; in cklang()
1368 …if (mp->identifier[ID_COBOL] > 0 && mp->identifier[ID_COPYBOOK] > 0 && (c = mp->count['('] - mp->c… in cklang()
1372 mp->mime = "application/x-cobol"; in cklang()
1375 if (mp->identifier[ID_PL1] > 0 && (c = mp->count['('] - mp->count[')']) >= -2 && c <= 2) in cklang()
1379 mp->mime = "application/x-pl1"; in cklang()
1382 …if (mp->count['{'] >= 6 && (c = mp->count['{'] - mp->count['}']) >= -2 && c <= 2 && mp->count['\\'… in cklang()
1386 mp->mime = "text/tex"; in cklang()
1389 if (mp->identifier[ID_ASM] >= 4) in cklang()
1393 mp->mime = "application/x-as"; in cklang()
1396 if (ckenglish(mp, pun, badpun)) in cklang()
1399 mp->mime = "text/plain"; in cklang()
1405 mp->mime = "x-system/core"; in cklang()
1410 b = (unsigned char*)mp->fbuf; in cklang()
1411 e = b + mp->fbsz; in cklang()
1453 if ((q = mp->fbsz / UCHAR_MAX) >= 2) in cklang()
1462 pun = mp->count[c] - q; in cklang()
1465 d /= mp->fbsz; in cklang()
1479 mp->mime = "application/octet-stream"; in cklang()
1482 mp->mime = "text/plain"; in cklang()
1490 …if (!flags && mp->count['\n'] >= mp->count['\r'] && mp->count['\n'] <= (mp->count['\r'] + 1) && mp… in cklang()
1493 mp->mime = "text/dos"; in cklang()
1504 mp->mime = "text/ebcdic"; in cklang()
1521 type(register Magic_t* mp, const char* file, struct stat* st, char* buf, int size) in type() argument
1526 mp->mime = 0; in type()
1531 mp->mime = "x-system/dir"; in type()
1536 mp->mime = "x-system/lnk"; in type()
1545 mp->mime = "x-system/blk"; in type()
1551 mp->mime = "x-system/chr"; in type()
1557 mp->mime = "x-system/fifo"; in type()
1563 mp->mime = "x-system/sock"; in type()
1568 if (!(mp->fbmx = st->st_size)) in type()
1570 else if (!mp->fp) in type()
1574 mp->fbsz = sfread(mp->fp, mp->fbuf, sizeof(mp->fbuf) - 1); in type()
1575 if (mp->fbsz < 0) in type()
1577 else if (mp->fbsz == 0) in type()
1581 mp->fbuf[mp->fbsz] = 0; in type()
1582 mp->xoff = 0; in type()
1583 mp->xbsz = 0; in type()
1584 if (!(s = ckmagic(mp, file, buf, st, 0))) in type()
1585 s = cklang(mp, file, buf, st); in type()
1588 if (!mp->mime) in type()
1589 mp->mime = "application/unknown"; in type()
1590 else if ((t = strchr(mp->mime, '%')) && *(t + 1) == 's' && !*(t + 2)) in type()
1597 b = mp->mime; in type()
1598 me = (m = mp->mime = mp->fbuf) + sizeof(mp->fbuf) - 1; in type()
1627 load(register Magic_t* mp, char* file, register Sfio_t* fp) in load() argument
1654 first = ep = vmnewof(mp->vm, 0, Entry_t, 1, 0); in load()
1673 else if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in load()
1674 (*mp->disc->errorf)(mp, mp->disc, 1, "{ ... } operator nesting too deep -- %d max", MAXNEST); in load()
1679 if (mp->disc->errorf) in load()
1680 (*mp->disc->errorf)(mp, mp->disc, 2, "`%c': invalid nesting", *p); in load()
1692 ep = ret->next = vmnewof(mp->vm, 0, Entry_t, 1, 0); in load()
1706 if (mp->disc->errorf) in load()
1707 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: invalid function name", n); in load()
1710 if (ret && mp->disc->errorf) in load()
1711 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: function has no return", ret->offset + 'a'); in load()
1720 if (*(p + 1) != ')' && mp->disc->errorf) in load()
1721 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: invalid function call argument list", n + 'a'); in load()
1730 ep = ep->next = vmnewof(mp->vm, 0, Entry_t, 1, 0); in load()
1733 else if (!(last->value.lab = fun[n]) && mp->disc->errorf) in load()
1734 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: function not defined", n + 'a'); in load()
1775 if ((mp->flags & MAGIC_VERBOSE) && !isalpha(*p) && mp->disc->errorf) in load()
1776 (*mp->disc->errorf)(mp, mp->disc, 1, "`%c': invalid line continuation operator", *p); in load()
1820 if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in load()
1821 (*mp->disc->errorf)(mp, mp->disc, 1, "not enough fields: `%s'", p); in load()
1830 ep->expr = vmstrdup(mp->vm, p); in load()
1832 ep->offset = (ip = (Info_t*)dtmatch(mp->infotab, p)) ? ip->value : 0; in load()
1866 if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in load()
1867 (*mp->disc->errorf)(mp, mp->disc, 1, "not enough fields: `%s'", p); in load()
2025 if (ep->value.sub = vmnewof(mp->vm, 0, regex_t, 1, 0)) in load()
2027 ep->value.sub->re_disc = &mp->redisc; in load()
2036 regmessage(mp, ep->value.sub, n); in load()
2039 else if (*p && mp->disc->errorf) in load()
2040 (*mp->disc->errorf)(mp, mp->disc, 1, "invalid characters after substitution: %s", p); in load()
2046 ep->value.str = vmnewof(mp->vm, 0, char, ep->mask + 1, 0); in load()
2054 ep->value.str = vmnewof(mp->vm, 0, char, ep->mask, 0); in load()
2076 if (mp->disc->errorf) in load()
2077 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: invalid function name", n); in load()
2081 if (mp->disc->errorf) in load()
2082 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: function not defined", n + 'a'); in load()
2086 ep->value.loop = vmnewof(mp->vm, 0, Loop_t, 1, 0); in load()
2096 ep->desc = vmnewof(mp->vm, 0, char, 32, 0); in load()
2097 ep->mime = vmnewof(mp->vm, 0, char, 32, 0); in load()
2102 if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in load()
2103 (*mp->disc->errorf)(mp, mp->disc, 1, "%-.*s: unknown function", p - t, t); in load()
2145 ep->desc = vmstrdup(mp->vm, p2); in load()
2150 ep->mime = vmstrdup(mp->vm, p); in load()
2161 ep = ep->next = vmnewof(mp->vm, 0, Entry_t, 1, 0); in load()
2166 if (mp->magiclast) in load()
2167 mp->magiclast->next = first; in load()
2169 mp->magic = first; in load()
2170 mp->magiclast = last; in load()
2172 vmfree(mp->vm, ep); in load()
2173 if ((mp->flags & MAGIC_VERBOSE) && mp->disc->errorf) in load()
2176 (*mp->disc->errorf)(mp, mp->disc, 1, "too many } operators"); in load()
2178 (*mp->disc->errorf)(mp, mp->disc, 1, "not enough } operators"); in load()
2180 (*mp->disc->errorf)(mp, mp->disc, 2, "%c: function has no return", ret->offset + 'a'); in load()
2192 magicload(register Magic_t* mp, const char* file, unsigned long flags) in magicload() argument
2202 mp->flags = mp->disc->flags | flags; in magicload()
2222 sfputr(mp->tmp, t, -1); in magicload()
2225 sfwrite(mp->tmp, s, e - s); in magicload()
2226 if (!(s = sfstruse(mp->tmp))) in magicload()
2235 if (!(t = pathpath(mp->fbuf, s, "", PATH_REGULAR|PATH_READ)) && !strchr(s, '/')) in magicload()
2237 strcpy(mp->fbuf, s); in magicload()
2238 sfprintf(mp->tmp, "%s/%s", MAGIC_DIR, mp->fbuf); in magicload()
2239 if (!(s = sfstruse(mp->tmp))) in magicload()
2241 if (!(t = pathpath(mp->fbuf, s, "", PATH_REGULAR|PATH_READ))) in magicload()
2249 if (mp->disc->errorf) in magicload()
2250 (*mp->disc->errorf)(mp, mp->disc, 3, "%s: cannot open magic file", s); in magicload()
2255 n = load(mp, s, fp); in magicload()
2266 if (mp->flags & MAGIC_VERBOSE) in magicload()
2268 if (mp->disc->errorf) in magicload()
2269 (*mp->disc->errorf)(mp, mp->disc, 2, "cannot find magic file"); in magicload()
2275 if (mp->disc->errorf) in magicload()
2276 (*mp->disc->errorf)(mp, mp->disc, 3, "out of space"); in magicload()
2287 register Magic_t* mp; in magicopen() local
2297 if (!(mp = vmnewof(vm, 0, Magic_t, 1, 0))) in magicopen()
2302 mp->id = lib; in magicopen()
2303 mp->disc = disc; in magicopen()
2304 mp->vm = vm; in magicopen()
2305 mp->flags = disc->flags; in magicopen()
2306 mp->redisc.re_version = REG_VERSION; in magicopen()
2307 mp->redisc.re_flags = REG_NOFREE; in magicopen()
2308 mp->redisc.re_errorf = (regerror_t)disc->errorf; in magicopen()
2309 mp->redisc.re_resizef = (regresize_t)vmgetmem; in magicopen()
2310 mp->redisc.re_resizehandle = (void*)mp->vm; in magicopen()
2311 mp->dtdisc.key = offsetof(Info_t, name); in magicopen()
2312 mp->dtdisc.link = offsetof(Info_t, link); in magicopen()
2313 if (!(mp->tmp = sfstropen()) || !(mp->infotab = dtnew(mp->vm, &mp->dtdisc, Dthash))) in magicopen()
2316 dtinsert(mp->infotab, &info[n]); in magicopen()
2319 mp->x2n = ccmap(CC_ALIEN, CC_NATIVE); in magicopen()
2329 mp->cctype[n] = f; in magicopen()
2331 return mp; in magicopen()
2333 magicclose(mp); in magicopen()
2342 magicclose(register Magic_t* mp) in magicclose() argument
2344 if (!mp) in magicclose()
2346 if (mp->tmp) in magicclose()
2347 sfstrclose(mp->tmp); in magicclose()
2348 if (mp->vm) in magicclose()
2349 vmclose(mp->vm); in magicclose()
2358 magictype(register Magic_t* mp, Sfio_t* fp, const char* file, register struct stat* st) in magictype() argument
2363 mp->flags = mp->disc->flags; in magictype()
2364 mp->mime = 0; in magictype()
2369 if (mp->fp = fp) in magictype()
2370 off = sfseek(mp->fp, (off_t)0, SEEK_CUR); in magictype()
2371 s = type(mp, file, st, mp->tbuf, sizeof(mp->tbuf)); in magictype()
2372 if (mp->fp) in magictype()
2373 sfseek(mp->fp, off, SEEK_SET); in magictype()
2374 if (!(mp->flags & MAGIC_MIME)) in magictype()
2377 sfprintf(mp->tmp, "%s ", T("short")); in magictype()
2378 sfprintf(mp->tmp, "%s", s); in magictype()
2379 if (!mp->fp && (st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH))) in magictype()
2380 sfprintf(mp->tmp, ", %s", S_ISDIR(st->st_mode) ? T("searchable") : T("executable")); in magictype()
2382 sfprintf(mp->tmp, ", setuid=%s", fmtuid(st->st_uid)); in magictype()
2384 sfprintf(mp->tmp, ", setgid=%s", fmtgid(st->st_gid)); in magictype()
2386 sfprintf(mp->tmp, ", sticky"); in magictype()
2387 if (!(s = sfstruse(mp->tmp))) in magictype()
2391 if (mp->flags & MAGIC_MIME) in magictype()
2392 s = mp->mime; in magictype()
2403 magiclist(register Magic_t* mp, register Sfio_t* sp) in magiclist() argument
2405 register Entry_t* ep = mp->magic; in magiclist()
2408 mp->flags = mp->disc->flags; in magiclist()