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

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

?? namei.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
 *  linux/fs/msdos/namei.c
 *
 *  Written 1992,1993 by Werner Almesberger
 */

#include <asm/segment.h>

#include <linux/sched.h>
#include <linux/msdos_fs.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/stat.h>

/* MS-DOS "device special files" */

static char *reserved_names[] = {
    "CON     ","PRN     ","NUL     ","AUX     ",
    "LPT1    ","LPT2    ","LPT3    ","LPT4    ",
    "COM1    ","COM2    ","COM3    ","COM4    ",
    NULL };


/* Characters that are undesirable in an MS-DOS file name */
  
static char bad_chars[] = "*?<>|\"";
static char bad_if_strict[] = "+=,; ";


/* Formats an MS-DOS file name. Rejects invalid names. */

static int msdos_format_name(char conv,const char *name,int len,char *res,
  int dot_dirs)
{
	char *walk,**reserved;
	unsigned char c;
	int space;

	if (IS_FREE(name)) return -EINVAL;
	if (name[0] == '.' && (len == 1 || (len == 2 && name[1] == '.'))) {
		if (!dot_dirs) return -EEXIST;
		memset(res+1,' ',10);
		while (len--) *res++ = '.';
		return 0;
	}
	space = 1; /* disallow names starting with a dot */
	c = 0;
	for (walk = res; len && walk-res < 8; walk++) {
	    	c = *name++;
		len--;
		if (conv != 'r' && strchr(bad_chars,c)) return -EINVAL;
		if (conv == 's' && strchr(bad_if_strict,c)) return -EINVAL;
  		if (c >= 'A' && c <= 'Z' && conv == 's') return -EINVAL;
		if (c < ' ' || c == ':' || c == '\\') return -EINVAL;
		if (c == '.') break;
		space = c == ' ';
		*walk = c >= 'a' && c <= 'z' ? c-32 : c;
	}
	if (space) return -EINVAL;
	if (conv == 's' && len && c != '.') {
		c = *name++;
		len--;
		if (c != '.') return -EINVAL;
	}
	while (c != '.' && len--) c = *name++;
	if (c == '.') {
		while (walk-res < 8) *walk++ = ' ';
		while (len > 0 && walk-res < MSDOS_NAME) {
			c = *name++;
			len--;
			if (conv != 'r' && strchr(bad_chars,c)) return -EINVAL;
			if (conv == 's' && strchr(bad_if_strict,c))
				return -EINVAL;
			if (c < ' ' || c == ':' || c == '\\' || c == '.')
				return -EINVAL;
			if (c >= 'A' && c <= 'Z' && conv == 's') return -EINVAL;
			space = c == ' ';
			*walk++ = c >= 'a' && c <= 'z' ? c-32 : c;
		}
		if (space) return -EINVAL;
		if (conv == 's' && len) return -EINVAL;
	}
	while (walk-res < MSDOS_NAME) *walk++ = ' ';
	for (reserved = reserved_names; *reserved; reserved++)
		if (!strncmp(res,*reserved,8)) return -EINVAL;
	return 0;
}


/* Locates a directory entry. */

static int msdos_find(struct inode *dir,const char *name,int len,
    struct buffer_head **bh,struct msdos_dir_entry **de,int *ino)
{
	char msdos_name[MSDOS_NAME];
	int res;

	if ((res = msdos_format_name(MSDOS_SB(dir->i_sb)->name_check,name,len,
	    msdos_name,1)) < 0) return res;
	return msdos_scan(dir,msdos_name,bh,de,ino);
}


int msdos_lookup(struct inode *dir,const char *name,int len,
    struct inode **result)
{
	int ino,res;
	struct msdos_dir_entry *de;
	struct buffer_head *bh;
	struct inode *next;

	*result = NULL;
	if (!dir) return -ENOENT;
	if (!S_ISDIR(dir->i_mode)) {
		iput(dir);
		return -ENOENT;
	}
	if (len == 1 && name[0] == '.') {
		*result = dir;
		return 0;
	}
	if (len == 2 && name[0] == '.' && name[1] == '.') {
		ino = msdos_parent_ino(dir,0);
		iput(dir);
		if (ino < 0) return ino;
		if (!(*result = iget(dir->i_sb,ino))) return -EACCES;
		return 0;
	}
	if ((res = msdos_find(dir,name,len,&bh,&de,&ino)) < 0) {
		iput(dir);
		return res;
	}
	if (bh) brelse(bh);
/* printk("lookup: ino=%d\n",ino); */
	if (!(*result = iget(dir->i_sb,ino))) {
		iput(dir);
		return -EACCES;
	}
	if (MSDOS_I(*result)->i_busy) { /* mkdir in progress */
		iput(*result);
		iput(dir);
		return -ENOENT;
	}
	while (MSDOS_I(*result)->i_old) {
		next = MSDOS_I(*result)->i_old;
		iput(*result);
		if (!(*result = iget(next->i_sb,next->i_ino))) {
			fs_panic(dir->i_sb,"msdos_lookup: Can't happen");
			iput(dir);
			return -ENOENT;
		}
	}
	iput(dir);
	return 0;
}


/* Creates a directory entry (name is already formatted). */

static int msdos_create_entry(struct inode *dir,char *name,int is_dir,
    struct inode **result)
{
	struct buffer_head *bh;
	struct msdos_dir_entry *de;
	int res,ino;

	if ((res = msdos_scan(dir,NULL,&bh,&de,&ino)) < 0) {
		if (res != -ENOENT) return res;
		if (dir->i_ino == MSDOS_ROOT_INO) return -ENOSPC;
		if ((res = msdos_add_cluster(dir)) < 0) return res;
		if ((res = msdos_scan(dir,NULL,&bh,&de,&ino)) < 0) return res;
	}
	/*
	 * XXX all times should be set by caller upon successful completion.
	 */
	dir->i_ctime = dir->i_mtime = CURRENT_TIME;
	dir->i_dirt = 1;
	memcpy(de->name,name,MSDOS_NAME);
	de->attr = is_dir ? ATTR_DIR : ATTR_ARCH;
	de->start = 0;
	date_unix2dos(dir->i_mtime,&de->time,&de->date);
	de->size = 0;
	bh->b_dirt = 1;
	if ((*result = iget(dir->i_sb,ino)) != NULL)
		msdos_read_inode(*result);
	brelse(bh);
	if (!*result) return -EIO;
	(*result)->i_mtime = (*result)->i_atime = (*result)->i_ctime =
	    CURRENT_TIME;
	(*result)->i_dirt = 1;
	return 0;
}


int msdos_create(struct inode *dir,const char *name,int len,int mode,
	struct inode **result)
{
	struct buffer_head *bh;
	struct msdos_dir_entry *de;
	char msdos_name[MSDOS_NAME];
	int ino,res;

	if (!dir) return -ENOENT;
	if ((res = msdos_format_name(MSDOS_SB(dir->i_sb)->name_check,name,len,
	    msdos_name,0)) < 0) {
		iput(dir);
		return res;
	}
	lock_creation();
	if (msdos_scan(dir,msdos_name,&bh,&de,&ino) >= 0) {
		unlock_creation();
		brelse(bh);
		iput(dir);
		return -EEXIST;
 	}
	res = msdos_create_entry(dir,msdos_name,S_ISDIR(mode),result);
	unlock_creation();
	iput(dir);
	return res;
}


#ifdef DEBUG

static void dump_fat(struct super_block *sb,int start)
{
	printk("[");
	while (start) {
		printk("%d ",start);
        	start = fat_access(sb,start,-1);
		if (!start) {
			printk("ERROR");
			break;
		}
		if (start == -1) break;
	}
	printk("]\n");
}

#endif


int msdos_mkdir(struct inode *dir,const char *name,int len,int mode)
{
	struct buffer_head *bh;
	struct msdos_dir_entry *de;
	struct inode *inode,*dot;
	char msdos_name[MSDOS_NAME];
	int ino,res;

	if ((res = msdos_format_name(MSDOS_SB(dir->i_sb)->name_check,name,len,
	    msdos_name,0)) < 0) {
		iput(dir);
		return res;
	}
	lock_creation();
	if (msdos_scan(dir,msdos_name,&bh,&de,&ino) >= 0) {
		unlock_creation();
		brelse(bh);
		iput(dir);
		return -EEXIST;
 	}
	if ((res = msdos_create_entry(dir,msdos_name,1,&inode)) < 0) {
		unlock_creation();
		iput(dir);
		return res;
	}
	dir->i_nlink++;
	inode->i_nlink = 2; /* no need to mark them dirty */
	MSDOS_I(inode)->i_busy = 1; /* prevent lookups */
	if ((res = msdos_add_cluster(inode)) < 0) goto mkdir_error;
	if ((res = msdos_create_entry(inode,MSDOS_DOT,1,&dot)) < 0)
		goto mkdir_error;
	dot->i_size = inode->i_size; /* doesn't grow in the 2nd create_entry */
	MSDOS_I(dot)->i_start = MSDOS_I(inode)->i_start;
	dot->i_nlink = inode->i_nlink;
	dot->i_dirt = 1;
	iput(dot);
	if ((res = msdos_create_entry(inode,MSDOS_DOTDOT,1,&dot)) < 0)
		goto mkdir_error;
	unlock_creation();
	dot->i_size = dir->i_size;
	MSDOS_I(dot)->i_start = MSDOS_I(dir)->i_start;
	dot->i_nlink = dir->i_nlink;
	dot->i_dirt = 1;
	MSDOS_I(inode)->i_busy = 0;
	iput(dot);
	iput(inode);
	iput(dir);
	return 0;
mkdir_error:
	iput(inode);
	if (msdos_rmdir(dir,name,len) < 0)
		fs_panic(dir->i_sb,"rmdir in mkdir failed");
	unlock_creation();
	return res;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av成人免费在线观看| 在线观看视频一区二区| 一区二区三区毛片| 日韩精品一区二| 一本大道久久a久久精品综合| 久久国产夜色精品鲁鲁99| 亚洲欧洲制服丝袜| 亚洲精品久久7777| 2020日本不卡一区二区视频| 欧美在线观看禁18| 不卡的av电影| 国产成人精品aa毛片| 久久99久国产精品黄毛片色诱| 一区二区三区在线视频免费观看| 国产欧美一区二区精品仙草咪| 日韩三级免费观看| 欧美亚一区二区| 91热门视频在线观看| 国产精品夜夜爽| 激情综合色播激情啊| 香港成人在线视频| 亚洲一区精品在线| 亚洲人精品一区| 国产精品福利影院| 一区免费观看视频| 国产精品国产三级国产a| 久久久777精品电影网影网| 日韩美女天天操| 日韩亚洲欧美一区| 日韩视频免费观看高清完整版 | 日韩一区二区电影网| 欧美日韩一区二区三区四区 | 在线免费视频一区二区| 色综合天天综合给合国产| 成人一级视频在线观看| 国产精品自在欧美一区| 国产福利一区在线观看| 国产成人8x视频一区二区| 国产一区二区伦理| 国产aⅴ精品一区二区三区色成熟| 国精品**一区二区三区在线蜜桃| 琪琪一区二区三区| 麻豆成人免费电影| 久久99精品一区二区三区三区| 首页国产欧美久久| 精品一区二区三区久久久| 国产最新精品免费| 国产成人精品影院| 99精品国产91久久久久久| 欧美综合久久久| 7777精品伊人久久久大香线蕉经典版下载 | 欧美一区二区三区成人| 欧美一二三区在线| 久久亚洲春色中文字幕久久久| 久久这里只有精品视频网| 国产婷婷色一区二区三区| 国产精品久久看| 首页国产丝袜综合| 免费在线观看一区| 国产精品一区二区在线看| 成人午夜视频在线观看| 91麻豆国产在线观看| 欧美精品一二三区| 久久这里只有精品6| 亚洲欧美日韩一区二区| 日日欢夜夜爽一区| 国产传媒一区在线| 91国偷自产一区二区三区观看| 3d动漫精品啪啪1区2区免费| 久久精品男人天堂av| 亚洲精品国产精华液| 麻豆精品蜜桃视频网站| 成人激情动漫在线观看| 精品视频1区2区3区| 久久亚洲一区二区三区四区| 亚洲视频一区二区在线| 另类小说图片综合网| 成人黄动漫网站免费app| 欧洲精品在线观看| 久久影院午夜论| 亚洲综合在线第一页| 韩国欧美国产一区| 欧美伊人精品成人久久综合97| 2021久久国产精品不只是精品| 亚洲欧美激情在线| 国产一区欧美二区| 欧美剧情片在线观看| 国产精品嫩草久久久久| 日韩高清在线不卡| 96av麻豆蜜桃一区二区| 精品欧美久久久| 一区二区三区av电影| 国产高清不卡一区| 777精品伊人久久久久大香线蕉| 国产精品丝袜一区| 久久精品国产亚洲a| 欧美亚洲综合另类| 日本一区二区视频在线观看| 日韩成人午夜电影| 日本韩国精品在线| 国产精品久久久久一区| 狠狠色伊人亚洲综合成人| 欧美偷拍一区二区| 国产精品免费看片| 精品在线亚洲视频| 在线精品视频免费播放| 国产精品国产自产拍高清av王其| 蜜臀久久久久久久| 欧美三级日韩三级| 亚洲视频狠狠干| 粉嫩av一区二区三区在线播放| 欧美成人欧美edvon| 三级在线观看一区二区| 91老师国产黑色丝袜在线| 国产欧美久久久精品影院| 国产综合久久久久久久久久久久| 69av一区二区三区| 亚洲成人免费在线| 欧美午夜理伦三级在线观看| 亚洲色欲色欲www| 99久久99久久免费精品蜜臀| 国产亚洲短视频| 国产91丝袜在线播放| 久久精品亚洲麻豆av一区二区| 美女网站在线免费欧美精品| 欧美放荡的少妇| 日韩激情中文字幕| 日韩欧美一区二区在线视频| 天天综合网天天综合色| 欧美色欧美亚洲另类二区| 韩国三级电影一区二区| 精品欧美久久久| 国产一区在线观看麻豆| 精品福利av导航| 国产一区视频网站| 国产色婷婷亚洲99精品小说| 粉嫩绯色av一区二区在线观看| 亚洲国产精品精华液2区45| 粉嫩高潮美女一区二区三区 | 一区在线中文字幕| 91在线云播放| 有码一区二区三区| 欧美性高清videossexo| 日韩高清欧美激情| 精品动漫一区二区三区在线观看| 九九视频精品免费| 国产亚洲精品精华液| 99精品久久99久久久久| 亚洲一区二区三区精品在线| 欧美狂野另类xxxxoooo| 久久精品国产免费| 欧美国产欧美综合| 色噜噜狠狠成人网p站| 丝袜国产日韩另类美女| 精品va天堂亚洲国产| 成人一区二区三区在线观看| 亚洲欧美日韩系列| 91精品婷婷国产综合久久性色| 精品一区二区三区视频在线观看| 国产性色一区二区| 在线免费视频一区二区| 麻豆国产91在线播放| 国产精品蜜臀av| 欧美军同video69gay| 国产美女视频91| 亚洲人午夜精品天堂一二香蕉| 欧美日韩视频不卡| 国产成人高清视频| 亚洲国产精品综合小说图片区| 欧美一区二区福利在线| 成人国产精品免费观看视频| 亚洲va在线va天堂| 国产香蕉久久精品综合网| 91天堂素人约啪| 久久狠狠亚洲综合| 亚洲美女偷拍久久| 精品国产乱码久久久久久牛牛 | 1024亚洲合集| 欧美精品一级二级| 成人自拍视频在线| 免费看日韩精品| 亚洲欧美日韩国产综合在线| 日韩欧美一区中文| 欧美在线观看一区| 国产成人精品aa毛片| 日韩不卡一区二区三区| 亚洲欧洲国产日韩| 精品国产电影一区二区| 91国产免费观看| 黄色日韩网站视频| 亚洲chinese男男1069| 国产精品女同互慰在线看| 欧美一区二区三区精品| 色网站国产精品| 国产成人夜色高潮福利影视| 日韩精品三区四区| 中文字幕乱码一区二区免费| 56国语精品自产拍在线观看| 91在线你懂得| 国产成人av资源|