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

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

?? dir.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
字號:
/*
 *  linux/fs/isofs/dir.c
 *
 *  (C) 1992  Eric Youngdale Modified for ISO9660 filesystem.
 *
 *  (C) 1991  Linus Torvalds - minix filesystem
 *
 *  isofs directory handling functions
 */

#include <linux/errno.h>

#include <asm/segment.h>

#include <linux/fs.h>
#include <linux/iso_fs.h>
#include <linux/kernel.h>
#include <linux/stat.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/malloc.h>

static int isofs_readdir(struct inode *, struct file *, struct dirent *, int);

static struct file_operations isofs_dir_operations = {
	NULL,			/* lseek - default */
	NULL,			/* read */
	NULL,			/* write - bad */
	isofs_readdir,		/* readdir */
	NULL,			/* select - default */
	NULL,			/* ioctl - default */
	NULL,			/* no special open code */
	NULL,			/* no special release code */
	NULL			/* fsync */
};

/*
 * directories can handle most operations...
 */
struct inode_operations isofs_dir_inode_operations = {
	&isofs_dir_operations,	/* default directory file-ops */
	NULL,      	/* create */
	isofs_lookup,		/* lookup */
	NULL, 		       /* link */
	NULL,       		/* unlink */
	NULL,       		/* symlink */
	NULL,       		/* mkdir */
	NULL,			/* rmdir */
	NULL,			/* mknod */
	NULL,			/* rename */
	NULL,			/* readlink */
	NULL,			/* follow_link */
	isofs_bmap,		/* bmap */
	NULL,			/* truncate */
	NULL			/* permission */
};

/* This is used to speed up lookup.  Without this we would need to
make a linear search of the directory to find the file that the
directory read just returned.  This is a single element cache. */

struct lookup_cache cache = {0,};

static int isofs_readdir(struct inode * inode, struct file * filp,
	struct dirent * dirent, int count)
{
	unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
	unsigned char bufbits = ISOFS_BUFFER_BITS(inode);
	unsigned int block,offset,i, j;
	char c = 0;
	int inode_number;
	struct buffer_head * bh;
	void * cpnt = NULL;
	unsigned int old_offset;
	int dlen, rrflag;
	char * dpnt;
	struct iso_directory_record * de;
	
	if (!inode || !S_ISDIR(inode->i_mode))
		return -EBADF;
	
	offset = filp->f_pos & (bufsize - 1);
	block = isofs_bmap(inode,filp->f_pos>>bufbits);
	if (!block || !(bh = bread(inode->i_dev,block,bufsize)))
		return 0;
	
	while (filp->f_pos < inode->i_size) {
#ifdef DEBUG
		printk("Block, offset: %x %x %x\n",
		       block, offset, filp->f_pos);
#endif
		de = (struct iso_directory_record *) (bh->b_data + offset);
		inode_number = (block << bufbits) + (offset & (bufsize - 1));
		
		/* If the length byte is zero, we should move on to the next
		   CDROM sector.  If we are at the end of the directory, we
		   kick out of the while loop. */
		
		if (*((unsigned char *) de) == 0)  {
			brelse(bh);
			offset = 0;
			filp->f_pos = ((filp->f_pos & ~(ISOFS_BLOCK_SIZE - 1))
				       + ISOFS_BLOCK_SIZE);
			block = isofs_bmap(inode,(filp->f_pos)>>bufbits);
			if (!block
			    || !(bh = bread(inode->i_dev,block,bufsize)))
				return 0;
			continue;
		}

		/* Make sure that the entire directory record is in the
		   current bh block.
		   If not, we malloc a buffer, and put the two halves together,
		   so that we can cleanly read the block */

		old_offset = offset;
		offset += *((unsigned char *) de);
		filp->f_pos += *((unsigned char *) de);

		if (offset >=  bufsize) {
			cpnt = kmalloc(1 << ISOFS_BLOCK_BITS, GFP_KERNEL);
			memcpy(cpnt, bh->b_data, bufsize);
			de = (struct iso_directory_record *)
				((char *)cpnt + old_offset);
			brelse(bh);
			offset = filp->f_pos & (bufsize - 1);
			block = isofs_bmap(inode,(filp->f_pos)>> bufbits);
			if (!block
			    || !(bh = bread(inode->i_dev,block,bufsize))) {
			        kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS);
				return 0;
			};
			memcpy((char *)cpnt+bufsize, bh->b_data, bufsize);
		}
		
		/* Handle the case of the '.' directory */

		rrflag = 0;
		i = 1;
		if (de->name_len[0] == 1 && de->name[0] == 0) {
			put_fs_byte('.',dirent->d_name);
			inode_number = inode->i_ino;
			dpnt = ".";
		}
		
		/* Handle the case of the '..' directory */
		
		else if (de->name_len[0] == 1 && de->name[0] == 1) {
			put_fs_byte('.',dirent->d_name);
			put_fs_byte('.',dirent->d_name+1);
			i = 2;
			dpnt = "..";
			if((inode->i_sb->u.isofs_sb.s_firstdatazone
			    << bufbits) != inode->i_ino)
				inode_number = inode->u.isofs_i.i_backlink;
			else
				inode_number = inode->i_ino;
			
			/* This should never happen, but who knows.  Try to be forgiving */
			if(inode_number == -1) {
				inode_number = 
					isofs_lookup_grandparent(inode,
					     find_rock_ridge_relocation(de, inode));
				if(inode_number == -1){ /* Should never happen */
					printk("Backlink not properly set.\n");
					goto out;
				};
			}
		}
		
		/* Handle everything else.  Do name translation if there
		   is no Rock Ridge NM field. */
		
		else {
			dlen = de->name_len[0];
			dpnt = de->name;
			i = dlen;
			rrflag = get_rock_ridge_filename(de, &dpnt, &dlen, inode);
			if (rrflag) {
			  if (rrflag == -1) {  /* This is a rock ridge reloc dir */
			    if (cpnt) {
				kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS);
				cpnt = NULL;
			    };
			    continue;
			  };
			  i = dlen;
			}
			else
			  if(inode->i_sb->u.isofs_sb.s_mapping == 'n')
			    for (i = 0; i < dlen && i < NAME_MAX; i++) {
			      if (!(c = dpnt[i])) break;
			      if (c >= 'A' && c <= 'Z') c |= 0x20;  /* lower case */
			      if (c == '.' && i == dlen-3 && de->name[i+1] == ';' && de->name[i+2] == '1')
				break;  /* Drop trailing '.;1' (ISO9660:1988 7.5.1 requires period) */
			      if (c == ';' && i == dlen-2 && de->name[i+1] == '1') 
				break;  /* Drop trailing ';1' */
			      if (c == ';') c = '.';  /* Convert remaining ';' to '.' */
			      dpnt[i] = c;
			  };
			
			for(j=0; j<i; j++)
			  put_fs_byte(dpnt[j],j+dirent->d_name); /* And save it */
		      };
#if 0
		printk("Nchar: %d\n",i);
#endif

		if (i && i+1 < sizeof(cache.filename)) {
			cache.ino = inode_number;
			cache.dir = inode->i_ino;
			cache.dev = inode->i_dev;
			strncpy(cache.filename, dpnt, i);
			cache.dlen = dlen;
		      };

		if (rrflag) kfree(dpnt);
		if (cpnt) {
			kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS);
			cpnt = NULL;
		};
		
		if (i) {
			put_fs_long(inode_number, &dirent->d_ino);
			put_fs_byte(0,i+dirent->d_name);
			put_fs_word(i,&dirent->d_reclen);
			brelse(bh);
			return i;
		}
	      }
	/* We go here for any condition we cannot handle.  We also drop through
	   to here at the end of the directory. */
 out:
	if (cpnt)
		kfree_s(cpnt, 1 << ISOFS_BLOCK_BITS);
	brelse(bh);
	return 0;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色噜噜狠狠一区二区三区果冻| 久久九九影视网| 精品成人在线观看| 亚洲男人电影天堂| 国产一区二区三区免费观看| 欧美人妖巨大在线| 亚洲激情第一区| 成人精品高清在线| 久久久蜜臀国产一区二区| 亚洲私人影院在线观看| 精品写真视频在线观看| 欧美怡红院视频| 中文字幕人成不卡一区| 国v精品久久久网| 欧美电视剧在线看免费| 亚洲一区二区三区免费视频| 99久久精品国产毛片| 久久精品亚洲精品国产欧美| 极品尤物av久久免费看| 欧美一区二区在线看| 亚洲电影视频在线| 91成人免费在线| 亚洲欧美aⅴ...| 91麻豆国产福利在线观看| 国产精品伦理在线| 国产老肥熟一区二区三区| 精品国产91洋老外米糕| 日韩在线卡一卡二| 5月丁香婷婷综合| 日韩在线观看一区二区| 欧美日韩精品一区二区三区蜜桃 | 激情综合网av| 91麻豆精品国产91久久久使用方法 | 国产网红主播福利一区二区| 美女性感视频久久| 7777精品伊人久久久大香线蕉最新版| 一区二区欧美国产| 色94色欧美sute亚洲线路二| 成人欧美一区二区三区小说| 色婷婷综合久久久中文字幕| 亚洲毛片av在线| 91精品办公室少妇高潮对白| 亚洲午夜av在线| 欧美日韩亚洲综合| 日韩国产高清影视| 日韩精品专区在线影院观看| 精品一区二区免费| 中文av字幕一区| 一本大道av伊人久久综合| 亚洲一区精品在线| 日韩美一区二区三区| 国产一区二区免费视频| 国产精品大尺度| 欧美日韩国产综合一区二区三区 | 中文字幕一区二区三| 色综合久久中文综合久久牛| 亚洲18影院在线观看| 日韩一级黄色大片| 国产白丝网站精品污在线入口| 中文字幕在线不卡一区| 欧美日韩亚洲综合一区二区三区 | 国产精品123区| 国产精品女主播av| 欧美性受xxxx| 国内精品嫩模私拍在线| 亚洲色图清纯唯美| 日韩一区二区精品| 色综合久久综合网| 韩国毛片一区二区三区| 亚洲人亚洲人成电影网站色| 欧美精品在线一区二区三区| 国产精品一区二区三区99| 亚洲精品大片www| 精品粉嫩超白一线天av| 97精品国产97久久久久久久久久久久| 日本伊人午夜精品| 中文字幕视频一区二区三区久| 欧美女孩性生活视频| 国产精品1区二区.| 三级精品在线观看| 1024精品合集| 中文字幕免费不卡在线| 欧美日韩不卡一区二区| 国产高清精品在线| 亚洲 欧美综合在线网络| 国产日韩精品久久久| 337p亚洲精品色噜噜| 91网址在线看| 国产在线视频一区二区| 日韩专区中文字幕一区二区| 亚洲欧洲日韩一区二区三区| 精品国产123| 欧美一区二区三区视频免费| 日本韩国欧美三级| 成人h精品动漫一区二区三区| 久久99精品久久久久久国产越南 | 午夜精品久久久久影视| 国产精品久久久久一区| 精品国产人成亚洲区| 69av一区二区三区| 欧美另类高清zo欧美| 色婷婷久久一区二区三区麻豆| 国产酒店精品激情| 久久er精品视频| 久久精品国产亚洲高清剧情介绍| 香蕉久久一区二区不卡无毒影院| 一区二区三区不卡视频| 亚洲欧美日韩国产综合在线| 国产精品久久久久婷婷二区次| 久久精品一区二区三区四区| 欧美精品一区二区三区视频| 精品免费国产二区三区| 91精品国产入口| 欧美一级xxx| 日韩免费性生活视频播放| 在线播放中文一区| 欧美放荡的少妇| 欧美日韩一卡二卡| 欧美日韩国产成人在线免费| 欧美高清视频一二三区| 91精品国产一区二区三区香蕉| 欧美高清精品3d| 777a∨成人精品桃花网| 日韩精品一区二区三区中文精品| 日韩一区二区三区高清免费看看| 日韩欧美成人午夜| 欧美精品一区二区三区四区| 国产亚洲一区二区三区四区 | 粉嫩在线一区二区三区视频| 国产乱子伦视频一区二区三区 | xfplay精品久久| 久久这里只有精品6| 国产日韩精品一区二区三区在线| 中文字幕不卡的av| 亚洲美女视频在线| 日本亚洲一区二区| 久久er99精品| 9色porny自拍视频一区二区| 色噜噜狠狠成人网p站| 欧美乱妇一区二区三区不卡视频| 精品久久人人做人人爱| 国产精品成人免费| 亚洲国产wwwccc36天堂| 蜜桃视频在线观看一区| 白白色亚洲国产精品| 欧美四级电影在线观看| 欧美电视剧在线看免费| 国产精品夫妻自拍| 香蕉影视欧美成人| 国产成人夜色高潮福利影视| 色综合天天天天做夜夜夜夜做| 欧美亚洲国产一区二区三区va| 日韩欧美国产电影| **性色生活片久久毛片| 奇米四色…亚洲| 91香蕉国产在线观看软件| 日韩一区二区三区高清免费看看| 国产清纯白嫩初高生在线观看91 | 色欧美乱欧美15图片| 日韩视频中午一区| 亚洲乱码中文字幕| 久久www免费人成看片高清| 色天天综合久久久久综合片| 精品久久久久久久久久久久久久久 | 成人97人人超碰人人99| 欧美疯狂性受xxxxx喷水图片| 久久久久久久久久久久电影| 亚洲一区免费视频| 不卡av免费在线观看| 欧美一级免费观看| 亚洲美女视频一区| 成人性生交大合| 精品少妇一区二区三区在线视频 | 91成人免费在线视频| 国产偷国产偷精品高清尤物| 午夜天堂影视香蕉久久| 成人av电影免费在线播放| 蜜臀av一区二区| 麻豆精品视频在线观看视频| 91免费精品国自产拍在线不卡| 日韩福利电影在线| jvid福利写真一区二区三区| 色婷婷激情一区二区三区| 久久久五月婷婷| av一二三不卡影片| 亚洲精品国产第一综合99久久| 欧美性生活大片视频| 男人操女人的视频在线观看欧美| 精品国产乱码久久久久久蜜臀 | 中文字幕成人在线观看| av电影天堂一区二区在线观看| 亚洲精品你懂的| 欧美女孩性生活视频| 加勒比av一区二区| 国产精品国产成人国产三级| 欧美亚洲动漫精品| 久久国产免费看| 国产精品电影一区二区三区| 欧洲精品在线观看| 精品午夜一区二区三区在线观看|