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

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

?? inode.c

?? 內核是系統的心臟
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  linux/fs/isofs/inode.c
 * 
 *  (C) 1992  Eric Youngdale Modified for ISO9660 filesystem.
 *
 *  (C) 1991  Linus Torvalds - minix filesystem
 */

#include <linux/config.h>
#include <linux/stat.h>
#include <linux/sched.h>
#include <linux/iso_fs.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/locks.h>
#include <linux/malloc.h>
#include <linux/errno.h>

#include <asm/system.h>
#include <asm/segment.h>

#if defined(CONFIG_BLK_DEV_SR)
extern int check_cdrom_media_change(int, int);
#endif
#if defined(CONFIG_CDU31A)
extern int check_cdu31a_media_change(int, int);
#endif
#if defined(CONFIG_MCD)
extern int check_mcd_media_change(int, int);
#endif
#if defined (CONFIG_SBPCD)
extern int check_sbpcd_media_change(int, int);
#endif CONFIG_SBPCD

#ifdef LEAK_CHECK
static int check_malloc = 0;
static int check_bread = 0;
#endif

void isofs_put_super(struct super_block *sb)
{
	lock_super(sb);

#ifdef LEAK_CHECK
	printk("Outstanding mallocs:%d, outstanding buffers: %d\n", 
	       check_malloc, check_bread);
#endif
	sb->s_dev = 0;
	unlock_super(sb);
	return;
}

static struct super_operations isofs_sops = { 
	isofs_read_inode,
	NULL,			/* notify_change */
	NULL,			/* write_inode */
	NULL,			/* put_inode */
	isofs_put_super,
	NULL,			/* write_super */
	isofs_statfs,
	NULL
};



static int parse_options(char *options,char *map,char *conversion, char * rock, char * cruft, unsigned int * blocksize)
{
	char *this_char,*value;

	*map = 'n';
	*rock = 'y';
	*cruft = 'n';
	*conversion = 'a';
	*blocksize = 1024;
	if (!options) return 1;
	for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
	        if (strncmp(this_char,"norock",6) == 0) {
		  *rock = 'n';
		  continue;
		};
	        if (strncmp(this_char,"cruft",5) == 0) {
		  *cruft = 'y';
		  continue;
		};
		if ((value = strchr(this_char,'=')) != NULL)
			*value++ = 0;
		if (!strcmp(this_char,"map") && value) {
			if (value[0] && !value[1] && strchr("on",*value))
				*map = *value;
			else if (!strcmp(value,"off")) *map = 'o';
			else if (!strcmp(value,"normal")) *map = 'n';
			else return 0;
		}
		else if (!strcmp(this_char,"conv") && value) {
			if (value[0] && !value[1] && strchr("bta",*value))
				*conversion = *value;
			else if (!strcmp(value,"binary")) *conversion = 'b';
			else if (!strcmp(value,"text")) *conversion = 't';
			else if (!strcmp(value,"mtext")) *conversion = 'm';
			else if (!strcmp(value,"auto")) *conversion = 'a';
			else return 0;
		}
		else if (!strcmp(this_char,"block") && value) {
		  char * vpnt = value;
		  unsigned int ivalue;
		  ivalue = 0;
		  while(*vpnt){
		    if(*vpnt <  '0' || *vpnt > '9') break;
		    ivalue = ivalue * 10 + (*vpnt - '0');
		    vpnt++;
		  };
		  if (*vpnt) return 0;
		  if (ivalue != 1024 && ivalue != 2048) return 0;
		  *blocksize = ivalue;
		}
		else return 0;
	}
	return 1;
}

struct super_block *isofs_read_super(struct super_block *s,void *data,
				     int silent)
{
	struct buffer_head *bh;
	int iso_blknum;
	unsigned int blocksize, blocksize_bits;
	int high_sierra;
	int dev=s->s_dev;
	struct iso_volume_descriptor *vdp;
	struct hs_volume_descriptor *hdp;

	struct iso_primary_descriptor *pri = NULL;
	struct hs_primary_descriptor *h_pri = NULL;

	struct iso_directory_record *rootp;

	char map, conversion, rock, cruft;

	if (!parse_options((char *) data,&map,&conversion, &rock, &cruft, &blocksize)) {
		s->s_dev = 0;
		return NULL;
	}

	blocksize_bits = 0;
	{
	  int i = blocksize;
	  while (i != 1){
	    blocksize_bits++;
	    i >>=1;
	  };
	};
	set_blocksize(dev, blocksize);

	lock_super(s);

	s->u.isofs_sb.s_high_sierra = high_sierra = 0; /* default is iso9660 */

	for (iso_blknum = 16; iso_blknum < 100; iso_blknum++) {
		if (!(bh = bread(dev, iso_blknum << (ISOFS_BLOCK_BITS-blocksize_bits), blocksize))) {
			s->s_dev=0;
			printk("isofs_read_super: bread failed, dev 0x%x iso_blknum %d\n",
			       dev, iso_blknum);
			unlock_super(s);
			return NULL;
		}

		vdp = (struct iso_volume_descriptor *)bh->b_data;
		hdp = (struct hs_volume_descriptor *)bh->b_data;

		
		if (strncmp (hdp->id, HS_STANDARD_ID, sizeof hdp->id) == 0) {
		  if (isonum_711 (hdp->type) != ISO_VD_PRIMARY)
			goto out;
		  if (isonum_711 (hdp->type) == ISO_VD_END)
		        goto out;
		
		        s->u.isofs_sb.s_high_sierra = 1;
			high_sierra = 1;
		        rock = 'n';
		        h_pri = (struct hs_primary_descriptor *)vdp;
			break;
		};
		
		if (strncmp (vdp->id, ISO_STANDARD_ID, sizeof vdp->id) == 0) {
		  if (isonum_711 (vdp->type) != ISO_VD_PRIMARY)
			goto out;
		  if (isonum_711 (vdp->type) == ISO_VD_END)
			goto out;
		
		        pri = (struct iso_primary_descriptor *)vdp;
			break;
	        };

		brelse(bh);
	      }
	if(iso_blknum == 100) {
		if (!silent)
			printk("Unable to identify CD-ROM format.\n");
		s->s_dev = 0;
		unlock_super(s);
		return NULL;
	};
	
	
	if(high_sierra){
	  rootp = (struct iso_directory_record *) h_pri->root_directory_record;
	  if (isonum_723 (h_pri->volume_set_size) != 1) {
	    printk("Multi-volume disks not (yet) supported.\n");
	    goto out;
	  };
	  s->u.isofs_sb.s_nzones = isonum_733 (h_pri->volume_space_size);
	  s->u.isofs_sb.s_log_zone_size = isonum_723 (h_pri->logical_block_size);
	  s->u.isofs_sb.s_max_size = isonum_733(h_pri->volume_space_size);
	} else {
	  rootp = (struct iso_directory_record *) pri->root_directory_record;
	  if (isonum_723 (pri->volume_set_size) != 1) {
	    printk("Multi-volume disks not (yet) supported.\n");
	    goto out;
	  };
	  s->u.isofs_sb.s_nzones = isonum_733 (pri->volume_space_size);
	  s->u.isofs_sb.s_log_zone_size = isonum_723 (pri->logical_block_size);
	  s->u.isofs_sb.s_max_size = isonum_733(pri->volume_space_size);
	}
	
	s->u.isofs_sb.s_ninodes = 0; /* No way to figure this out easily */
	
	s->u.isofs_sb.s_firstdatazone = isonum_733( rootp->extent) << 
		(ISOFS_BLOCK_BITS - blocksize_bits);
	s->s_magic = ISOFS_SUPER_MAGIC;
	
	/* The CDROM is read-only, has no nodes (devices) on it, and since
	   all of the files appear to be owned by root, we really do not want
	   to allow suid.  (suid or devices will not show up unless we have
	   Rock Ridge extensions) */
	
	s->s_flags = MS_RDONLY /* | MS_NODEV | MS_NOSUID */;
	
	if(s->u.isofs_sb.s_log_zone_size != (1 << ISOFS_BLOCK_BITS)) {
		printk("1 <<Block bits != Block size\n");
		goto out;
	};
	
	brelse(bh);
	
	printk("Max size:%ld   Log zone size:%ld\n",
	       s->u.isofs_sb.s_max_size, 
	       s->u.isofs_sb.s_log_zone_size);
	printk("First datazone:%ld   Root inode number %d\n",
	       s->u.isofs_sb.s_firstdatazone,
	       isonum_733 (rootp->extent) << ISOFS_BLOCK_BITS);
	if(high_sierra) printk("Disc in High Sierra format.\n");
	unlock_super(s);
	/* set up enough so that it can read an inode */
	
	s->s_dev = dev;
	s->s_op = &isofs_sops;
	s->u.isofs_sb.s_mapping = map;
	s->u.isofs_sb.s_rock = (rock == 'y' ? 1 : 0);
	s->u.isofs_sb.s_conversion = conversion;
	s->u.isofs_sb.s_cruft = cruft;
	s->s_blocksize = blocksize;
	s->s_blocksize_bits = blocksize_bits;
	s->s_mounted = iget(s, isonum_733 (rootp->extent) << ISOFS_BLOCK_BITS);
	unlock_super(s);

	if (!(s->s_mounted)) {
		s->s_dev=0;
		printk("get root inode failed\n");
		return NULL;
	}
#if defined(CONFIG_BLK_DEV_SR) && defined(CONFIG_SCSI)
	if (MAJOR(s->s_dev) == SCSI_CDROM_MAJOR) {
		/* Check this one more time. */
		if(check_cdrom_media_change(s->s_dev, 0))
		  goto out;
	}
#endif
#if defined(CONFIG_CDU31A)
	if (MAJOR(s->s_dev) == CDU31A_CDROM_MAJOR) {
		/* Check this one more time. */
		if(check_cdu31a_media_change(s->s_dev, 0))
		  goto out;
	}
#endif
#if defined(CONFIG_MCD)
	if (MAJOR(s->s_dev) == MITSUMI_CDROM_MAJOR) {
		/* Check this one more time. */
		if(check_mcd_media_change(s->s_dev, 0))
		  goto out;
	}
#endif
#if defined(CONFIG_SBPCD)
	if (MAJOR(s->s_dev) == MATSUSHITA_CDROM_MAJOR) {
		if (check_sbpcd_media_change(s->s_dev,0))
		  goto out;
	};
#endif CONFIG_SBPCD

	return s;
 out: /* Kick out for various error conditions */
	brelse(bh);
	s->s_dev = 0;
	unlock_super(s);
	return NULL;
}

void isofs_statfs (struct super_block *sb, struct statfs *buf)
{
	put_fs_long(ISOFS_SUPER_MAGIC, &buf->f_type);
	put_fs_long(1 << ISOFS_BLOCK_BITS, &buf->f_bsize);
	put_fs_long(sb->u.isofs_sb.s_nzones, &buf->f_blocks);
	put_fs_long(0, &buf->f_bfree);
	put_fs_long(0, &buf->f_bavail);
	put_fs_long(sb->u.isofs_sb.s_ninodes, &buf->f_files);
	put_fs_long(0, &buf->f_ffree);
	put_fs_long(NAME_MAX, &buf->f_namelen);
	/* Don't know what value to put in buf->f_fsid */
}

int isofs_bmap(struct inode * inode,int block)
{

	if (block<0) {
		printk("_isofs_bmap: block<0");
		return 0;
	}
	return inode->u.isofs_i.i_first_extent + block;
}

void isofs_read_inode(struct inode * inode)
{
	unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
	struct buffer_head * bh;
	struct iso_directory_record * raw_inode;
	unsigned char *pnt = NULL;
	void *cpnt = NULL;
	int high_sierra;
	int block;
	int i;

	block = inode->i_ino >> ISOFS_BUFFER_BITS(inode);
	if (!(bh=bread(inode->i_dev,block, bufsize))) {
	  printk("unable to read i-node block");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产欧美一区二区三区| 国产一区在线观看视频| 色一情一伦一子一伦一区| 国产精品麻豆久久久| 国产欧美日韩三级| 91麻豆精东视频| 亚洲制服丝袜av| 欧美日韩视频在线观看一区二区三区| 日本不卡的三区四区五区| 精品久久久久久久久久久久久久久 | 91精品国产乱| 久久99久久久欧美国产| 欧美国产激情一区二区三区蜜月| 不卡一区中文字幕| 日韩无一区二区| 风间由美一区二区三区在线观看 | 欧美变态口味重另类| 国产成人av电影在线观看| 最好看的中文字幕久久| 午夜精品福利一区二区蜜股av | 天天综合色天天| 亚洲精品一区二区三区影院| 久久精品综合网| 五月天亚洲精品| 国产女主播一区| 在线观看日韩电影| 美腿丝袜亚洲三区| 国产精品久久久久婷婷二区次| 色嗨嗨av一区二区三区| 精品一区二区免费看| 国产日韩影视精品| 亚洲在线中文字幕| 精品国产亚洲一区二区三区在线观看| 高清不卡一区二区在线| 亚洲高清免费在线| 欧美高清在线精品一区| 精品亚洲免费视频| 中文字幕av在线一区二区三区| eeuss鲁片一区二区三区在线观看| 亚洲成人7777| 国产精品久久看| 日韩一区二区三区视频| 久久久久国产免费免费| 久久精品国产在热久久| 亚洲精品日韩一| 国产日韩欧美一区二区三区乱码| 欧洲精品一区二区| 国产精品乱人伦| 欧美成人乱码一区二区三区| 91精品福利视频| 丁香婷婷综合网| 麻豆精品蜜桃视频网站| 亚洲综合激情小说| 国产欧美视频一区二区| 日韩精品一区二区三区视频在线观看| 色综合网站在线| 丰满白嫩尤物一区二区| 精品一区二区三区日韩| 美女被吸乳得到大胸91| 五月激情综合色| 亚洲精品欧美激情| 中文字幕一区二区在线播放| 久久久影视传媒| 精品卡一卡二卡三卡四在线| 日韩欧美国产一区二区三区 | 亚洲人成小说网站色在线| 99这里都是精品| 国产一区二区中文字幕| 精品在线一区二区三区| 伦理电影国产精品| 日韩成人dvd| 首页亚洲欧美制服丝腿| 亚洲一区视频在线| 91黄视频在线观看| 91免费看片在线观看| 成人影视亚洲图片在线| 成人妖精视频yjsp地址| 成人av集中营| 中文字幕欧美日本乱码一线二线| 精品国产乱码久久久久久1区2区| 精品国产制服丝袜高跟| 精品少妇一区二区三区视频免付费 | 国产一区日韩二区欧美三区| 麻豆精品视频在线观看免费| 蜜桃av一区二区三区电影| 视频在线观看91| 免费的成人av| 国产一区二区导航在线播放| 国产真实乱偷精品视频免| 国产精品乡下勾搭老头1| 国产ts人妖一区二区| 成人妖精视频yjsp地址| 91丨九色porny丨蝌蚪| 欧美这里有精品| 日韩欧美国产综合一区| 国产寡妇亲子伦一区二区| 成人免费视频网站在线观看| 亚洲国产成人私人影院tom| 中文字幕欧美一| 亚洲国产精品久久久久秋霞影院| 天天综合网 天天综合色| 久草精品在线观看| 成人午夜电影网站| 欧美私模裸体表演在线观看| 亚洲天天做日日做天天谢日日欢| 精品美女在线播放| 国产精品日韩成人| 亚洲一区二区三区四区在线免费观看| 日韩精品一区第一页| 国产一区二区精品在线观看| 99久久久无码国产精品| 欧美美女一区二区| 国产欧美精品区一区二区三区| 亚洲视频1区2区| 免费久久精品视频| 99视频在线观看一区三区| 欧美女孩性生活视频| 国产免费成人在线视频| 亚洲国产精品久久人人爱| 国产精品 欧美精品| 午夜伊人狠狠久久| 国产色一区二区| 夜夜嗨av一区二区三区| 韩国女主播一区二区三区| 色综合久久综合网欧美综合网| 欧美一三区三区四区免费在线看| 欧美国产一区视频在线观看| 日韩电影免费一区| 97久久超碰国产精品电影| 国产成人啪免费观看软件 | 久久精品国产第一区二区三区| 成人激情午夜影院| 日韩午夜电影av| 亚洲一区二区欧美日韩| 国产电影一区在线| 欧美一级在线观看| 一区二区三区四区激情 | 一区二区三区在线免费| 极品少妇xxxx精品少妇| 欧洲人成人精品| 中文字幕 久热精品 视频在线 | 丝袜国产日韩另类美女| av成人老司机| 国产精品午夜春色av| 麻豆91精品视频| 欧美性猛片xxxx免费看久爱| 国产色产综合色产在线视频| 另类小说欧美激情| 欧美日韩精品一区二区三区四区| 亚洲码国产岛国毛片在线| 图片区小说区区亚洲影院| 色综合天天综合狠狠| 欧美经典一区二区三区| 免费人成精品欧美精品| 日本伊人色综合网| 欧美在线观看18| 亚洲激情在线播放| 国产麻豆视频精品| 久久免费看少妇高潮| 国产精品麻豆久久久| 国产成人免费在线| 国产视频一区二区在线观看| 国产综合一区二区| 精品国产乱码久久久久久浪潮 | 亚洲超碰精品一区二区| 日本国产一区二区| 欧美第一区第二区| 麻豆91精品视频| 2022国产精品视频| 国产一区二区美女诱惑| 久久综合久久综合九色| 韩日av一区二区| 精品蜜桃在线看| 国产成人精品一区二| 久久久高清一区二区三区| 国产精品亚洲一区二区三区在线| 精品国产一区二区三区不卡| 国产乱码精品1区2区3区| 久久精品在这里| 不卡的av电影| 国产精品乱码人人做人人爱| 成人国产在线观看| 一区二区视频在线| 欧美日韩不卡一区二区| 日本在线播放一区二区三区| 精品捆绑美女sm三区| 国产成人无遮挡在线视频| 亚洲欧美日韩人成在线播放| 欧美亚洲一区二区三区四区| 热久久一区二区| 国产成人亚洲综合色影视| 成人欧美一区二区三区视频网页| 91久久奴性调教| 亚洲va欧美va人人爽午夜| 成人免费av网站| 午夜在线成人av| 欧美国产日韩精品免费观看| 日本久久一区二区| www成人在线观看| 欧美高清你懂得|