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

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

?? namei.c

?? LINXS基礎(chǔ)學(xué)習(xí)代碼 分析是一個很不錯的資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
	}	inr = de->inode;	dev = dir->i_dev;	brelse(bh);	iput(dir);	if (flag & O_EXCL)		return -EEXIST;	if (!(inode=iget(dev,inr)))		return -EACCES;	if ((S_ISDIR(inode->i_mode) && (flag & O_ACCMODE)) ||	    !permission(inode,ACC_MODE(flag))) {		iput(inode);		return -EPERM;	}	inode->i_atime = CURRENT_TIME;	if (flag & O_TRUNC)		truncate(inode);	*res_inode = inode;	return 0;}int sys_mknod(const char * filename, int mode, int dev){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh;	struct dir_entry * de;		if (!suser())		return -EPERM;	if (!(dir = dir_namei(filename,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (bh) {		brelse(bh);		iput(dir);		return -EEXIST;	}	inode = new_inode(dir->i_dev);	if (!inode) {		iput(dir);		return -ENOSPC;	}	inode->i_mode = mode;	if (S_ISBLK(mode) || S_ISCHR(mode))		inode->i_zone[0] = dev;	inode->i_mtime = inode->i_atime = CURRENT_TIME;	inode->i_dirt = 1;	bh = add_entry(dir,basename,namelen,&de);	if (!bh) {		iput(dir);		inode->i_nlinks=0;		iput(inode);		return -ENOSPC;	}	de->inode = inode->i_num;	bh->b_dirt = 1;	iput(dir);	iput(inode);	brelse(bh);	return 0;}int sys_mkdir(const char * pathname, int mode){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh, *dir_block;	struct dir_entry * de;	if (!suser())		return -EPERM;	if (!(dir = dir_namei(pathname,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (bh) {		brelse(bh);		iput(dir);		return -EEXIST;	}	inode = new_inode(dir->i_dev);	if (!inode) {		iput(dir);		return -ENOSPC;	}	inode->i_size = 32;	inode->i_dirt = 1;	inode->i_mtime = inode->i_atime = CURRENT_TIME;	if (!(inode->i_zone[0]=new_block(inode->i_dev))) {		iput(dir);		inode->i_nlinks--;		iput(inode);		return -ENOSPC;	}	inode->i_dirt = 1;	if (!(dir_block=bread(inode->i_dev,inode->i_zone[0]))) {		iput(dir);		free_block(inode->i_dev,inode->i_zone[0]);		inode->i_nlinks--;		iput(inode);		return -ERROR;	}	de = (struct dir_entry *) dir_block->b_data;	de->inode=inode->i_num;	strcpy(de->name,".");	de++;	de->inode = dir->i_num;	strcpy(de->name,"..");	inode->i_nlinks = 2;	dir_block->b_dirt = 1;	brelse(dir_block);	inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask);	inode->i_dirt = 1;	bh = add_entry(dir,basename,namelen,&de);	if (!bh) {		iput(dir);		free_block(inode->i_dev,inode->i_zone[0]);		inode->i_nlinks=0;		iput(inode);		return -ENOSPC;	}	de->inode = inode->i_num;	bh->b_dirt = 1;	dir->i_nlinks++;	dir->i_dirt = 1;	iput(dir);	iput(inode);	brelse(bh);	return 0;}/* * routine to check that the specified directory is empty (for rmdir) */static int empty_dir(struct m_inode * inode){	int nr,block;	int len;	struct buffer_head * bh;	struct dir_entry * de;	len = inode->i_size / sizeof (struct dir_entry);	if (len<2 || !inode->i_zone[0] ||	    !(bh=bread(inode->i_dev,inode->i_zone[0]))) {	    	printk("warning - bad directory on dev %04x\n",inode->i_dev);		return 0;	}	de = (struct dir_entry *) bh->b_data;	if (de[0].inode != inode->i_num || !de[1].inode || 	    strcmp(".",de[0].name) || strcmp("..",de[1].name)) {	    	printk("warning - bad directory on dev %04x\n",inode->i_dev);		return 0;	}	nr = 2;	de += 2;	while (nr<len) {		if ((void *) de >= (void *) (bh->b_data+BLOCK_SIZE)) {			brelse(bh);			block=bmap(inode,nr/DIR_ENTRIES_PER_BLOCK);			if (!block) {				nr += DIR_ENTRIES_PER_BLOCK;				continue;			}			if (!(bh=bread(inode->i_dev,block)))				return 0;			de = (struct dir_entry *) bh->b_data;		}		if (de->inode) {			brelse(bh);			return 0;		}		de++;		nr++;	}	brelse(bh);	return 1;}int sys_rmdir(const char * name){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh;	struct dir_entry * de;	if (!suser())		return -EPERM;	if (!(dir = dir_namei(name,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (!bh) {		iput(dir);		return -ENOENT;	}	if (!(inode = iget(dir->i_dev, de->inode))) {		iput(dir);		brelse(bh);		return -EPERM;	}	if ((dir->i_mode & S_ISVTX) && current->euid &&	    inode->i_uid != current->euid) {		iput(dir);		iput(inode);		brelse(bh);		return -EPERM;	}	if (inode->i_dev != dir->i_dev || inode->i_count>1) {		iput(dir);		iput(inode);		brelse(bh);		return -EPERM;	}	if (inode == dir) {	/* we may not delete ".", but "../dir" is ok */		iput(inode);		iput(dir);		brelse(bh);		return -EPERM;	}	if (!S_ISDIR(inode->i_mode)) {		iput(inode);		iput(dir);		brelse(bh);		return -ENOTDIR;	}	if (!empty_dir(inode)) {		iput(inode);		iput(dir);		brelse(bh);		return -ENOTEMPTY;	}	if (inode->i_nlinks != 2)		printk("empty directory has nlink!=2 (%d)",inode->i_nlinks);	de->inode = 0;	bh->b_dirt = 1;	brelse(bh);	inode->i_nlinks=0;	inode->i_dirt=1;	dir->i_nlinks--;	dir->i_ctime = dir->i_mtime = CURRENT_TIME;	dir->i_dirt=1;	iput(dir);	iput(inode);	return 0;}int sys_unlink(const char * name){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh;	struct dir_entry * de;	if (!(dir = dir_namei(name,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (!bh) {		iput(dir);		return -ENOENT;	}	if (!(inode = iget(dir->i_dev, de->inode))) {		iput(dir);		brelse(bh);		return -ENOENT;	}	if ((dir->i_mode & S_ISVTX) && !suser() &&	    current->euid != inode->i_uid &&	    current->euid != dir->i_uid) {		iput(dir);		iput(inode);		brelse(bh);		return -EPERM;	}	if (S_ISDIR(inode->i_mode)) {		iput(inode);		iput(dir);		brelse(bh);		return -EPERM;	}	if (!inode->i_nlinks) {		printk("Deleting nonexistent file (%04x:%d), %d\n",			inode->i_dev,inode->i_num,inode->i_nlinks);		inode->i_nlinks=1;	}	de->inode = 0;	bh->b_dirt = 1;	brelse(bh);	inode->i_nlinks--;	inode->i_dirt = 1;	inode->i_ctime = CURRENT_TIME;	iput(inode);	iput(dir);	return 0;}int sys_link(const char * oldname, const char * newname){	struct dir_entry * de;	struct m_inode * oldinode, * dir;	struct buffer_head * bh;	const char * basename;	int namelen;	oldinode=namei(oldname);	if (!oldinode)		return -ENOENT;	if (S_ISDIR(oldinode->i_mode)) {		iput(oldinode);		return -EPERM;	}	dir = dir_namei(newname,&namelen,&basename);	if (!dir) {		iput(oldinode);		return -EACCES;	}	if (!namelen) {		iput(oldinode);		iput(dir);		return -EPERM;	}	if (dir->i_dev != oldinode->i_dev) {		iput(dir);		iput(oldinode);		return -EXDEV;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		iput(oldinode);		return -EACCES;	}	bh = find_entry(&dir,basename,namelen,&de);	if (bh) {		brelse(bh);		iput(dir);		iput(oldinode);		return -EEXIST;	}	bh = add_entry(dir,basename,namelen,&de);	if (!bh) {		iput(dir);		iput(oldinode);		return -ENOSPC;	}	de->inode = oldinode->i_num;	bh->b_dirt = 1;	brelse(bh);	iput(dir);	oldinode->i_nlinks++;	oldinode->i_ctime = CURRENT_TIME;	oldinode->i_dirt = 1;	iput(oldinode);	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久一区二区三区| 日本一区二区三级电影在线观看| 国产精品18久久久久久vr| 亚洲情趣在线观看| 欧美mv日韩mv国产网站app| 成人国产精品免费网站| 美女视频黄免费的久久| 国产精品久线观看视频| 欧美mv日韩mv国产| 欧美日韩免费一区二区三区视频| 国产精品 欧美精品| 亚洲国产精品久久久久婷婷884| 国产午夜精品一区二区| 日韩一区二区电影网| 91精彩视频在线观看| 国产精品一区二区三区四区| 日韩影院免费视频| 一区二区三区中文字幕在线观看| 国产色爱av资源综合区| 91精品国产福利| 欧美中文字幕一二三区视频| youjizz国产精品| 国产永久精品大片wwwapp| 日韩精品每日更新| 亚洲一区av在线| 综合婷婷亚洲小说| 国产嫩草影院久久久久| 精品999久久久| 欧美一级黄色录像| 欧美日韩精品福利| 欧洲激情一区二区| 色诱亚洲精品久久久久久| 丁香六月综合激情| 高清在线不卡av| 国产一区二区精品久久| 国产一区欧美日韩| 精品午夜久久福利影院| 久久精品国产一区二区三| 日韩不卡一二三区| 日韩高清不卡一区| 日韩一区精品视频| 美国毛片一区二区三区| 免费看黄色91| 麻豆精品在线观看| 久久精品国产精品亚洲精品 | 欧美日韩成人一区| 欧美综合欧美视频| 欧美精三区欧美精三区| 欧美高清激情brazzers| 91精品国产91久久久久久最新毛片| 欧美性感一类影片在线播放| 欧美在线免费播放| 欧美日本乱大交xxxxx| 在线观看91av| 久久久影院官网| 亚洲国产经典视频| 亚洲精品日日夜夜| 亚洲福利视频一区二区| 日韩中文字幕亚洲一区二区va在线| 日韩av网站在线观看| 久久er精品视频| 成人综合日日夜夜| 一本大道综合伊人精品热热| 在线观看91视频| 91精品国产欧美日韩| 2020国产成人综合网| 中文字幕亚洲区| 亚洲第一福利一区| 韩国毛片一区二区三区| 成人午夜大片免费观看| 日本高清不卡一区| 日韩欧美一级在线播放| 欧美激情在线一区二区| 亚洲激情网站免费观看| 天天综合色天天综合| 韩国女主播一区二区三区| 不卡电影一区二区三区| 欧美裸体一区二区三区| 久久亚洲捆绑美女| 中文字幕一区二区5566日韩| 爽爽淫人综合网网站| 国产ts人妖一区二区| 色美美综合视频| 日韩一区二区三区免费看 | 中文av一区二区| 亚洲精品免费电影| 秋霞午夜鲁丝一区二区老狼| 成人激情小说网站| 777午夜精品免费视频| 欧美国产日韩a欧美在线观看 | 国产精品18久久久久久久久| 欧美中文字幕不卡| 国产日韩欧美亚洲| 亚洲国产中文字幕在线视频综合 | 色婷婷亚洲综合| 久久免费看少妇高潮| 亚洲成人动漫在线免费观看| 国产精品白丝jk黑袜喷水| 欧美在线一二三| 国产欧美一区二区三区在线老狼| 香蕉成人啪国产精品视频综合网| 成人一区二区三区视频在线观看 | 国产精品大尺度| 久久精品国产久精国产| 在线精品视频一区二区三四| 久久久久久99久久久精品网站| 亚洲一区二区三区不卡国产欧美| 国产成人丝袜美腿| 日韩女优制服丝袜电影| 亚洲国产精品嫩草影院| 99精品国产热久久91蜜凸| 久久综合久久99| 青青草国产成人99久久| 欧美亚洲尤物久久| 亚洲欧美综合色| 丁香婷婷深情五月亚洲| 日韩精品一区二区三区四区视频 | 欧美巨大另类极品videosbest| 国产精品乱子久久久久| 国产一区二区影院| 精品国产91久久久久久久妲己| 丝袜诱惑制服诱惑色一区在线观看| 91免费精品国自产拍在线不卡| 久久麻豆一区二区| 久久成人羞羞网站| 日韩免费成人网| 美女免费视频一区二区| 3d动漫精品啪啪一区二区竹菊| 亚洲精品五月天| 色久综合一二码| 亚洲欧美另类久久久精品2019| 成人性视频免费网站| 日本一区二区三区国色天香| 国产在线视频一区二区| 欧美本精品男人aⅴ天堂| 日韩成人av影视| 日韩欧美在线网站| 蜜桃免费网站一区二区三区| 日韩一区二区电影网| 六月丁香综合在线视频| 日韩一级二级三级| 蜜桃视频一区二区三区| 欧美v亚洲v综合ⅴ国产v| 毛片av中文字幕一区二区| 欧美一区二区三区婷婷月色| 热久久免费视频| 久久婷婷国产综合国色天香| 久久av老司机精品网站导航| 久久天堂av综合合色蜜桃网| 国产麻豆精品在线| 国产亲近乱来精品视频| 成人国产亚洲欧美成人综合网| 国产精品拍天天在线| 91日韩一区二区三区| 亚洲一二三级电影| 欧美日韩aaa| 久草在线在线精品观看| 久久色在线观看| 成人亚洲精品久久久久软件| 亚洲欧美激情视频在线观看一区二区三区| 91在线播放网址| 亚洲一区二区三区中文字幕| 欧美一区二区三区公司| 国产一区二区三区在线看麻豆| 国产欧美视频一区二区三区| 91在线观看地址| 舔着乳尖日韩一区| 国产日韩欧美制服另类| 色狠狠色狠狠综合| 青青青爽久久午夜综合久久午夜| 精品粉嫩aⅴ一区二区三区四区 | 91麻豆免费在线观看| 午夜欧美大尺度福利影院在线看| 日韩一区二区视频| 成人污视频在线观看| 亚洲成av人综合在线观看| 精品成人免费观看| 色吧成人激情小说| 久久av中文字幕片| 玉足女爽爽91| 欧美成人精品福利| 色综合网色综合| 久久众筹精品私拍模特| 免费高清在线视频一区·| 4438x亚洲最大成人网| 国产原创一区二区| 亚洲免费在线看| 欧美一区二区美女| 91亚洲男人天堂| 久久精品噜噜噜成人88aⅴ | 国产精品第一页第二页第三页| 欧美日本精品一区二区三区| 成人亚洲精品久久久久软件| 亚洲成人免费在线观看| 国产精品色在线观看| 欧美精品一级二级| 99久久精品国产麻豆演员表| 精品一区二区综合| 一区二区欧美国产| 国产精品久99|