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

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

?? cramfsck.c

?? 制作cramfs文件系統的工具
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * cramfsck - check a cramfs file system * * Copyright (C) 2000-2002 Transmeta Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * 1999/12/03: Linus Torvalds (cramfs tester and unarchive program) * 2000/06/03: Daniel Quinlan (CRC and length checking program) * 2000/06/04: Daniel Quinlan (merged programs, added options, support *                            for special files, preserve permissions and *                            ownership, cramfs superblock v2, bogus mode *                            test, pathname length test, etc.) * 2000/06/06: Daniel Quinlan (support for holes, pretty-printing, *                            symlink size test) * 2000/07/11: Daniel Quinlan (file length tests, start at offset 0 or 512, *                            fsck-compatible exit codes) * 2000/07/15: Daniel Quinlan (initial support for block devices) * 2002/01/10: Daniel Quinlan (additional checks, test more return codes, *                            use read if mmap fails, standardize messages) *//* compile-time options */#define INCLUDE_FS_TESTS	/* include cramfs checking and extraction */#define _GNU_SOURCE#include <sys/types.h>#include <stdio.h>#include <stdarg.h>#include <sys/stat.h>#include <unistd.h>#include <sys/mman.h>#include <fcntl.h>#include <dirent.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/sysmacros.h>#include <utime.h>#include <sys/ioctl.h>#define _LINUX_STRING_H_#include <linux/fs.h>#include <linux/cramfs_fs.h>#include <zlib.h>/* Exit codes used by fsck-type programs */#define FSCK_OK          0	/* No errors */#define FSCK_NONDESTRUCT 1	/* File system errors corrected */#define FSCK_REBOOT      2	/* System should be rebooted */#define FSCK_UNCORRECTED 4	/* File system errors left uncorrected */#define FSCK_ERROR       8	/* Operational error */#define FSCK_USAGE       16	/* Usage or syntax error */#define FSCK_LIBRARY     128	/* Shared library error */#define PAD_SIZE 512#define PAGE_CACHE_SIZE (4096)static const char *progname = "cramfsck";static int fd;			/* ROM image file descriptor */static char *filename;		/* ROM image filename */struct cramfs_super super;	/* just find the cramfs superblock once */static int opt_verbose = 0;	/* 1 = verbose (-v), 2+ = very verbose (-vv) */#ifdef INCLUDE_FS_TESTSstatic int opt_extract = 0;		/* extract cramfs (-x) */static char *extract_dir = "root";	/* extraction directory (-x) */static uid_t euid;			/* effective UID *//* (cramfs_super + start) <= start_dir < end_dir <= start_data <= end_data */static unsigned long start_dir = ~0UL;	/* start of first non-root inode */static unsigned long end_dir = 0;	/* end of the directory structure */static unsigned long start_data = ~0UL;	/* start of the data (256 MB = max) */static unsigned long end_data = 0;	/* end of the data *//* Guarantee access to at least 8kB at a time */#define ROMBUFFER_BITS	13#define ROMBUFFERSIZE	(1 << ROMBUFFER_BITS)#define ROMBUFFERMASK	(ROMBUFFERSIZE-1)static char read_buffer[ROMBUFFERSIZE * 2];static unsigned long read_buffer_block = ~0UL;/* Uncompressing data structures... */static char outbuffer[PAGE_CACHE_SIZE*2];static z_stream stream;/* Prototypes */static void expand_fs(char *, struct cramfs_inode *);#endif /* INCLUDE_FS_TESTS *//* Input status of 0 to print help and exit without an error. */static void usage(int status){	FILE *stream = status ? stderr : stdout;	fprintf(stream, "usage: %s [-hv] [-x dir] file\n"		" -h         print this help\n"		" -x dir     extract into dir\n"		" -v         be more verbose\n"		" file       file to test\n", progname);	exit(status);}static void die(int status, int syserr, const char *fmt, ...){	va_list arg_ptr;	int save = errno;	fflush(0);	va_start(arg_ptr, fmt);	fprintf(stderr, "%s: ", progname);	vfprintf(stderr, fmt, arg_ptr);	if (syserr) {		fprintf(stderr, ": %s", strerror(save));	}	fprintf(stderr, "\n");	va_end(arg_ptr);	exit(status);}static void test_super(int *start, size_t *length) {	struct stat st;	/* find the physical size of the file or block device */	if (stat(filename, &st) < 0) {		die(FSCK_ERROR, 1, "stat failed: %s", filename);	}	fd = open(filename, O_RDONLY);	if (fd < 0) {		die(FSCK_ERROR, 1, "open failed: %s", filename);	}	if (S_ISBLK(st.st_mode)) {		if (ioctl(fd, BLKGETSIZE, length) < 0) {			die(FSCK_ERROR, 1, "ioctl failed: unable to determine device size: %s", filename);		}		*length = *length * 512;	}	else if (S_ISREG(st.st_mode)) {		*length = st.st_size;	}	else {		die(FSCK_ERROR, 0, "not a block device or file: %s", filename);	}	if (*length < sizeof(struct cramfs_super)) {		die(FSCK_UNCORRECTED, 0, "file length too short");	}	/* find superblock */	if (read(fd, &super, sizeof(super)) != sizeof(super)) {		die(FSCK_ERROR, 1, "read failed: %s", filename);	}	if (super.magic == CRAMFS_MAGIC) {		*start = 0;	}	else if (*length >= (PAD_SIZE + sizeof(super))) {		lseek(fd, PAD_SIZE, SEEK_SET);		if (read(fd, &super, sizeof(super)) != sizeof(super)) {			die(FSCK_ERROR, 1, "read failed: %s", filename);		}		if (super.magic == CRAMFS_MAGIC) {			*start = PAD_SIZE;		}	}	/* superblock tests */	if (super.magic != CRAMFS_MAGIC) {		die(FSCK_UNCORRECTED, 0, "superblock magic not found");	}	if (super.flags & ~CRAMFS_SUPPORTED_FLAGS) {		die(FSCK_ERROR, 0, "unsupported filesystem features");	}	if (super.size < PAGE_CACHE_SIZE) {		die(FSCK_UNCORRECTED, 0, "superblock size (%d) too small", super.size);	}	if (super.flags & CRAMFS_FLAG_FSID_VERSION_2) {		if (super.fsid.files == 0) {			die(FSCK_UNCORRECTED, 0, "zero file count");		}		if (*length < super.size) {			die(FSCK_UNCORRECTED, 0, "file length too short");		}		else if (*length > super.size) {			fprintf(stderr, "warning: file extends past end of filesystem\n");		}	}	else {		fprintf(stderr, "warning: old cramfs format\n");	}}static void test_crc(int start){	void *buf;	u32 crc;	if (!(super.flags & CRAMFS_FLAG_FSID_VERSION_2)) {#ifdef INCLUDE_FS_TESTS		return;#else /* not INCLUDE_FS_TESTS */		die(FSCK_USAGE, 0, "unable to test CRC: old cramfs format");#endif /* not INCLUDE_FS_TESTS */	}	crc = crc32(0L, Z_NULL, 0);	buf = mmap(NULL, super.size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);	if (buf == MAP_FAILED) {		buf = mmap(NULL, super.size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);		if (buf != MAP_FAILED) {			lseek(fd, 0, SEEK_SET);			read(fd, buf, super.size);		}	}	if (buf != MAP_FAILED) {		((struct cramfs_super *) (buf+start))->fsid.crc = crc32(0L, Z_NULL, 0);		crc = crc32(crc, buf+start, super.size-start);		munmap(buf, super.size);	}	else {		int retval;		size_t length = 0;		buf = malloc(4096);		if (!buf) {			die(FSCK_ERROR, 1, "malloc failed");		}		lseek(fd, start, SEEK_SET);		for (;;) {			retval = read(fd, buf, 4096);			if (retval < 0) {				die(FSCK_ERROR, 1, "read failed: %s", filename);			}			else if (retval == 0) {				break;			}			if (length == 0) {				((struct cramfs_super *) buf)->fsid.crc = crc32(0L, Z_NULL, 0);			}			length += retval;			if (length > (super.size-start)) {				crc = crc32(crc, buf, retval - (length - (super.size-start)));				break;			}			crc = crc32(crc, buf, retval);		}		free(buf);	}	if (crc != super.fsid.crc) {		die(FSCK_UNCORRECTED, 0, "crc error");	}}#ifdef INCLUDE_FS_TESTSstatic void print_node(char type, struct cramfs_inode *i, char *name){	char info[10];	if (S_ISCHR(i->mode) || (S_ISBLK(i->mode))) {		/* major/minor numbers can be as high as 2^12 or 4096 */		snprintf(info, 10, "%4d,%4d", major(i->size), minor(i->size));	}	else {		/* size be as high as 2^24 or 16777216 */		snprintf(info, 10, "%9d", i->size);	}	printf("%c %04o %s %5d:%-3d %s\n",	       type, i->mode & ~S_IFMT, info, i->uid, i->gid, name);}/* * Create a fake "blocked" access */static void *romfs_read(unsigned long offset){	unsigned int block = offset >> ROMBUFFER_BITS;	if (block != read_buffer_block) {		read_buffer_block = block;		lseek(fd, block << ROMBUFFER_BITS, SEEK_SET);		read(fd, read_buffer, ROMBUFFERSIZE * 2);	}	return read_buffer + (offset & ROMBUFFERMASK);}static struct cramfs_inode *cramfs_iget(struct cramfs_inode * i){	struct cramfs_inode *inode = malloc(sizeof(struct cramfs_inode));	if (!inode) {		die(FSCK_ERROR, 1, "malloc failed");	}	*inode = *i;	return inode;}static struct cramfs_inode *iget(unsigned int ino){	return cramfs_iget(romfs_read(ino));}static void iput(struct cramfs_inode *inode){	free(inode);}/* * Return the offset of the root directory */static struct cramfs_inode *read_super(void){	unsigned long offset = super.root.offset << 2;	if (!S_ISDIR(super.root.mode))		die(FSCK_UNCORRECTED, 0, "root inode is not directory");	if (!(super.flags & CRAMFS_FLAG_SHIFTED_ROOT_OFFSET) &&	    ((offset != sizeof(struct cramfs_super)) &&	     (offset != PAD_SIZE + sizeof(struct cramfs_super))))	{		die(FSCK_UNCORRECTED, 0, "bad root offset (%lu)", offset);	}	return cramfs_iget(&super.root);}static int uncompress_block(void *src, int len){	int err;	stream.next_in = src;	stream.avail_in = len;	stream.next_out = (unsigned char *) outbuffer;	stream.avail_out = PAGE_CACHE_SIZE*2;	inflateReset(&stream);	if (len > PAGE_CACHE_SIZE*2) {		die(FSCK_UNCORRECTED, 0, "data block too large");	}	err = inflate(&stream, Z_FINISH);	if (err != Z_STREAM_END) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品久久一区| 欧美夫妻性生活| 国产精品原创巨作av| 蜜臂av日日欢夜夜爽一区| 日韩激情在线观看| 蜜桃视频在线一区| 久久精品99国产国产精| 久久不见久久见免费视频1| 久久99精品国产.久久久久| 国产一区二区在线观看免费| 国产一区视频网站| 成人亚洲一区二区一| 91免费观看视频在线| 欧美三级中文字幕| 欧美一区二区成人| 久久久久免费观看| 亚洲视频免费观看| 亚洲国产成人精品视频| 免费xxxx性欧美18vr| 国产精品一区二区无线| aa级大片欧美| 7777精品伊人久久久大香线蕉完整版| 日韩欧美区一区二| 国产精品视频在线看| 夜夜爽夜夜爽精品视频| 免费人成黄页网站在线一区二区| 老司机免费视频一区二区三区| 国产精品一级黄| 欧美影视一区在线| 久久久久九九视频| 亚洲一区在线电影| 国产伦精一区二区三区| 在线视频欧美精品| xvideos.蜜桃一区二区| 亚洲免费大片在线观看| 久久99精品久久久久久动态图| 99热国产精品| 欧美r级在线观看| 亚洲精品国产一区二区三区四区在线 | 精品一区二区三区的国产在线播放 | 亚洲国产精品久久久男人的天堂| 蜜桃一区二区三区在线观看| aaa欧美日韩| 久久综合色之久久综合| 亚洲一区二区在线观看视频| 国产91精品免费| 日韩欧美专区在线| 亚洲va天堂va国产va久| 粉嫩蜜臀av国产精品网站| 91麻豆精品国产91久久久久 | 亚洲主播在线观看| 97精品视频在线观看自产线路二| 精品国产凹凸成av人网站| 亚洲一区在线观看免费观看电影高清| 国产成人午夜精品影院观看视频 | 欧洲一区二区三区在线| 国产免费久久精品| 国内精品视频666| 亚洲精品欧美在线| 亚洲欧洲精品成人久久奇米网| 久久精品亚洲国产奇米99| 亚洲伦理在线精品| 大胆亚洲人体视频| 久久久久久黄色| 美女视频黄频大全不卡视频在线播放| 亚洲日本va午夜在线影院| 久久不见久久见中文字幕免费| 欧美人与禽zozo性伦| 在线中文字幕不卡| 国产在线一区二区综合免费视频| 亚洲欧洲另类国产综合| 亚洲美女在线国产| 欧美www视频| 91官网在线观看| 国产成人综合在线| 日日摸夜夜添夜夜添亚洲女人| 欧美国产一区二区在线观看| 欧美性受xxxx黑人xyx性爽| 国产精品亚洲专一区二区三区| 亚洲综合色自拍一区| 国产欧美一区二区精品久导航| 69堂精品视频| 在线观看日韩一区| 成人激情电影免费在线观看| 麻豆中文一区二区| 亚洲h在线观看| 亚洲色图都市小说| 国产精品网站在线播放| 日韩你懂的在线播放| 欧美亚洲图片小说| 91在线精品一区二区| 国产一区二区三区av电影| 日韩精品亚洲一区二区三区免费| 国产精品毛片a∨一区二区三区| 日韩欧美卡一卡二| 91精品国产综合久久蜜臀| 91丨porny丨蝌蚪视频| 国产精品 欧美精品| 久久se精品一区精品二区| 丝袜国产日韩另类美女| 亚洲一区二区三区在线播放| 亚洲色图20p| 日韩理论电影院| 最近日韩中文字幕| 国产精品麻豆视频| 国产精品网站一区| 欧美激情在线看| 国产精品三级av在线播放| 久久久久久久久99精品| 久久久精品2019中文字幕之3| 欧美videossexotv100| 日韩一区二区在线免费观看| 欧美一级久久久| 日韩色在线观看| 欧美哺乳videos| 国产日韩欧美综合在线| 国产欧美日韩三区| 1000精品久久久久久久久| 综合中文字幕亚洲| 亚洲裸体在线观看| 亚洲国产日韩在线一区模特| 亚洲第一电影网| 奇米色一区二区三区四区| 麻豆精品新av中文字幕| 国产中文字幕精品| 丰满岳乱妇一区二区三区| 91在线国产福利| 欧美日韩一区二区三区不卡 | 国产亚洲一区二区三区四区| 久久久影院官网| 国产精品国产三级国产aⅴ原创| 国产精品久久99| 亚洲国产欧美日韩另类综合 | 日韩电影在线一区二区三区| 欧美aⅴ一区二区三区视频| 韩国欧美国产1区| 成人的网站免费观看| 欧美综合亚洲图片综合区| 欧美日韩中文字幕一区二区| 91精品国产综合久久久久久| 337p日本欧洲亚洲大胆精品| 中文字幕中文字幕一区| 一二三四区精品视频| 麻豆高清免费国产一区| 成人免费视频视频| 欧美色欧美亚洲另类二区| 欧美成人激情免费网| 亚洲人被黑人高潮完整版| 日本人妖一区二区| 成人动漫在线一区| 欧美久久久久久久久| 国产精品亲子伦对白| 日韩中文字幕一区二区三区| 国产高清视频一区| 欧美福利视频一区| 亚洲欧洲www| 久久99久久99小草精品免视看| 91在线视频免费观看| 日韩久久免费av| 亚洲午夜视频在线观看| 福利电影一区二区| 日韩午夜电影av| 一区二区三区久久久| 懂色av一区二区三区免费观看| 91麻豆精品国产自产在线| 亚洲天堂中文字幕| 国产成人自拍高清视频在线免费播放| 在线观看成人免费视频| 奇米色一区二区三区四区| 91看片淫黄大片一级| 久久亚洲二区三区| 日本最新不卡在线| 日本道在线观看一区二区| 国产亚洲美州欧州综合国| 免费成人av资源网| 欧美精品国产精品| 亚洲主播在线播放| 一本色道久久综合亚洲aⅴ蜜桃| 久久久久久久久久久久久女国产乱 | 欧美日韩国产天堂| 一区二区三区在线视频观看| 国产a精品视频| 国产日韩av一区二区| 久久国内精品自在自线400部| 欧美日韩一区二区在线观看| 亚洲天天做日日做天天谢日日欢| 国产传媒一区在线| 欧美成人一区二区三区在线观看| 午夜精品久久久久久久蜜桃app| 91搞黄在线观看| 一区二区三区高清不卡| 99re66热这里只有精品3直播| 欧美国产精品劲爆| 东方aⅴ免费观看久久av| 久久精品无码一区二区三区| 韩国女主播成人在线观看| 26uuu国产在线精品一区二区| 精品一区二区日韩| 久久久噜噜噜久久人人看| 国产99精品在线观看|