亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? softmagic.c

?? sleuthit-2.09 一個(gè)磁盤的工具集
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice immediately at the beginning of the file, without modification, *    this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. *   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* * softmagic - interpret variable magic from MAGIC */#include "file.h"#include "magic.h"#include <string.h>#include <ctype.h>#include <stdlib.h>#include <time.h>#ifndef	lintFILE_RCSID("@(#)$File: softmagic.c,v 1.99 2007/05/08 14:44:18 christos Exp $")#endif	/* lint */private int match(struct magic_set *, struct magic *, uint32_t,    const unsigned char *, size_t);private int mget(struct magic_set *, const unsigned char *,    struct magic *, size_t, unsigned int);private int magiccheck(struct magic_set *, struct magic *);private int32_t mprint(struct magic_set *, struct magic *);private void mdebug(uint32_t, const char *, size_t);private int mcopy(struct magic_set *, union VALUETYPE *, int, int,    const unsigned char *, uint32_t, size_t, size_t);private int mconvert(struct magic_set *, struct magic *);private int print_sep(struct magic_set *, int);private void cvt_8(union VALUETYPE *, const struct magic *);private void cvt_16(union VALUETYPE *, const struct magic *);private void cvt_32(union VALUETYPE *, const struct magic *);private void cvt_64(union VALUETYPE *, const struct magic *);/* * softmagic - lookup one file in parsed, in-memory copy of database * Passed the name and FILE * of one file to be typed. *//*ARGSUSED1*/		/* nbytes passed for regularity, maybe need later */protected intfile_softmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes){	struct mlist *ml;	int rv;	for (ml = ms->mlist->next; ml != ms->mlist; ml = ml->next)		if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes)) != 0)			return rv;	return 0;}/* * Go through the whole list, stopping if you find a match.  Process all * the continuations of that match before returning. * * We support multi-level continuations: * *	At any time when processing a successful top-level match, there is a *	current continuation level; it represents the level of the last *	successfully matched continuation. * *	Continuations above that level are skipped as, if we see one, it *	means that the continuation that controls them - i.e, the *	lower-level continuation preceding them - failed to match. * *	Continuations below that level are processed as, if we see one, *	it means we've finished processing or skipping higher-level *	continuations under the control of a successful or unsuccessful *	lower-level continuation, and are now seeing the next lower-level *	continuation and should process it.  The current continuation *	level reverts to the level of the one we're seeing. * *	Continuations at the current level are processed as, if we see *	one, there's no lower-level continuation that may have failed. * *	If a continuation matches, we bump the current continuation level *	so that higher-level continuations are processed. */private intmatch(struct magic_set *ms, struct magic *magic, uint32_t nmagic,    const unsigned char *s, size_t nbytes){	uint32_t magindex = 0;	unsigned int cont_level = 0;	int need_separator = 0;	int returnval = 0; /* if a match is found it is set to 1*/	int firstline = 1; /* a flag to print X\n  X\n- X */	int printed_something = 0;	if (file_check_mem(ms, cont_level) == -1)		return -1;	for (magindex = 0; magindex < nmagic; magindex++) {		int flush;		ms->offset = magic[magindex].offset;		ms->line = magic[magindex].lineno;		/* if main entry matches, print it... */		flush = !mget(ms, s, &magic[magindex], nbytes, cont_level);		if (flush) {			if (magic[magindex].reln == '!')				flush = 0;		} else {				switch (magiccheck(ms, &magic[magindex])) {			case -1:				return -1;			case 0:				flush++;				break;			default:				break;			}		}		if (flush) {			/* 			 * main entry didn't match,			 * flush its continuations			 */			while (magindex < nmagic - 1 &&			    magic[magindex + 1].cont_level != 0)				magindex++;			continue;		}		/*		 * If we are going to print something, we'll need to print		 * a blank before we print something else.		 */		if (magic[magindex].desc[0]) {			need_separator = 1;			printed_something = 1;			if (print_sep(ms, firstline) == -1)				return -1;		}		if ((ms->c.li[cont_level].off = mprint(ms, &magic[magindex]))		    == -1)			return -1;		/* and any continuations that match */		if (file_check_mem(ms, ++cont_level) == -1)			return -1;		while (magic[magindex+1].cont_level != 0 &&		    ++magindex < nmagic) {			ms->line = magic[magindex].lineno; /* for messages */			if (cont_level < magic[magindex].cont_level)				continue;			if (cont_level > magic[magindex].cont_level) {				/*				 * We're at the end of the level				 * "cont_level" continuations.				 */				cont_level = magic[magindex].cont_level;			}			ms->offset = magic[magindex].offset;			if (magic[magindex].flag & OFFADD) {				ms->offset +=				    ms->c.li[cont_level - 1].off;			}#ifdef ENABLE_CONDITIONALS			if (magic[magindex].cond == COND_ELSE ||			    magic[magindex].cond == COND_ELIF) {				if (ms->c.li[cont_level].last_match == 1)					continue;			}#endif			flush = !mget(ms, s, &magic[magindex], nbytes,			    cont_level);			if (flush && magic[magindex].reln != '!')				continue;							switch (flush ? 1 : magiccheck(ms, &magic[magindex])) {			case -1:				return -1;			case 0:#ifdef ENABLE_CONDITIONALS				ms->c.li[cont_level].last_match = 0;#endif				break;			default:#ifdef ENABLE_CONDITIONALS				ms->c.li[cont_level].last_match = 1;#endif				if (magic[magindex].type != FILE_DEFAULT)					ms->c.li[cont_level].got_match = 1;				else if (ms->c.li[cont_level].got_match) {					ms->c.li[cont_level].got_match = 0;					break;				}				/*				 * If we are going to print something,				 * make sure that we have a separator first.				 */				if (magic[magindex].desc[0]) {					printed_something = 1;					if (print_sep(ms, firstline) == -1)						return -1;				}				/*				 * This continuation matched.  Print				 * its message, with a blank before it				 * if the previous item printed and				 * this item isn't empty.				 */				/* space if previous printed */				if (need_separator				    && (magic[magindex].nospflag == 0)				    && (magic[magindex].desc[0] != '\0')) {					if (file_printf(ms, " ") == -1)						return -1;					need_separator = 0;				}				if ((ms->c.li[cont_level].off = mprint(ms, &magic[magindex])) == -1)					return -1;				if (magic[magindex].desc[0])					need_separator = 1;				/*				 * If we see any continuations				 * at a higher level,				 * process them.				 */				if (file_check_mem(ms, ++cont_level) == -1)					return -1;				break;			}		}		firstline = 0;		if (printed_something)			returnval = 1;		if ((ms->flags & MAGIC_CONTINUE) == 0 && printed_something) {			return 1; /* don't keep searching */		}				}	return returnval;  /* This is hit if -k is set or there is no match */}private intcheck_fmt(struct magic_set *ms, struct magic *m){	regex_t rx;	int rc;	if (strchr(m->desc, '%') == NULL)		return 0;	rc = regcomp(&rx, "%[-0-9\\.]*s", REG_EXTENDED|REG_NOSUB);	if (rc) {		char errmsg[512];		(void)regerror(rc, &rx, errmsg, sizeof(errmsg));		file_magerror(ms, "regex error %d, (%s)", rc, errmsg);		return -1;	} else {		rc = regexec(&rx, m->desc, 0, 0, 0);		regfree(&rx);		return !rc;	}}#ifndef HAVE_STRNDUPchar * strndup(const char *, size_t);char *strndup(const char *str, size_t n){	size_t len;	char *copy;	len = strlen(str);	if (len > n)		len = n;	if (!(copy = malloc(len + 1)))		return (NULL);	(void) memcpy(copy, str, len + 1);	copy[len] = '\0';	return (copy);}#endif /* HAVE_STRNDUP */private int32_tmprint(struct magic_set *ms, struct magic *m){	uint64_t v;	int64_t t = 0; 	char buf[512];	union VALUETYPE *p = &ms->ms_value;  	switch (m->type) {  	case FILE_BYTE:		v = file_signextend(ms, m, (uint64_t)p->b);		switch (check_fmt(ms, m)) {		case -1:			return -1;		case 1:			if (snprintf(buf, sizeof(buf), "%c",			    (unsigned char)v) < 0)				return -1;			if (file_printf(ms, m->desc, buf) == -1)				return -1;			break;		default:			if (file_printf(ms, m->desc, (unsigned char) v) == -1)				return -1;			break;		}		t = ms->offset + sizeof(char);		break;  	case FILE_SHORT:  	case FILE_BESHORT:  	case FILE_LESHORT:		v = file_signextend(ms, m, (uint64_t)p->h);		switch (check_fmt(ms, m)) {		case -1:			return -1;		case 1:			if (snprintf(buf, sizeof(buf), "%hu",			    (unsigned short)v) < 0)				return -1;			if (file_printf(ms, m->desc, buf) == -1)				return -1;			break;		default:			if (file_printf(ms, m->desc, (unsigned short) v) == -1)				return -1;			break;		}		t = ms->offset + sizeof(short);		break;  	case FILE_LONG:  	case FILE_BELONG:  	case FILE_LELONG:  	case FILE_MELONG:		v = file_signextend(ms, m, (uint64_t)p->l);		switch (check_fmt(ms, m)) {		case -1:			return -1;		case 1:			if (snprintf(buf, sizeof(buf), "%u", (uint32_t)v) < 0)				return -1;			if (file_printf(ms, m->desc, buf) == -1)				return -1;			break;		default:			if (file_printf(ms, m->desc, (uint32_t) v) == -1)				return -1;			break;		}		t = ms->offset + sizeof(int32_t);  		break;  	case FILE_QUAD:  	case FILE_BEQUAD:  	case FILE_LEQUAD:		v = file_signextend(ms, m, p->q);		if (file_printf(ms, m->desc, (uint64_t) v) == -1)			return -1;		t = ms->offset + sizeof(int64_t);  		break;  	case FILE_STRING:  	case FILE_PSTRING:  	case FILE_BESTRING16:  	case FILE_LESTRING16:		if (m->reln == '=' || m->reln == '!') {			if (file_printf(ms, m->desc, m->value.s) == -1)				return -1;			t = ms->offset + m->vallen;		}		else {			if (*m->value.s == '\0') {				char *cp = strchr(p->s,'\n');				if (cp)					*cp = '\0';			}			if (file_printf(ms, m->desc, p->s) == -1)				return -1;			t = ms->offset + strlen(p->s);		}		break;	case FILE_DATE:	case FILE_BEDATE:	case FILE_LEDATE:	case FILE_MEDATE:		if (file_printf(ms, m->desc, file_fmttime(p->l, 1)) == -1)			return -1;		t = ms->offset + sizeof(time_t);		break;	case FILE_LDATE:	case FILE_BELDATE:	case FILE_LELDATE:	case FILE_MELDATE:		if (file_printf(ms, m->desc, file_fmttime(p->l, 0)) == -1)			return -1;		t = ms->offset + sizeof(time_t);		break;	case FILE_QDATE:	case FILE_BEQDATE:	case FILE_LEQDATE:		if (file_printf(ms, m->desc, file_fmttime((uint32_t)p->q, 1))		    == -1)			return -1;		t = ms->offset + sizeof(uint64_t);		break;	case FILE_QLDATE:	case FILE_BEQLDATE:	case FILE_LEQLDATE:		if (file_printf(ms, m->desc, file_fmttime((uint32_t)p->q, 0))		    == -1)			return -1;		t = ms->offset + sizeof(uint64_t);		break;	case FILE_REGEX: {		char *cp;		int rval;		cp = strndup((const char *)ms->search.s, ms->search.rm_len);		if (cp == NULL) {			file_oomem(ms, ms->search.rm_len);			return -1;		}		rval = file_printf(ms, m->desc, cp);		free(cp);		if (rval == -1)			return -1;		if ((m->str_flags & REGEX_OFFSET_START))			t = ms->search.offset;		else			t = ms->search.offset + ms->search.rm_len;		break;	}	case FILE_SEARCH:	  	if (file_printf(ms, m->desc, m->value.s) == -1)			return -1;		if ((m->str_flags & REGEX_OFFSET_START))			t = ms->search.offset;		else			t = ms->search.offset + m->vallen;		break;	case FILE_DEFAULT:	  	if (file_printf(ms, m->desc, m->value.s) == -1)			return -1;		t = ms->offset;		break;	default:		file_magerror(ms, "invalid m->type (%d) in mprint()", m->type);		return -1;	}	return(t);}#define DO_CVT(fld, cast) \	if (m->num_mask) \		switch (m->mask_op & FILE_OPS_MASK) { \		case FILE_OPAND: \			p->fld &= cast m->num_mask; \			break; \		case FILE_OPOR: \			p->fld |= cast m->num_mask; \			break; \		case FILE_OPXOR: \			p->fld ^= cast m->num_mask; \			break; \		case FILE_OPADD: \			p->fld += cast m->num_mask; \			break; \		case FILE_OPMINUS: \			p->fld -= cast m->num_mask; \			break; \		case FILE_OPMULTIPLY: \			p->fld *= cast m->num_mask; \			break; \		case FILE_OPDIVIDE: \			p->fld /= cast m->num_mask; \			break; \		case FILE_OPMODULO: \			p->fld %= cast m->num_mask; \			break; \		} \	if (m->mask_op & FILE_OPINVERSE) \		p->fld = ~p->fld \private voidcvt_8(union VALUETYPE *p, const struct magic *m){	DO_CVT(b, (uint8_t));}private voidcvt_16(union VALUETYPE *p, const struct magic *m){	DO_CVT(h, (uint16_t));}private voidcvt_32(union VALUETYPE *p, const struct magic *m){	DO_CVT(l, (uint32_t));}private voidcvt_64(union VALUETYPE *p, const struct magic *m){	DO_CVT(q, (uint64_t));}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
4438x成人网最大色成网站| 欧美色视频在线观看| 亚洲精品久久久蜜桃| 这里只有精品免费| 91在线播放网址| 久久99国产精品久久99果冻传媒| 国产精品国产三级国产aⅴ中文| 欧美精品 日韩| 99re热视频精品| 国产呦精品一区二区三区网站| 亚洲精品中文在线| 国产喷白浆一区二区三区| 欧美人与z0zoxxxx视频| 97精品电影院| 国产福利91精品一区二区三区| 亚洲国产欧美在线人成| 亚洲欧洲精品成人久久奇米网| 精品国产乱码久久久久久闺蜜| 欧美天堂亚洲电影院在线播放| 成人福利电影精品一区二区在线观看| 另类小说一区二区三区| 亚洲第一久久影院| 亚洲激情图片一区| 自拍视频在线观看一区二区| 欧美激情中文不卡| 久久久91精品国产一区二区精品 | 伊人夜夜躁av伊人久久| 国产日韩一级二级三级| 精品精品国产高清a毛片牛牛| 欧美日精品一区视频| 色哟哟一区二区在线观看| 成人永久看片免费视频天堂| 日本人妖一区二区| 亚洲美女区一区| 亚洲视频一区在线| 亚洲男同性恋视频| 最新久久zyz资源站| 亚洲欧洲精品一区二区精品久久久 | 国产成人精品午夜视频免费| 蜜桃视频一区二区| 青青草91视频| 日一区二区三区| 午夜欧美在线一二页| 亚洲成人av一区| 天堂久久久久va久久久久| 亚洲福利一二三区| 午夜成人免费电影| 视频一区二区三区在线| 日韩在线一二三区| 人人狠狠综合久久亚洲| 久久国产日韩欧美精品| 久久91精品久久久久久秒播| 激情五月婷婷综合| 国产91精品一区二区麻豆网站| 国产成人丝袜美腿| av毛片久久久久**hd| 欧美中文字幕一区| 欧美一区二区三区在线观看视频| 91精品国产91久久久久久最新毛片| 7799精品视频| 精品国产91乱码一区二区三区| 欧美mv日韩mv亚洲| 国产日韩一级二级三级| 国产精品的网站| 亚洲一区二区三区四区在线| 亚洲va欧美va国产va天堂影院| 日本欧美韩国一区三区| 精品制服美女久久| 成人精品gif动图一区| 在线视频你懂得一区二区三区| 欧美日韩一区二区在线视频| 日韩三级视频在线看| 久久久久久久综合日本| 亚洲日穴在线视频| 青娱乐精品在线视频| 国产精品综合久久| 日本精品一级二级| 欧美一区二区三区公司| 中文字幕第一页久久| 亚洲激情综合网| 久久国产成人午夜av影院| 成人激情文学综合网| 欧美午夜影院一区| 国产日产欧美一区二区视频| 亚洲美女屁股眼交| 国产在线播放一区二区三区 | 久久影院电视剧免费观看| 久久久久国产精品麻豆ai换脸| 国产精品福利电影一区二区三区四区| 亚洲国产cao| 国产成人精品一区二区三区网站观看 | 日本一区二区免费在线| 亚洲一区成人在线| 国产成人精品影院| 欧美男女性生活在线直播观看| 久久蜜桃一区二区| 天堂va蜜桃一区二区三区| 成人爱爱电影网址| 欧美成人一区二区| 亚洲影院理伦片| 岛国精品一区二区| 欧美成人video| 亚洲国产日韩精品| 99视频一区二区| 久久网这里都是精品| 丝袜亚洲另类欧美综合| 色婷婷综合久色| 国产拍欧美日韩视频二区| 日本vs亚洲vs韩国一区三区二区| 99久久久无码国产精品| 久久婷婷国产综合精品青草| 日韩精品成人一区二区三区| 97久久超碰国产精品电影| 久久久不卡网国产精品一区| 日本最新不卡在线| 欧美吻胸吃奶大尺度电影| 亚洲视频免费看| 高清成人免费视频| 久久精品综合网| 蜜桃视频在线观看一区二区| 欧美日韩色一区| 亚洲精品v日韩精品| 91麻豆免费视频| 中文字幕一区二区三区视频| 国产jizzjizz一区二区| 欧美不卡一区二区三区四区| 日本不卡123| 91精品国产综合久久久蜜臀粉嫩 | 国产成人免费在线| 精品处破学生在线二十三| 日本麻豆一区二区三区视频| 欧美日韩一区二区三区在线| 一区二区三区四区在线免费观看| 91网站在线观看视频| 国产精品视频九色porn| 成人高清av在线| 成人免费在线播放视频| 成人av免费网站| 天堂蜜桃91精品| 欧美日韩精品系列| 日日摸夜夜添夜夜添亚洲女人| 欧美日韩极品在线观看一区| 亚洲国产aⅴ天堂久久| 欧美日韩一级二级| 日韩精品国产精品| 日韩欧美成人午夜| 国产一区视频网站| 国产欧美一区二区精品性| 国产99精品国产| 中文字幕一区二区在线播放| 色菇凉天天综合网| 亚洲国产裸拍裸体视频在线观看乱了| 欧美在线免费视屏| 日韩高清一级片| 久久一日本道色综合| 丁香天五香天堂综合| 亚洲欧洲制服丝袜| 欧美日韩在线免费视频| 久久国产精品第一页| 国产色一区二区| 色婷婷久久99综合精品jk白丝 | 国内成人自拍视频| 国产精品乱码一区二区三区软件| 91视频在线观看免费| 亚洲v日本v欧美v久久精品| 欧美一级理论片| 国产精品一区免费在线观看| 成人免费在线视频观看| 欧美人与性动xxxx| 国产成人综合在线| 伊人一区二区三区| 亚洲精品在线三区| 97se亚洲国产综合自在线观| 午夜精品久久久久久久99水蜜桃| 欧美成人性战久久| 99re这里都是精品| 免费在线观看一区| 中文字幕一区二区三区不卡 | 亚洲高清一区二区三区| 精品欧美黑人一区二区三区| 成人黄色av网站在线| 午夜精品福利久久久| 国产亚洲成aⅴ人片在线观看| 色婷婷精品久久二区二区蜜臀av| 麻豆免费精品视频| 亚洲日本在线看| 日韩免费观看2025年上映的电影| www.激情成人| 久久国产精品72免费观看| 亚洲免费观看高清完整版在线观看熊 | 91亚洲精品一区二区乱码| 蜜桃视频一区二区三区| 亚洲欧美在线观看| 久久综合久久久久88| 欧美午夜影院一区| www.99精品| 欧美色视频在线| 成人精品小蝌蚪| 久久99精品国产麻豆不卡| 亚洲伊人色欲综合网|