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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cramfsck.c

?? 制作cramfs文件系統的工具
?? C
?? 第 1 頁 / 共 2 頁
字號:
		die(FSCK_UNCORRECTED, 0, "decompression error %p(%d): %s",		    zError(err), src, len);	}	return stream.total_out;}static void do_uncompress(char *path, int fd, unsigned long offset, unsigned long size){	unsigned long curr = offset + 4 * ((size + PAGE_CACHE_SIZE - 1) / PAGE_CACHE_SIZE);	do {		unsigned long out = PAGE_CACHE_SIZE;		unsigned long next = *(u32 *) romfs_read(offset);		if (next > end_data) {			end_data = next;		}		offset += 4;		if (curr == next) {			if (opt_verbose > 1) {				printf("  hole at %ld (%d)\n", curr, PAGE_CACHE_SIZE);			}			if (size < PAGE_CACHE_SIZE)				out = size;			memset(outbuffer, 0x00, out);		}		else {			if (opt_verbose > 1) {				printf("  uncompressing block at %ld to %ld (%ld)\n", curr, next, next - curr);			}			out = uncompress_block(romfs_read(curr), next - curr);		}		if (size >= PAGE_CACHE_SIZE) {			if (out != PAGE_CACHE_SIZE) {				die(FSCK_UNCORRECTED, 0, "non-block (%ld) bytes", out);			}		} else {			if (out != size) {				die(FSCK_UNCORRECTED, 0, "non-size (%ld vs %ld) bytes", out, size);			}		}		size -= out;		if (opt_extract) {			if (write(fd, outbuffer, out) < 0) {				die(FSCK_ERROR, 1, "write failed: %s", path);			}		}		curr = next;	} while (size);}static void change_file_status(char *path, struct cramfs_inode *i){	struct utimbuf epoch = { 0, 0 };	if (euid == 0) {		if (lchown(path, i->uid, i->gid) < 0) {			die(FSCK_ERROR, 1, "lchown failed: %s", path);		}		if (S_ISLNK(i->mode))			return;		if ((S_ISUID | S_ISGID) & i->mode) {			if (chmod(path, i->mode) < 0) {				die(FSCK_ERROR, 1, "chown failed: %s", path);			}		}	}	if (S_ISLNK(i->mode))		return;	if (utime(path, &epoch) < 0) {		die(FSCK_ERROR, 1, "utime failed: %s", path);	}}static void do_directory(char *path, struct cramfs_inode *i){	int pathlen = strlen(path);	int count = i->size;	unsigned long offset = i->offset << 2;	char *newpath = malloc(pathlen + 256);	if (!newpath) {		die(FSCK_ERROR, 1, "malloc failed");	}	if (offset == 0 && count != 0) {		die(FSCK_UNCORRECTED, 0, "directory inode has zero offset and non-zero size: %s", path);	}	if (offset != 0 && offset < start_dir) {		start_dir = offset;	}	/* TODO: Do we need to check end_dir for empty case? */	memcpy(newpath, path, pathlen);	newpath[pathlen] = '/';	pathlen++;	if (opt_verbose) {		print_node('d', i, path);	}	if (opt_extract) {		if (mkdir(path, i->mode) < 0) {			die(FSCK_ERROR, 1, "mkdir failed: %s", path);		}		change_file_status(path, i);	}	while (count > 0) {		struct cramfs_inode *child = iget(offset);		int size;		int newlen = child->namelen << 2;		size = sizeof(struct cramfs_inode) + newlen;		count -= size;		offset += sizeof(struct cramfs_inode);		memcpy(newpath + pathlen, romfs_read(offset), newlen);		newpath[pathlen + newlen] = 0;		if (newlen == 0) {			die(FSCK_UNCORRECTED, 0, "filename length is zero");		}		if ((pathlen + newlen) - strlen(newpath) > 3) {			die(FSCK_UNCORRECTED, 0, "bad filename length");		}		expand_fs(newpath, child);		offset += newlen;		if (offset <= start_dir) {			die(FSCK_UNCORRECTED, 0, "bad inode offset");		}		if (offset > end_dir) {			end_dir = offset;		}		iput(child); /* free(child) */	}	free(newpath);}static void do_file(char *path, struct cramfs_inode *i){	unsigned long offset = i->offset << 2;	int fd = 0;	if (offset == 0 && i->size != 0) {		die(FSCK_UNCORRECTED, 0, "file inode has zero offset and non-zero size");	}	if (i->size == 0 && offset != 0) {		die(FSCK_UNCORRECTED, 0, "file inode has zero size and non-zero offset");	}	if (offset != 0 && offset < start_data) {		start_data = offset;	}	if (opt_verbose) {		print_node('f', i, path);	}	if (opt_extract) {		fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, i->mode);		if (fd < 0) {			die(FSCK_ERROR, 1, "open failed: %s", path);		}	}	if (i->size) {		do_uncompress(path, fd, offset, i->size);	}	if (opt_extract) {		close(fd);		change_file_status(path, i);	}}static void do_symlink(char *path, struct cramfs_inode *i){	unsigned long offset = i->offset << 2;	unsigned long curr = offset + 4;	unsigned long next = *(u32 *) romfs_read(offset);	unsigned long size;	if (offset == 0) {		die(FSCK_UNCORRECTED, 0, "symbolic link has zero offset");	}	if (i->size == 0) {		die(FSCK_UNCORRECTED, 0, "symbolic link has zero size");	}	if (offset < start_data) {		start_data = offset;	}	if (next > end_data) {		end_data = next;	}	size = uncompress_block(romfs_read(curr), next - curr);	if (size != i->size) {		die(FSCK_UNCORRECTED, 0, "size error in symlink: %s", path);	}	outbuffer[size] = 0;	if (opt_verbose) {		char *str;		asprintf(&str, "%s -> %s", path, outbuffer);		print_node('l', i, str);		if (opt_verbose > 1) {			printf("  uncompressing block at %ld to %ld (%ld)\n", curr, next, next - curr);		}		free(str);	}	if (opt_extract) {		if (symlink(outbuffer, path) < 0) {			die(FSCK_ERROR, 1, "symlink failed: %s", path);		}		change_file_status(path, i);	}}static void do_special_inode(char *path, struct cramfs_inode *i){	dev_t devtype = 0;	char type;	if (i->offset) {	/* no need to shift offset */		die(FSCK_UNCORRECTED, 0, "special file has non-zero offset: %s", path);	}	if (S_ISCHR(i->mode)) {		devtype = i->size;		type = 'c';	}	else if (S_ISBLK(i->mode)) {		devtype = i->size;		type = 'b';	}	else if (S_ISFIFO(i->mode)) {		if (i->size != 0) {			die(FSCK_UNCORRECTED, 0, "fifo has non-zero size: %s", path);		}		type = 'p';	}	else if (S_ISSOCK(i->mode)) {		if (i->size != 0) {			die(FSCK_UNCORRECTED, 0, "socket has non-zero size: %s", path);		}		type = 's';	}	else {		die(FSCK_UNCORRECTED, 0, "bogus mode: %s (%o)", path, i->mode);		return;		/* not reached */	}	if (opt_verbose) {		print_node(type, i, path);	}	if (opt_extract) {		if (mknod(path, i->mode, devtype) < 0) {			die(FSCK_ERROR, 1, "mknod failed: %s", path);		}		change_file_status(path, i);	}}static void expand_fs(char *path, struct cramfs_inode *inode){	if (S_ISDIR(inode->mode)) {		do_directory(path, inode);	}	else if (S_ISREG(inode->mode)) {		do_file(path, inode);	}	else if (S_ISLNK(inode->mode)) {		do_symlink(path, inode);	}	else {		do_special_inode(path, inode);	}}static void test_fs(int start){	struct cramfs_inode *root;	root = read_super();	umask(0);	euid = geteuid();	stream.next_in = NULL;	stream.avail_in = 0;	inflateInit(&stream);	expand_fs(extract_dir, root);	inflateEnd(&stream);	if (start_data != ~0UL) {		if (start_data < (sizeof(struct cramfs_super) + start)) {			die(FSCK_UNCORRECTED, 0, "directory data start (%ld) < sizeof(struct cramfs_super) + start (%ld)", start_data, sizeof(struct cramfs_super) + start);		}		if (end_dir != start_data) {			die(FSCK_UNCORRECTED, 0, "directory data end (%ld) != file data start (%ld)", end_dir, start_data);		}	}	if (super.flags & CRAMFS_FLAG_FSID_VERSION_2) {		if (end_data > super.size) {			die(FSCK_UNCORRECTED, 0, "invalid file data offset");		}	}	iput(root);		/* free(root) */}#endif /* INCLUDE_FS_TESTS */int main(int argc, char **argv){	int c;			/* for getopt */	int start = 0;	size_t length;	if (argc)		progname = argv[0];	/* command line options */	while ((c = getopt(argc, argv, "hx:v")) != EOF) {		switch (c) {		case 'h':			usage(FSCK_OK);		case 'x':#ifdef INCLUDE_FS_TESTS			opt_extract = 1;			extract_dir = optarg;			break;#else /* not INCLUDE_FS_TESTS */			die(FSCK_USAGE, 0, "compiled without -x support");#endif /* not INCLUDE_FS_TESTS */		case 'v':			opt_verbose++;			break;		}	}	if ((argc - optind) != 1)		usage(FSCK_USAGE);	filename = argv[optind];	test_super(&start, &length);	test_crc(start);#ifdef INCLUDE_FS_TESTS	test_fs(start);#endif /* INCLUDE_FS_TESTS */	if (opt_verbose) {		printf("%s: OK\n", filename);	}	exit(FSCK_OK);}/* * Local variables: * c-file-style: "linux" * End: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91老师片黄在线观看| 中文字幕一区二区三区蜜月 | 久久九九99视频| 亚洲精品综合在线| 韩国精品在线观看| 欧美唯美清纯偷拍| 欧美国产一区二区| 蜜臀av国产精品久久久久| 一本一本大道香蕉久在线精品| 日韩欧美视频一区| 亚洲一区在线播放| 一本大道久久a久久精二百| 久久久噜噜噜久久人人看| 日本成人在线视频网站| 欧美在线三级电影| 亚洲天堂精品在线观看| 国产高清久久久久| 精品久久久久香蕉网| 奇米一区二区三区| 欧美日韩免费观看一区二区三区| 日本一二三四高清不卡| 国产一区二区精品久久99| 日韩欧美亚洲另类制服综合在线| 亚洲高清不卡在线| 欧美日韩国产区一| 亚洲 欧美综合在线网络| 在线观看网站黄不卡| 亚洲精品日韩一| 色视频欧美一区二区三区| 国产精品久久二区二区| 粉嫩13p一区二区三区| 久久久一区二区三区| 激情偷乱视频一区二区三区| 欧美mv日韩mv国产网站| 精品在线一区二区三区| 欧美成人性福生活免费看| 久久电影网站中文字幕| 久久影院午夜论| 国产高清一区日本| 国产精品麻豆一区二区| 99久久综合精品| 亚洲色欲色欲www| 在线视频一区二区三| 视频一区二区三区中文字幕| 欧美一区二区在线播放| 另类小说图片综合网| 久久品道一品道久久精品| 国产一区二区三区视频在线播放| 久久久久9999亚洲精品| 成人免费看的视频| 亚洲伊人色欲综合网| 欧美精品久久一区| 久久国产夜色精品鲁鲁99| 国产免费观看久久| 91免费小视频| 日本一不卡视频| 26uuu亚洲| www.成人网.com| 婷婷开心激情综合| 精品日韩成人av| 91蝌蚪porny成人天涯| 日韩精品高清不卡| 国产欧美一区在线| 欧美老肥妇做.爰bbww| 激情久久五月天| 亚洲青青青在线视频| 欧美日韩日日摸| 国产成人丝袜美腿| 亚洲成av人片在线| 日本一区二区三区四区| 欧美午夜电影网| 国产精品一卡二卡| 亚洲午夜影视影院在线观看| 精品成人一区二区三区四区| 91麻豆国产在线观看| 奇米888四色在线精品| 最新国产成人在线观看| 日韩女优电影在线观看| 色综合久久综合| 国产激情一区二区三区| 亚洲一区二区三区四区在线观看| 欧美成人vps| 欧美日韩色综合| 99视频精品在线| 国产一区二区久久| 日韩高清不卡一区二区三区| 亚洲视频一区二区在线观看| 久久中文字幕电影| 欧美一区二区在线不卡| 欧洲一区二区av| 盗摄精品av一区二区三区| 丝瓜av网站精品一区二区| 一色桃子久久精品亚洲| 精品国产乱码久久久久久浪潮| 欧美熟乱第一页| 97久久精品人人做人人爽50路| 国产在线国偷精品免费看| 亚洲电影一级黄| 亚洲欧美一区二区不卡| 亚洲国产精品黑人久久久| 亚洲精品在线一区二区| 日韩一级黄色大片| 欧美性xxxxxx少妇| 欧美主播一区二区三区| 99re亚洲国产精品| hitomi一区二区三区精品| 国产成人午夜高潮毛片| 国产另类ts人妖一区二区| 精品综合久久久久久8888| 美女性感视频久久| 日韩精品一二三四| 三级一区在线视频先锋| 亚洲电影一区二区三区| 亚洲午夜在线视频| 午夜私人影院久久久久| 亚洲一级二级三级| 亚洲成人tv网| 亚洲成人午夜影院| 日韩成人免费看| 免费在线看成人av| 免费看日韩精品| 亚洲精品中文在线| 国产不卡一区视频| 亚洲国产视频在线| 亚洲444eee在线观看| 一区二区三区日韩精品| 亚洲综合激情网| 亚洲成a人v欧美综合天堂下载 | 91福利在线导航| 91久久一区二区| 欧美日韩精品二区第二页| 欧美一区二区视频免费观看| 欧美大片在线观看一区二区| 久久先锋影音av鲁色资源网| 国产精品麻豆视频| 一区二区三区毛片| 日韩av在线播放中文字幕| 久久成人免费网| eeuss鲁片一区二区三区| 日本道色综合久久| 日韩免费在线观看| 中文字幕日韩一区| 亚洲成av人片在线| 欧美日韩一区久久| 欧美一级片免费看| 欧美mv日韩mv国产| 91视频在线观看免费| 国产aⅴ综合色| 91影院在线观看| 777午夜精品免费视频| 精品国产一区久久| 亚洲图片另类小说| 日本免费新一区视频| 成人综合日日夜夜| 欧美日韩一区三区四区| 欧美极品aⅴ影院| 日韩高清不卡一区二区三区| 国产成人小视频| 91精品国产91热久久久做人人| 久久久久亚洲蜜桃| 婷婷丁香久久五月婷婷| 国产一区二区三区精品欧美日韩一区二区三区| 成人激情免费视频| 日韩一级黄色片| 亚洲自拍都市欧美小说| 国产一区二区三区电影在线观看 | 国产在线播放一区| 日本高清不卡在线观看| 亚洲欧美日韩国产综合在线| 日日摸夜夜添夜夜添精品视频| 国产剧情一区二区三区| 在线观看国产日韩| 色av一区二区| 欧美videofree性高清杂交| 亚洲精品乱码久久久久久久久| 老司机精品视频导航| 欧美视频一区二区三区在线观看| 久久蜜桃香蕉精品一区二区三区| 亚洲国产精品一区二区www在线| 成人午夜视频免费看| 欧美tickling挠脚心丨vk| 婷婷夜色潮精品综合在线| 色综合激情五月| 亚洲欧洲av色图| 国产99久久久国产精品潘金| 精品少妇一区二区三区在线播放 | 国产日韩欧美不卡在线| 免费成人深夜小野草| 欧美精品在欧美一区二区少妇 | 91精品啪在线观看国产60岁| 亚洲精品免费一二三区| 国产精品狼人久久影院观看方式| 精品一区二区三区免费| 欧美日本不卡视频| 亚洲成av人综合在线观看| 欧美丝袜自拍制服另类| 亚洲成人精品影院| 欧美视频日韩视频| 五月天丁香久久| 欧美日韩免费观看一区二区三区|