亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一区二区三区国产精华| 日产欧产美韩系列久久99| 亚洲国产乱码最新视频 | 精品第一国产综合精品aⅴ| 国产日韩欧美在线一区| 亚洲成人在线网站| 成人免费观看视频| 日韩欧美的一区二区| 亚洲一区二区av电影| 成人少妇影院yyyy| 久久伊人蜜桃av一区二区| 亚洲不卡av一区二区三区| 99久久久国产精品免费蜜臀| 久久一二三国产| 日本美女一区二区三区视频| 在线观看视频一区二区欧美日韩| 精品日韩成人av| 日韩高清不卡一区二区三区| 91亚洲资源网| 中文字幕亚洲精品在线观看 | 欧美精品粉嫩高潮一区二区| 亚洲人成网站色在线观看| 国产iv一区二区三区| 久久免费午夜影院| 裸体健美xxxx欧美裸体表演| 欧美人妇做爰xxxⅹ性高电影 | 日韩av网站免费在线| 欧美午夜在线一二页| 国产中文一区二区三区| 欧美zozo另类异族| 久久99在线观看| 亚洲图片欧美激情| gogo大胆日本视频一区| 奇米777欧美一区二区| 欧美猛男男办公室激情| 国产一区二区三区视频在线播放| 亚洲国产日韩在线一区模特| 成人晚上爱看视频| 午夜精品久久一牛影视| 国产欧美日产一区| 欧美一区二区在线视频| 成年人网站91| 久久国产视频网| 亚洲午夜久久久久久久久电影院| 精品处破学生在线二十三| 欧美日本一区二区| 91麻豆免费看| 国产成人一区二区精品非洲| 日韩国产欧美在线播放| 亚洲视频一区二区在线| 久久久亚洲午夜电影| 日韩写真欧美这视频| 91麻豆精品在线观看| 国产91精品久久久久久久网曝门 | 亚洲免费观看高清完整版在线观看 | 日韩va欧美va亚洲va久久| 国产欧美一区二区精品婷婷| 欧美一级黄色大片| 欧美日韩精品是欧美日韩精品| 成人性生交大片免费看在线播放| 紧缚奴在线一区二区三区| 日产欧产美韩系列久久99| 亚洲一区二区av在线| 亚洲精品国产精品乱码不99 | 国产精品久久久久天堂| 久久伊99综合婷婷久久伊| 日韩欧美亚洲国产另类| 欧美一区二区视频观看视频| 欧美日韩国产精选| 精品视频一区二区不卡| 色94色欧美sute亚洲线路一久| 99久久伊人久久99| aaa亚洲精品| av影院午夜一区| 9久草视频在线视频精品| 成人午夜激情影院| aaa国产一区| 91啪亚洲精品| 色久综合一二码| 欧美日韩dvd在线观看| 欧美无砖专区一中文字| 欧美日韩一区中文字幕| 精品视频999| 日韩三级av在线播放| 精品福利一区二区三区免费视频| 精品粉嫩超白一线天av| 337p日本欧洲亚洲大胆精品| 精品国产网站在线观看| 国产亚洲婷婷免费| 中文字幕视频一区| 亚洲在线一区二区三区| 丝瓜av网站精品一区二区| 久久电影网站中文字幕| 国产一区不卡精品| 99re66热这里只有精品3直播| 色婷婷国产精品久久包臀| 欧美色国产精品| 日韩欧美国产高清| 欧美激情在线一区二区| 中文字幕亚洲在| 日韩中文字幕91| 国产在线麻豆精品观看| 99久久精品国产精品久久| 色婷婷综合久久久中文一区二区 | 91美女在线视频| 欧美日韩成人在线一区| 久久久久久久综合日本| 亚洲欧洲精品天堂一级| 天堂蜜桃91精品| 国产福利精品导航| 在线欧美日韩国产| 精品久久久久久久久久久久包黑料 | 日韩欧美亚洲另类制服综合在线| 日本一区二区综合亚洲| 亚洲一区av在线| 国产一区亚洲一区| 欧美专区日韩专区| 久久青草欧美一区二区三区| 亚洲品质自拍视频| 国产综合色精品一区二区三区| 色婷婷综合久久久| 欧美精品一区二区精品网| 亚洲精品亚洲人成人网在线播放| 免费精品视频最新在线| 91免费版pro下载短视频| 欧美一级夜夜爽| 亚洲欧美日韩电影| 国产黄人亚洲片| 欧美一区二区在线免费观看| 亚洲欧洲综合另类| 成人综合婷婷国产精品久久| 91高清视频在线| 国产精品视频一二三区| 青青草91视频| 欧美日韩综合色| 亚洲麻豆国产自偷在线| 国产在线精品视频| 7777精品伊人久久久大香线蕉的| 中文字幕日韩一区二区| 精品一区二区三区免费毛片爱| 91成人免费网站| 综合网在线视频| 国产成人一区二区精品非洲| 91精品国产综合久久香蕉的特点| 综合久久久久久| 成人av网站免费| 国产午夜精品理论片a级大结局| 日本不卡的三区四区五区| 欧美色综合网站| 亚洲资源中文字幕| 91久久人澡人人添人人爽欧美 | 欧美成人猛片aaaaaaa| 亚洲在线视频网站| 色88888久久久久久影院按摩| 亚洲国产精品国自产拍av| 国内精品久久久久影院色| 欧美一区三区四区| 日韩激情一区二区| 69久久99精品久久久久婷婷| 亚洲第一在线综合网站| 91福利精品视频| 亚洲最新在线观看| 在线观看日韩av先锋影音电影院| 亚洲码国产岛国毛片在线| 99久久99久久精品国产片果冻| 国产精品视频一二三| av中文字幕亚洲| 亚洲精品视频一区二区| 91精品1区2区| 午夜精品一区二区三区免费视频| 欧美日韩亚州综合| 三级在线观看一区二区| 欧美一区二区福利在线| 美女精品一区二区| 欧美精品一区二区三区蜜桃| 国产精品亚洲成人| 国产精品女同一区二区三区| 成人av片在线观看| 亚洲精选一二三| 制服视频三区第一页精品| 青青草精品视频| 久久久不卡网国产精品二区 | 久久精品国产77777蜜臀| 精品久久久久一区| 99在线热播精品免费| 亚洲自拍都市欧美小说| 日韩一区国产二区欧美三区| 久久精品72免费观看| 国产农村妇女毛片精品久久麻豆 | 国产精品88888| 亚洲日本在线a| 538在线一区二区精品国产| 精品一区二区免费在线观看| 欧美激情一区在线观看| 日本大香伊一区二区三区| 久久成人免费电影| 国产精品久久久久影院亚瑟| 欧美三级日韩三级国产三级| 激情伊人五月天久久综合| 国产精品成人免费|