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

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

?? cramfs.c

?? u-boot-1.1.6 for mini2440開發(fā)板。 支持網(wǎng)絡(luò)下載
?? C
字號:
/* * cramfs.c * * Copyright (C) 1999 Linus Torvalds * * Copyright (C) 2000-2002 Transmeta Corporation * * Copyright (C) 2003 Kai-Uwe Bloem, * Auerswald GmbH & Co KG, <linux-development@auerswald.de> * - adapted from the www.tuxbox.org u-boot tree, added "ls" command * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License (Version 2) as * published by the Free Software Foundation. * * Compressed ROM filesystem for Linux. * * TODO: * add support for resolving symbolic links *//* * These are the VFS interfaces to the compressed ROM filesystem. * The actual compression is based on zlib, see the other files. */#include <common.h>#include <malloc.h>#if (CONFIG_COMMANDS & CFG_CMD_JFFS2)#include <asm/byteorder.h>#include <linux/stat.h>#include <jffs2/jffs2.h>#include <jffs2/load_kernel.h>#include <cramfs/cramfs_fs.h>/* These two macros may change in future, to provide better st_ino   semantics. */#define CRAMINO(x)	(CRAMFS_GET_OFFSET(x) ? CRAMFS_GET_OFFSET(x)<<2 : 1)#define OFFSET(x)	((x)->i_ino)struct cramfs_super super;/* CPU address space offset calculation macro, struct part_info offset is * device address space offset, so we need to shift it by a device start address. */extern flash_info_t flash_info[];#define PART_OFFSET(x)	(x->offset + flash_info[x->dev->id->num].start[0])static int cramfs_read_super (struct part_info *info){	unsigned long root_offset;	/* Read the first block and get the superblock from it */	memcpy (&super, (void *) PART_OFFSET(info), sizeof (super));	/* Do sanity checks on the superblock */	if (super.magic != CRAMFS_32 (CRAMFS_MAGIC)) {		/* check at 512 byte offset */		memcpy (&super, (void *) PART_OFFSET(info) + 512, sizeof (super));		if (super.magic != CRAMFS_32 (CRAMFS_MAGIC)) {			printf ("cramfs: wrong magic\n");			return -1;		}	}	/* flags is reused several times, so swab it once */	super.flags = CRAMFS_32 (super.flags);	super.size = CRAMFS_32 (super.size);	/* get feature flags first */	if (super.flags & ~CRAMFS_SUPPORTED_FLAGS) {		printf ("cramfs: unsupported filesystem features\n");		return -1;	}	/* Check that the root inode is in a sane state */	if (!S_ISDIR (CRAMFS_16 (super.root.mode))) {		printf ("cramfs: root is not a directory\n");		return -1;	}	root_offset = CRAMFS_GET_OFFSET (&(super.root)) << 2;	if (root_offset == 0) {		printf ("cramfs: empty filesystem");	} else if (!(super.flags & CRAMFS_FLAG_SHIFTED_ROOT_OFFSET) &&		   ((root_offset != sizeof (struct cramfs_super)) &&		    (root_offset != 512 + sizeof (struct cramfs_super)))) {		printf ("cramfs: bad root offset %lu\n", root_offset);		return -1;	}	return 0;}static unsigned long cramfs_resolve (unsigned long begin, unsigned long offset,				     unsigned long size, int raw,				     char *filename){	unsigned long inodeoffset = 0, nextoffset;	while (inodeoffset < size) {		struct cramfs_inode *inode;		char *name;		int namelen;		inode = (struct cramfs_inode *) (begin + offset +						 inodeoffset);		/*		 * Namelengths on disk are shifted by two		 * and the name padded out to 4-byte boundaries		 * with zeroes.		 */		namelen = CRAMFS_GET_NAMELEN (inode) << 2;		name = (char *) inode + sizeof (struct cramfs_inode);		nextoffset =			inodeoffset + sizeof (struct cramfs_inode) + namelen;		for (;;) {			if (!namelen)				return -1;			if (name[namelen - 1])				break;			namelen--;		}		if (!strncmp (filename, name, namelen)) {			char *p = strtok (NULL, "/");			if (raw && (p == NULL || *p == '\0'))				return offset + inodeoffset;			if (S_ISDIR (CRAMFS_16 (inode->mode))) {				return cramfs_resolve (begin,						       CRAMFS_GET_OFFSET						       (inode) << 2,						       CRAMFS_24 (inode->								  size), raw,						       p);			} else if (S_ISREG (CRAMFS_16 (inode->mode))) {				return offset + inodeoffset;			} else {				printf ("%*.*s: unsupported file type (%x)\n",					namelen, namelen, name,					CRAMFS_16 (inode->mode));				return 0;			}		}		inodeoffset = nextoffset;	}	printf ("can't find corresponding entry\n");	return 0;}static int cramfs_uncompress (unsigned long begin, unsigned long offset,			      unsigned long loadoffset){	struct cramfs_inode *inode = (struct cramfs_inode *) (begin + offset);	unsigned long *block_ptrs = (unsigned long *)		(begin + (CRAMFS_GET_OFFSET (inode) << 2));	unsigned long curr_block = (CRAMFS_GET_OFFSET (inode) +				    (((CRAMFS_24 (inode->size)) +				      4095) >> 12)) << 2;	int size, total_size = 0;	int i;	cramfs_uncompress_init ();	for (i = 0; i < ((CRAMFS_24 (inode->size) + 4095) >> 12); i++) {		size = cramfs_uncompress_block ((void *) loadoffset,						(void *) (begin + curr_block),						(CRAMFS_32 (block_ptrs[i]) -						 curr_block));		if (size < 0)			return size;		loadoffset += size;		total_size += size;		curr_block = CRAMFS_32 (block_ptrs[i]);	}	cramfs_uncompress_exit ();	return total_size;}int cramfs_load (char *loadoffset, struct part_info *info, char *filename){	unsigned long offset;	if (cramfs_read_super (info))		return -1;	offset = cramfs_resolve (PART_OFFSET(info),				 CRAMFS_GET_OFFSET (&(super.root)) << 2,				 CRAMFS_24 (super.root.size), 0,				 strtok (filename, "/"));	if (offset <= 0)		return offset;	return cramfs_uncompress (PART_OFFSET(info), offset,				  (unsigned long) loadoffset);}static int cramfs_list_inode (struct part_info *info, unsigned long offset){	struct cramfs_inode *inode = (struct cramfs_inode *)		(PART_OFFSET(info) + offset);	char *name, str[20];	int namelen, nextoff;	/*	 * Namelengths on disk are shifted by two	 * and the name padded out to 4-byte boundaries	 * with zeroes.	 */	namelen = CRAMFS_GET_NAMELEN (inode) << 2;	name = (char *) inode + sizeof (struct cramfs_inode);	nextoff = namelen;	for (;;) {		if (!namelen)			return namelen;		if (name[namelen - 1])			break;		namelen--;	}	printf (" %s %8d %*.*s", mkmodestr (CRAMFS_16 (inode->mode), str),		CRAMFS_24 (inode->size), namelen, namelen, name);	if ((CRAMFS_16 (inode->mode) & S_IFMT) == S_IFLNK) {		/* symbolic link.		 * Unpack the link target, trusting in the inode's size field.		 */		unsigned long size = CRAMFS_24 (inode->size);		char *link = malloc (size);		if (link != NULL && cramfs_uncompress (PART_OFFSET(info), offset,						       (unsigned long) link)		    == size)			printf (" -> %*.*s\n", (int) size, (int) size, link);		else			printf (" [Error reading link]\n");		if (link)			free (link);	} else		printf ("\n");	return nextoff;}int cramfs_ls (struct part_info *info, char *filename){	struct cramfs_inode *inode;	unsigned long inodeoffset = 0, nextoffset;	unsigned long offset, size;	if (cramfs_read_super (info))		return -1;	if (strlen (filename) == 0 || !strcmp (filename, "/")) {		/* Root directory. Use root inode in super block */		offset = CRAMFS_GET_OFFSET (&(super.root)) << 2;		size = CRAMFS_24 (super.root.size);	} else {		/* Resolve the path */		offset = cramfs_resolve (PART_OFFSET(info),					 CRAMFS_GET_OFFSET (&(super.root)) <<					 2, CRAMFS_24 (super.root.size), 1,					 strtok (filename, "/"));		if (offset <= 0)			return offset;		/* Resolving was successful. Examine the inode */		inode = (struct cramfs_inode *) (PART_OFFSET(info) + offset);		if (!S_ISDIR (CRAMFS_16 (inode->mode))) {			/* It's not a directory - list it, and that's that */			return (cramfs_list_inode (info, offset) > 0);		}		/* It's a directory. List files within */		offset = CRAMFS_GET_OFFSET (inode) << 2;		size = CRAMFS_24 (inode->size);	}	/* List the given directory */	while (inodeoffset < size) {		inode = (struct cramfs_inode *) (PART_OFFSET(info) + offset +						 inodeoffset);		nextoffset = cramfs_list_inode (info, offset + inodeoffset);		if (nextoffset == 0)			break;		inodeoffset += sizeof (struct cramfs_inode) + nextoffset;	}	return 1;}int cramfs_info (struct part_info *info){	if (cramfs_read_super (info))		return 0;	printf ("size: 0x%x (%u)\n", super.size, super.size);	if (super.flags != 0) {		printf ("flags:\n");		if (super.flags & CRAMFS_FLAG_FSID_VERSION_2)			printf ("\tFSID version 2\n");		if (super.flags & CRAMFS_FLAG_SORTED_DIRS)			printf ("\tsorted dirs\n");		if (super.flags & CRAMFS_FLAG_HOLES)			printf ("\tholes\n");		if (super.flags & CRAMFS_FLAG_SHIFTED_ROOT_OFFSET)			printf ("\tshifted root offset\n");	}	printf ("fsid:\n\tcrc: 0x%x\n\tedition: 0x%x\n",		super.fsid.crc, super.fsid.edition);	printf ("name: %16s\n", super.name);	return 1;}int cramfs_check (struct part_info *info){	struct cramfs_super *sb;	if (info->dev->id->type != MTD_DEV_TYPE_NOR)		return 0;	sb = (struct cramfs_super *) PART_OFFSET(info);	if (sb->magic != CRAMFS_32 (CRAMFS_MAGIC)) {		/* check at 512 byte offset */		sb = (struct cramfs_super *) (PART_OFFSET(info) + 512);		if (sb->magic != CRAMFS_32 (CRAMFS_MAGIC))			return 0;	}	return 1;}#endif /* CFG_FS_CRAMFS */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国模冰冰炮一区二区| 91精品国产高清一区二区三区| 日韩欧美国产1| 美女一区二区视频| 日韩欧美电影一区| 国产酒店精品激情| 中文字幕欧美日韩一区| 成人av网站大全| 亚洲综合在线观看视频| 欧美人妖巨大在线| 美腿丝袜亚洲三区| 国产精品视频线看| 精品视频1区2区| 蜜臀av国产精品久久久久| 国产欧美视频在线观看| 色天使久久综合网天天| 奇米精品一区二区三区四区| 久久精品视频免费观看| 91高清视频在线| 美日韩一级片在线观看| 国产精品看片你懂得| 欧美午夜精品久久久久久孕妇| 欧美性猛交xxxx乱大交退制版| 亚洲自拍偷拍九九九| 日本高清不卡视频| 日本在线观看不卡视频| 国产日韩欧美一区二区三区乱码| 91香蕉视频在线| 欧美bbbbb| 亚洲人成7777| 2020日本不卡一区二区视频| 91久久国产最好的精华液| 毛片av一区二区| 亚洲视频一区二区免费在线观看| 欧美一区二区三区人| 99精品在线观看视频| 美腿丝袜亚洲色图| 一区二区三区在线看| 精品va天堂亚洲国产| 欧美亚州韩日在线看免费版国语版| 精品综合免费视频观看| 亚洲自拍与偷拍| 国产精品毛片无遮挡高清| 欧美一区午夜精品| 亚洲大片精品永久免费| 欧美日韩国产美女| 国产精品自产自拍| 一区二区激情视频| 国产午夜三级一区二区三| 欧美日韩国产综合久久| 成人黄色国产精品网站大全在线免费观看 | 在线播放欧美女士性生活| 成人午夜视频在线| 久久精品国产免费| 午夜精品一区在线观看| 日韩毛片高清在线播放| 久久久久久久av麻豆果冻| 欧美精品久久久久久久多人混战| 色综合天天综合网国产成人综合天 | 国产成人免费在线观看| 精品久久五月天| 欧美性大战久久| 9久草视频在线视频精品| 国产永久精品大片wwwapp| 婷婷国产在线综合| 亚洲综合色噜噜狠狠| 18涩涩午夜精品.www| 国产精品天天摸av网| 国产欧美一区二区精品婷婷| 精品国产麻豆免费人成网站| 欧美一区二区三区不卡| 亚洲综合精品久久| 亚洲激情中文1区| 亚洲婷婷综合色高清在线| 中文字幕成人在线观看| 国产精品天干天干在观线 | 欧美绝品在线观看成人午夜影视| 色婷婷综合久久久中文一区二区| 韩国欧美国产1区| 六月丁香婷婷久久| 午夜在线电影亚洲一区| 一区二区三区久久| 欧美影院一区二区| 色诱视频网站一区| 色噜噜偷拍精品综合在线| 99精品1区2区| 在线看日本不卡| 欧美视频一区二区三区在线观看| 欧美伊人精品成人久久综合97 | 日韩美女视频一区二区| 国产精品伦理一区二区| 一区二区中文字幕在线| 一区二区三区在线视频观看| 亚洲成a人片在线观看中文| 日日摸夜夜添夜夜添国产精品| 视频一区视频二区中文字幕| 久久电影网站中文字幕| 国产乱码精品一区二区三| 成人白浆超碰人人人人| 色婷婷av一区二区三区大白胸| 日本欧美在线观看| 亚洲国产三级在线| 蜜臀91精品一区二区三区| 蜜桃av一区二区在线观看| 国产大陆亚洲精品国产| 99国产精品久久| 色婷婷综合久久| 欧美午夜精品久久久久久孕妇| 日韩写真欧美这视频| 久久精品夜色噜噜亚洲aⅴ| 中文字幕欧美一| 香蕉成人啪国产精品视频综合网 | 日韩美女主播在线视频一区二区三区 | 国产精品白丝av| 91色九色蝌蚪| 日韩一级免费观看| 国产精品无遮挡| 视频一区二区三区中文字幕| 国产成a人亚洲| 欧美丰满一区二区免费视频 | 欧美国产日韩a欧美在线观看| 一区二区三区久久| 激情五月播播久久久精品| 看片的网站亚洲| 成人晚上爱看视频| 欧美日韩国产中文| 国产日韩欧美电影| 亚洲成人免费影院| 国产+成+人+亚洲欧洲自线| 欧美日韩五月天| 中文字幕av一区 二区| 视频在线观看一区| 91啪亚洲精品| 久久久久97国产精华液好用吗| 亚洲一区二区视频在线| 成人免费的视频| 日韩免费视频线观看| 亚洲一区二区三区影院| 国产91精品露脸国语对白| 日韩亚洲欧美高清| 亚洲一区在线电影| 91亚洲精品一区二区乱码| 久久一夜天堂av一区二区三区| 图片区小说区国产精品视频| 97精品超碰一区二区三区| 精品美女被调教视频大全网站| 亚洲国产aⅴ成人精品无吗| www.日韩在线| 久久伊人中文字幕| 久久精品国产亚洲高清剧情介绍| 欧美性大战久久| 亚洲精品日韩综合观看成人91| 岛国一区二区三区| 久久久久久久久久久久久女国产乱| 午夜免费久久看| 欧美色偷偷大香| 亚洲一区二区三区自拍| 色综合久久久久网| 午夜激情综合网| 欧美性大战xxxxx久久久| 亚洲卡通动漫在线| 色中色一区二区| 亚洲精品ww久久久久久p站| 菠萝蜜视频在线观看一区| 国产精品热久久久久夜色精品三区 | 日韩丝袜美女视频| 日本欧美一区二区三区乱码| 欧美日韩亚洲不卡| 亚洲国产日产av| 欧美在线制服丝袜| 亚洲午夜久久久久久久久电影网| 色综合视频一区二区三区高清| 亚洲天天做日日做天天谢日日欢| 99久久免费视频.com| 综合色中文字幕| 国产精品美女久久久久久2018| 国产精品免费观看视频| 日一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 三级久久三级久久久| 欧美中文字幕一区二区三区| 亚洲欧美韩国综合色| 色先锋aa成人| 亚洲免费在线观看| 91成人网在线| 婷婷丁香激情综合| 欧美xxxxx牲另类人与| 国产精品77777竹菊影视小说| 中文在线一区二区| 91在线观看地址| 天天综合网 天天综合色| 日韩午夜三级在线| 国产成人亚洲精品青草天美| 中文字幕在线观看不卡| 91高清在线观看| 蜜臀av一级做a爰片久久| 国产日韩精品一区二区三区| 91久色porny | 中文字幕高清不卡| 在线视频综合导航|