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

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

?? dir.c

?? linux環境下基于FAT的文件系統的通用代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	loff_t cpos;	int count = 0;	bh = NULL;	cpos = 0;	while (fat_get_short_entry(dir, &cpos, &bh, &de) >= 0) {		if (de->attr & ATTR_DIR)			count++;	}	brelse(bh);	return count;}/* * Scans a directory for a given file (name points to its formatted name). * Returns an error code or zero. */int fat_scan(struct inode *dir, const unsigned char *name,	     struct fat_slot_info *sinfo){	struct super_block *sb = dir->i_sb;	sinfo->slot_off = 0;	sinfo->bh = NULL;	while (fat_get_short_entry(dir, &sinfo->slot_off, &sinfo->bh,				   &sinfo->de) >= 0) {		if (!strncmp(sinfo->de->name, name, MSDOS_NAME)) {			sinfo->slot_off -= sizeof(*sinfo->de);			sinfo->nr_slots = 1;			sinfo->i_pos = fat_make_i_pos(sb, sinfo->bh, sinfo->de);			return 0;		}	}	return -ENOENT;}EXPORT_SYMBOL_GPL(fat_scan);static int __fat_remove_entries(struct inode *dir, loff_t pos, int nr_slots){	struct super_block *sb = dir->i_sb;	struct buffer_head *bh;	struct msdos_dir_entry *de, *endp;	int err = 0, orig_slots;	while (nr_slots) {		bh = NULL;		if (fat_get_entry(dir, &pos, &bh, &de) < 0) {			err = -EIO;			break;		}		orig_slots = nr_slots;		endp = (struct msdos_dir_entry *)(bh->b_data + sb->s_blocksize);		while (nr_slots && de < endp) {			de->name[0] = DELETED_FLAG;			de++;			nr_slots--;		}		mark_buffer_dirty(bh);		if (IS_DIRSYNC(dir))			err = sync_dirty_buffer(bh);		brelse(bh);		if (err)			break;		/* pos is *next* de's position, so this does `- sizeof(de)' */		pos += ((orig_slots - nr_slots) * sizeof(*de)) - sizeof(*de);	}	return err;}int fat_remove_entries(struct inode *dir, struct fat_slot_info *sinfo){	struct msdos_dir_entry *de;	struct buffer_head *bh;	int err = 0, nr_slots;	/*	 * First stage: Remove the shortname. By this, the directory	 * entry is removed.	 */	nr_slots = sinfo->nr_slots;	de = sinfo->de;	sinfo->de = NULL;	bh = sinfo->bh;	sinfo->bh = NULL;	while (nr_slots && de >= (struct msdos_dir_entry *)bh->b_data) {		de->name[0] = DELETED_FLAG;		de--;		nr_slots--;	}	mark_buffer_dirty(bh);	if (IS_DIRSYNC(dir))		err = sync_dirty_buffer(bh);	brelse(bh);	if (err)		return err;	dir->i_version++;	if (nr_slots) {		/*		 * Second stage: remove the remaining longname slots.		 * (This directory entry is already removed, and so return		 * the success)		 */		err = __fat_remove_entries(dir, sinfo->slot_off, nr_slots);		if (err) {			printk(KERN_WARNING			       "FAT: Couldn't remove the long name slots\n");		}	}	dir->i_mtime = dir->i_atime = CURRENT_TIME_SEC;	if (IS_DIRSYNC(dir))		(void)fat_sync_inode(dir);	else		mark_inode_dirty(dir);	return 0;}EXPORT_SYMBOL_GPL(fat_remove_entries);static int fat_zeroed_cluster(struct inode *dir, sector_t blknr, int nr_used,			      struct buffer_head **bhs, int nr_bhs){	struct super_block *sb = dir->i_sb;	sector_t last_blknr = blknr + MSDOS_SB(sb)->sec_per_clus;	int err, i, n;	/* Zeroing the unused blocks on this cluster */	blknr += nr_used;	n = nr_used;	while (blknr < last_blknr) {		bhs[n] = sb_getblk(sb, blknr);		if (!bhs[n]) {			err = -ENOMEM;			goto error;		}		memset(bhs[n]->b_data, 0, sb->s_blocksize);		set_buffer_uptodate(bhs[n]);		mark_buffer_dirty(bhs[n]);		n++;		blknr++;		if (n == nr_bhs) {			if (IS_DIRSYNC(dir)) {				err = fat_sync_bhs(bhs, n);				if (err)					goto error;			}			for (i = 0; i < n; i++)				brelse(bhs[i]);			n = 0;		}	}	if (IS_DIRSYNC(dir)) {		err = fat_sync_bhs(bhs, n);		if (err)			goto error;	}	for (i = 0; i < n; i++)		brelse(bhs[i]);	return 0;error:	for (i = 0; i < n; i++)		bforget(bhs[i]);	return err;}int fat_alloc_new_dir(struct inode *dir, struct timespec *ts){	struct super_block *sb = dir->i_sb;	struct msdos_sb_info *sbi = MSDOS_SB(sb);	struct buffer_head *bhs[MAX_BUF_PER_PAGE];	struct msdos_dir_entry *de;	sector_t blknr;	__le16 date, time;	u8 time_cs;	int err, cluster;	err = fat_alloc_clusters(dir, &cluster, 1);	if (err)		goto error;	blknr = fat_clus_to_blknr(sbi, cluster);	bhs[0] = sb_getblk(sb, blknr);	if (!bhs[0]) {		err = -ENOMEM;		goto error_free;	}	fat_time_unix2fat(sbi, ts, &time, &date, &time_cs);	de = (struct msdos_dir_entry *)bhs[0]->b_data;	/* filling the new directory slots ("." and ".." entries) */	memcpy(de[0].name, MSDOS_DOT, MSDOS_NAME);	memcpy(de[1].name, MSDOS_DOTDOT, MSDOS_NAME);	de->attr = de[1].attr = ATTR_DIR;	de[0].lcase = de[1].lcase = 0;	de[0].time = de[1].time = time;	de[0].date = de[1].date = date;	if (sbi->options.isvfat) {		/* extra timestamps */		de[0].ctime = de[1].ctime = time;		de[0].ctime_cs = de[1].ctime_cs = time_cs;		de[0].adate = de[0].cdate = de[1].adate = de[1].cdate = date;	} else {		de[0].ctime = de[1].ctime = 0;		de[0].ctime_cs = de[1].ctime_cs = 0;		de[0].adate = de[0].cdate = de[1].adate = de[1].cdate = 0;	}	de[0].start = cpu_to_le16(cluster);	de[0].starthi = cpu_to_le16(cluster >> 16);	de[1].start = cpu_to_le16(MSDOS_I(dir)->i_logstart);	de[1].starthi = cpu_to_le16(MSDOS_I(dir)->i_logstart >> 16);	de[0].size = de[1].size = 0;	memset(de + 2, 0, sb->s_blocksize - 2 * sizeof(*de));	set_buffer_uptodate(bhs[0]);	mark_buffer_dirty(bhs[0]);	err = fat_zeroed_cluster(dir, blknr, 1, bhs, MAX_BUF_PER_PAGE);	if (err)		goto error_free;	return cluster;error_free:	fat_free_clusters(dir, cluster);error:	return err;}EXPORT_SYMBOL_GPL(fat_alloc_new_dir);static int fat_add_new_entries(struct inode *dir, void *slots, int nr_slots,			       int *nr_cluster, struct msdos_dir_entry **de,			       struct buffer_head **bh, loff_t *i_pos){	struct super_block *sb = dir->i_sb;	struct msdos_sb_info *sbi = MSDOS_SB(sb);	struct buffer_head *bhs[MAX_BUF_PER_PAGE];	sector_t blknr, start_blknr, last_blknr;	unsigned long size, copy;	int err, i, n, offset, cluster[2];	/*	 * The minimum cluster size is 512bytes, and maximum entry	 * size is 32*slots (672bytes).  So, iff the cluster size is	 * 512bytes, we may need two clusters.	 */	size = nr_slots * sizeof(struct msdos_dir_entry);	*nr_cluster = (size + (sbi->cluster_size - 1)) >> sbi->cluster_bits;	BUG_ON(*nr_cluster > 2);	err = fat_alloc_clusters(dir, cluster, *nr_cluster);	if (err)		goto error;	/*	 * First stage: Fill the directory entry.  NOTE: This cluster	 * is not referenced from any inode yet, so updates order is	 * not important.	 */	i = n = copy = 0;	do {		start_blknr = blknr = fat_clus_to_blknr(sbi, cluster[i]);		last_blknr = start_blknr + sbi->sec_per_clus;		while (blknr < last_blknr) {			bhs[n] = sb_getblk(sb, blknr);			if (!bhs[n]) {				err = -ENOMEM;				goto error_nomem;			}			/* fill the directory entry */			copy = min(size, sb->s_blocksize);			memcpy(bhs[n]->b_data, slots, copy);			slots += copy;			size -= copy;			set_buffer_uptodate(bhs[n]);			mark_buffer_dirty(bhs[n]);			if (!size)				break;			n++;			blknr++;		}	} while (++i < *nr_cluster);	memset(bhs[n]->b_data + copy, 0, sb->s_blocksize - copy);	offset = copy - sizeof(struct msdos_dir_entry);	get_bh(bhs[n]);	*bh = bhs[n];	*de = (struct msdos_dir_entry *)((*bh)->b_data + offset);	*i_pos = fat_make_i_pos(sb, *bh, *de);	/* Second stage: clear the rest of cluster, and write outs */	err = fat_zeroed_cluster(dir, start_blknr, ++n, bhs, MAX_BUF_PER_PAGE);	if (err)		goto error_free;	return cluster[0];error_free:	brelse(*bh);	*bh = NULL;	n = 0;error_nomem:	for (i = 0; i < n; i++)		bforget(bhs[i]);	fat_free_clusters(dir, cluster[0]);error:	return err;}int fat_add_entries(struct inode *dir, void *slots, int nr_slots,		    struct fat_slot_info *sinfo){	struct super_block *sb = dir->i_sb;	struct msdos_sb_info *sbi = MSDOS_SB(sb);	struct buffer_head *bh, *prev, *bhs[3]; /* 32*slots (672bytes) */	struct msdos_dir_entry *de;	int err, free_slots, i, nr_bhs;	loff_t pos, i_pos;	sinfo->nr_slots = nr_slots;	/* First stage: search free direcotry entries */	free_slots = nr_bhs = 0;	bh = prev = NULL;	pos = 0;	err = -ENOSPC;	while (fat_get_entry(dir, &pos, &bh, &de) > -1) {		/* check the maximum size of directory */		if (pos >= FAT_MAX_DIR_SIZE)			goto error;		if (IS_FREE(de->name)) {			if (prev != bh) {				get_bh(bh);				bhs[nr_bhs] = prev = bh;				nr_bhs++;			}			free_slots++;			if (free_slots == nr_slots)				goto found;		} else {			for (i = 0; i < nr_bhs; i++)				brelse(bhs[i]);			prev = NULL;			free_slots = nr_bhs = 0;		}	}	if (dir->i_ino == MSDOS_ROOT_INO) {		if (sbi->fat_bits != 32)			goto error;	} else if (MSDOS_I(dir)->i_start == 0) {		printk(KERN_ERR "FAT: Corrupted directory (i_pos %lld)\n",		       MSDOS_I(dir)->i_pos);		err = -EIO;		goto error;	}found:	err = 0;	pos -= free_slots * sizeof(*de);	nr_slots -= free_slots;	if (free_slots) {		/*		 * Second stage: filling the free entries with new entries.		 * NOTE: If this slots has shortname, first, we write		 * the long name slots, then write the short name.		 */		int size = free_slots * sizeof(*de);		int offset = pos & (sb->s_blocksize - 1);		int long_bhs = nr_bhs - (nr_slots == 0);		/* Fill the long name slots. */		for (i = 0; i < long_bhs; i++) {			int copy = min_t(int, sb->s_blocksize - offset, size);			memcpy(bhs[i]->b_data + offset, slots, copy);			mark_buffer_dirty(bhs[i]);			offset = 0;			slots += copy;			size -= copy;		}		if (long_bhs && IS_DIRSYNC(dir))			err = fat_sync_bhs(bhs, long_bhs);		if (!err && i < nr_bhs) {			/* Fill the short name slot. */			int copy = min_t(int, sb->s_blocksize - offset, size);			memcpy(bhs[i]->b_data + offset, slots, copy);			mark_buffer_dirty(bhs[i]);			if (IS_DIRSYNC(dir))				err = sync_dirty_buffer(bhs[i]);		}		for (i = 0; i < nr_bhs; i++)			brelse(bhs[i]);		if (err)			goto error_remove;	}	if (nr_slots) {		int cluster, nr_cluster;		/*		 * Third stage: allocate the cluster for new entries.		 * And initialize the cluster with new entries, then		 * add the cluster to dir.		 */		cluster = fat_add_new_entries(dir, slots, nr_slots, &nr_cluster,					      &de, &bh, &i_pos);		if (cluster < 0) {			err = cluster;			goto error_remove;		}		err = fat_chain_add(dir, cluster, nr_cluster);		if (err) {			fat_free_clusters(dir, cluster);			goto error_remove;		}		if (dir->i_size & (sbi->cluster_size - 1)) {			fat_fs_panic(sb, "Odd directory size");			dir->i_size = (dir->i_size + sbi->cluster_size - 1)				& ~((loff_t)sbi->cluster_size - 1);		}		dir->i_size += nr_cluster << sbi->cluster_bits;		MSDOS_I(dir)->mmu_private += nr_cluster << sbi->cluster_bits;	}	sinfo->slot_off = pos;	sinfo->de = de;	sinfo->bh = bh;	sinfo->i_pos = fat_make_i_pos(sb, sinfo->bh, sinfo->de);	return 0;error:	brelse(bh);	for (i = 0; i < nr_bhs; i++)		brelse(bhs[i]);	return err;error_remove:	brelse(bh);	if (free_slots)		__fat_remove_entries(dir, pos, free_slots);	return err;}EXPORT_SYMBOL_GPL(fat_add_entries);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
337p亚洲精品色噜噜噜| 亚洲美女电影在线| 欧美精品第一页| 欧美手机在线视频| 欧美性极品少妇| 在线视频观看一区| 欧美在线视频你懂得| 欧洲亚洲国产日韩| 欧美日韩精品二区第二页| 欧美日韩国产123区| 欧美精选一区二区| 欧美精品18+| 欧美一级艳片视频免费观看| 欧美一级在线观看| 日韩美女天天操| 国产欧美综合色| 中文字幕一区在线观看| 一区二区三区在线看| 亚洲一卡二卡三卡四卡五卡| 亚洲国产成人91porn| 日本中文字幕一区| 国模无码大尺度一区二区三区| 国产成人aaaa| 一本大道av伊人久久综合| 欧美三级电影在线观看| 日韩欧美中文一区二区| 久久久久久久久久久久久久久99 | 亚洲三级电影全部在线观看高清| 国产精品久久久久三级| 亚洲一区欧美一区| 美女mm1313爽爽久久久蜜臀| 国产aⅴ综合色| 色婷婷av一区二区三区大白胸 | 1024成人网| 亚洲成人精品一区| 麻豆精品视频在线观看| 不卡一区在线观看| 欧美午夜电影一区| 精品国产sm最大网站免费看| 国产精品久久三区| 亚洲va欧美va天堂v国产综合| 老司机精品视频线观看86| youjizz久久| 欧美一区二区三区性视频| 久久久国产一区二区三区四区小说| 综合久久给合久久狠狠狠97色| 亚洲国产成人av| 国产91精品免费| 在线播放中文一区| 国产精品第一页第二页第三页| 午夜不卡av在线| 粉嫩蜜臀av国产精品网站| 欧美乱妇20p| 国产精品久久久久久亚洲毛片| 亚洲午夜精品一区二区三区他趣| 国产精品1区2区| 欧美日韩一卡二卡三卡| 国产精品色婷婷| 青青草97国产精品免费观看 | 91激情五月电影| 精品国产a毛片| 亚洲成在人线免费| 成人午夜私人影院| 91精品啪在线观看国产60岁| 亚洲另类春色国产| 国产成人精品影视| 欧美大片日本大片免费观看| 亚洲一区免费视频| 91玉足脚交白嫩脚丫在线播放| 欧美精品一区二区三区很污很色的| 亚洲欧美一区二区三区极速播放| 国产一区二区三区四区在线观看| 欧美性猛片xxxx免费看久爱| 久久久91精品国产一区二区三区| 午夜久久久久久久久久一区二区| 北岛玲一区二区三区四区| 精品久久国产老人久久综合| 亚洲美女淫视频| av中文字幕一区| 国产日韩精品一区| 国产真实乱子伦精品视频| 欧美日韩久久久久久| 亚洲欧美日韩一区二区三区在线观看| 国产精品91一区二区| 精品国产污网站| 免费人成在线不卡| 欧美另类高清zo欧美| 亚洲一区二区欧美| 色综合天天综合在线视频| 国产精品嫩草久久久久| 国产成人99久久亚洲综合精品| 久久综合五月天婷婷伊人| 日本视频一区二区三区| 91精品在线观看入口| 五月激情六月综合| 91超碰这里只有精品国产| 亚洲电影一级黄| 欧美日韩亚洲国产综合| 亚洲主播在线观看| 欧美视频在线播放| 婷婷综合五月天| 91.com在线观看| 日av在线不卡| 日韩精品一区二区三区在线播放| 日本一道高清亚洲日美韩| 日韩午夜激情av| 久久er99精品| 久久久三级国产网站| 国产成人亚洲综合a∨婷婷| 久久久久久久综合色一本| 国产美女在线观看一区| 国产午夜亚洲精品不卡| 成人午夜电影小说| 国产精品福利一区| 91国产丝袜在线播放| 伊人开心综合网| 欧美福利电影网| 精品无人码麻豆乱码1区2区| 国产调教视频一区| 97se亚洲国产综合在线| 亚洲精品成人精品456| 欧美午夜精品电影| 麻豆精品国产传媒mv男同| 国产亚洲制服色| 色综合网色综合| 婷婷丁香久久五月婷婷| 精品国精品自拍自在线| 国产不卡视频一区| 一区二区三区欧美| 日韩一区二区电影在线| 国产精品亚洲专一区二区三区| 国产色爱av资源综合区| 97久久超碰国产精品| 亚洲综合激情网| 精品电影一区二区| 暴力调教一区二区三区| 天堂成人免费av电影一区| 精品粉嫩超白一线天av| 99久久99久久精品免费观看| 午夜一区二区三区在线观看| 精品999久久久| 97精品国产露脸对白| 丝袜国产日韩另类美女| 久久久久久久久免费| 欧美亚男人的天堂| 黄色精品一二区| 一区二区三区不卡视频| 精品久久久久久久人人人人传媒| 成人国产精品免费| 免费高清不卡av| 亚洲同性gay激情无套| 欧美一区二区不卡视频| 成人免费高清视频在线观看| 日韩成人免费电影| 国产精品久久精品日日| 日韩欧美精品三级| 99久久久精品| 韩国一区二区视频| 亚洲va国产va欧美va观看| 欧美激情综合五月色丁香 | 亚洲欧美自拍偷拍| 日韩美女视频在线| 欧美中文字幕一区二区三区 | 99久久久久免费精品国产| 蜜臀久久99精品久久久画质超高清| 成人免费在线播放视频| 欧美第一区第二区| 精品视频资源站| 91免费版pro下载短视频| 久久99精品一区二区三区三区| 亚洲欧洲制服丝袜| 欧美激情在线观看视频免费| 91精品视频网| 欧美吞精做爰啪啪高潮| 成人黄色av网站在线| 精品在线观看视频| 石原莉奈在线亚洲三区| 亚洲久本草在线中文字幕| 国产偷国产偷精品高清尤物 | 国产精品乱码一区二区三区软件 | 91免费观看视频| 国产精品资源在线看| 秋霞午夜av一区二区三区| 亚洲精品成人天堂一二三| 国产精品久久久久久久浪潮网站| 欧美大片一区二区| 日韩一区二区三区视频在线观看| 欧美午夜不卡视频| 91极品美女在线| 91视频com| 91日韩精品一区| 波波电影院一区二区三区| 国产不卡视频一区| 国产成人自拍高清视频在线免费播放| 免费成人在线网站| 蜜臀av国产精品久久久久| 免费在线看一区| 视频一区在线播放| 日本午夜精品视频在线观看| 日韩国产高清影视|