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

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

?? apfs_fat32_access.c

?? 一個可以在開發板上運行的fat文件系統,是在windows平臺下開發的,是學習文件系統的好幫手
?? C
字號:
//-----------------------------------------------------------------------------
// This file is part of AP.FS
// AP.FS is a FAT32 file system face to the embedded system,It's target is to
// support the portable storage device such as SD Card,TF Card or USB Disc 's
// file system.
// please login www.another-prj.com to get more details.
//																caiyuqing
//																2008-1-8
//-----------------------------------------------------------------------------
#include "apfs_fat32_definitions.h"
#include "apfs_fat32_access.h"
#include "apfs_fat32_base.h"
#include "apfs_fat32_opts.h"
#include "apfs_fat32_table.h"
// fats_internal_struct is a global symbol
struct fats_internal fats_internal_struct;
extern struct fat32 fat32_struct;
extern struct sector_buffer sector_buffer;
//-----------------------------------------------------------------------------
// apfs_init_fats_internal: init the fats_internal_struct
//-----------------------------------------------------------------------------
void apfs_init_fats_internal()
{
	fats_internal_struct.sector_currently_loaded = 0xFFFFFFFF;
	fats_internal_struct.next_free_cluster = 0xFFFFFFFF;
}
//-----------------------------------------------------------------------------
// apfs_fat32_sector_reader: From the provided startcluster and sector offset
// Returns True if success, returns False if not (including if read out of range)
//-----------------------------------------------------------------------------
BOOL apfs_fat32_sector_reader(UINT32 start_cluster, UINT32 offset)
{
	UINT32 sector_to_read = 0;
	UINT32 cluster_to_read = 0;
	UINT32 cluster_chain = 0;
	UINT32 i;
	UINT32 lba;

	// Set start of cluster chain to initial value
	cluster_chain = start_cluster;

	// Find parameters
	cluster_to_read = offset / fat32_struct.sectors_per_cluster;	  
	sector_to_read = offset % fat32_struct.sectors_per_cluster;

	// Follow chain to find cluster to read
	for(i=0; i<cluster_to_read; i++)
	{
		cluster_chain = apfs_fat32_find_next_cluster(cluster_chain);
	}

	// If end of cluster chain then return false
	if(cluster_chain == 0xFFFFFFFF)
	{
		return FALSE;
	}

	// Calculate sector address
	lba = apfs_fat32_lba_of_cluster(cluster_chain) + sector_to_read;

	// Else read sector if not already loaded
	if(lba != fats_internal_struct.sector_currently_loaded)
	{
		fats_internal_struct.sector_currently_loaded = lba;
		return apfs_fat32_read_sector(fats_internal_struct.sector_currently_loaded, 
							 fats_internal_struct.current_sector);
	}
	else
	{
		return TRUE;
	}
}
//-----------------------------------------------------------------------------
// apfs_fat32_sector_writer: Write to the provided startcluster and sector offset
// Returns True if success, returns False if not 
//-----------------------------------------------------------------------------
BOOL apfs_fat32_sector_writer(UINT32 start_cluster, UINT32 offset)
{
 	UINT32 sector_to_write = 0;
	UINT32 cluster_to_write = 0;
	UINT32 cluster_chain = 0;
	UINT32 last_cluster_chain = 0xFFFFFFFF;
	UINT32 i;

	// Set start of cluster chain to initial value
	cluster_chain = start_cluster;

	// Find parameters
	cluster_to_write = offset / fat32_struct.sectors_per_cluster;	  
	sector_to_write = offset % fat32_struct.sectors_per_cluster;

	// Follow chain to find cluster to read
	for(i=0; i<cluster_to_write; i++)
	{
		// Find next link in the chain
		last_cluster_chain = cluster_chain;
  		cluster_chain = apfs_fat32_find_next_cluster(cluster_chain);

		// Dont keep following a dead end
		if(cluster_chain == 0xFFFFFFFF)
		{
			break;
		}
	}

	// If end of cluster chain 
	if(cluster_chain == 0xFFFFFFFF) 
	{
		// Add another cluster to the last good cluster chain
		if(!apfs_fat32_add_free_space_to_chain(&last_cluster_chain))
		{
			return FALSE;
		}

		cluster_chain = last_cluster_chain;
	}

	// Calculate write address
	fats_internal_struct.sector_currently_loaded = 
			apfs_fat32_lba_of_cluster(cluster_chain) + sector_to_write;

	// Write to disk
	return apfs_fat32_write_sector(fats_internal_struct.sector_currently_loaded, 
							fats_internal_struct.current_sector);
}

//-----------------------------------------------------------------------------
// apfs_fat32_clean_cluster: Clean a cluster
//-----------------------------------------------------------------------------
#define FAT32_CLEAN_SECTOR(start_cluster, offset) \
UINT32 sector = apfs_fat32_lba_of_cluster(start_cluster) + offset;\
apfs_fat32_write_sector(sector, sector_buffer.zero_buf);

BOOL apfs_fat32_clean_cluster(UINT32 cluster)
{
	int i ;
	for( i = 0; i < fat32_struct.sectors_per_cluster; i++ )
	{
		FAT32_CLEAN_SECTOR(cluster, i);
	}
	
	return TRUE;
}
//-----------------------------------------------------------------------------
// apfs_fat32_get_root_cluster: Get the root dir cluster
//-----------------------------------------------------------------------------
UINT32 apfs_fat32_get_root_cluster()
{
	return fat32_struct.rootdir_first_cluster;
}
//-----------------------------------------------------------------------------
// apfs_fat32_get_file_entry: Find the file entry for a filename
//-----------------------------------------------------------------------------
UINT32 apfs_fat32_get_file_entry(UINT32 cluster, char *name_to_find, 
					struct fat32_short_entry *sf_entry)
{
	BYTE item=0;
	UINT16 record_offset = 0;
	BYTE i=0;
	int x=0;
	char long_file_name[MAX_LONG_FILENAME];
	char short_file_name[13];
	struct fat32_short_entry *entry;

	// Clear the long file name cache
	apfs_fat32_clear_entry_cache(TRUE);

	while(TRUE)
	{
		// Read sector
		if(apfs_fat32_sector_reader(cluster, x++))
		{
			// Analyse Sector
			for(item = 0; item <= 15; item++)
			{
				record_offset = (32 * item);
				// Overlay directory entry over buffer
				entry = (struct fat32_short_entry*)(fats_internal_struct.current_sector + 
									record_offset);

				// This entry is the last one in the cluster
				if(apfs_fat32_entry_is_last(entry))
				{
					apfs_fat32_clear_entry_cache(FALSE);
					return FALSE;
				}
				// This entry is empty
				else if(apfs_fat32_entry_is_empty(entry))
				{
					apfs_fat32_clear_entry_cache(FALSE);
					continue;
				}
				// This entry is a volume id
				else if(apfs_fat32_entry_is_volume_id(entry))
				{
					apfs_fat32_clear_entry_cache(FALSE);
					continue;
				}
				// This is a single short entry
				else if(apfs_fat32_entry_is_single_short(entry))
				{
					memset(short_file_name, '\0', sizeof(short_file_name));
					// Copy the name in the short entry to short_file_name 
					apfs_fat32_copy_short_name(short_file_name, entry->name);
					// Compare names to see if they match
					if(apfs_fat32_file_string_compare(short_file_name, name_to_find))
					{
						memcpy(sf_entry, entry, sizeof(struct fat32_short_entry));
						return TRUE;
					}
					apfs_fat32_clear_entry_cache(FALSE);
				}
				// This is a long entry
				else if(apfs_fat32_entry_is_long(entry))
				{
					apfs_fat32_fill_entry_cache(entry);
				}
				// This is a short entry,it is part of an entry set
				else if(apfs_fat32_entry_is_short_with_long(entry) )
				{
					apfs_fat32_dump_entry_cache((BYTE*)long_file_name);
					// Compare names to see if they match
					if(apfs_fat32_file_string_compare(long_file_name, name_to_find))
					{
						memcpy(sf_entry, entry, sizeof(struct fat32_short_entry));
						return TRUE;
					}
					apfs_fat32_clear_entry_cache(FALSE);
				}
			}
		}
		else
		{
			break;
		}
	}

	return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一二三区| 亚洲欧洲日韩一区二区三区| 麻豆极品一区二区三区| 精品国产乱码91久久久久久网站| 精品亚洲成a人| 久久免费精品国产久精品久久久久 | 首页亚洲欧美制服丝腿| 国产精品女主播在线观看| 93久久精品日日躁夜夜躁欧美| 国产精品丝袜在线| 欧美性三三影院| 日本vs亚洲vs韩国一区三区| 国产精品无圣光一区二区| 日韩亚洲欧美高清| 在线播放日韩导航| 成人免费av资源| 在线观看av不卡| 欧美一区二区在线免费播放| 51精品秘密在线观看| 欧美精品在线观看一区二区| 国产精品视频一二三| 国产精品美女久久久久久久久久久 | 亚洲一区视频在线观看视频| 色欧美日韩亚洲| 亚洲自拍另类综合| 欧美一级国产精品| 国产精品99久久久久久似苏梦涵| 中文字幕在线一区二区三区| 在线免费av一区| 久久99精品久久久久久动态图 | 麻豆精品新av中文字幕| 国产午夜精品一区二区三区嫩草| 91麻豆高清视频| 久久99久久久久| 国产精品福利一区| 欧美一区二区精品久久911| 国产很黄免费观看久久| 亚洲愉拍自拍另类高清精品| 精品精品欲导航| 91视频在线观看免费| 美女视频免费一区| 亚洲久草在线视频| 久久亚洲精华国产精华液 | 日韩欧美国产1| 99国产精品久久久久久久久久| 免费视频一区二区| 亚洲精品国产成人久久av盗摄| 欧美成人高清电影在线| 在线观看免费视频综合| 国产精品 欧美精品| 五月天久久比比资源色| 亚洲色图欧美激情| 国产午夜精品久久| 26uuu精品一区二区| 宅男噜噜噜66一区二区66| 93久久精品日日躁夜夜躁欧美| 国产精品一线二线三线| 日韩在线卡一卡二| 亚洲国产精品久久不卡毛片| 中文一区二区完整视频在线观看| 日韩欧美高清dvd碟片| 欧美一二三区精品| 3d动漫精品啪啪一区二区竹菊| 欧美在线小视频| 色婷婷亚洲一区二区三区| 国产成人在线免费| 国产精品一区二区久久精品爱涩 | 国产成人免费视频一区| 日本午夜一本久久久综合| 亚洲伊人伊色伊影伊综合网| 国产精品美女久久福利网站| 久久久久亚洲综合| 久久综合九色综合欧美98| 精品久久久久久久久久久久包黑料| 欧美剧情电影在线观看完整版免费励志电影 | 欧美一区二区三区思思人| 在线观看中文字幕不卡| 欧洲精品一区二区三区在线观看| 色综合天天在线| 色婷婷av一区二区三区之一色屋| 99免费精品视频| 91在线视频播放| 色噜噜狠狠色综合中国| 91尤物视频在线观看| 91网站在线播放| 色综合一区二区| 欧美三级中文字| 91精品国产黑色紧身裤美女| 欧美欧美欧美欧美| 日韩视频在线观看一区二区| 精品久久久久久久久久久院品网| 久久综合色之久久综合| 久久久国产精品午夜一区ai换脸| 欧美mv日韩mv国产网站| 国产亚洲女人久久久久毛片| 欧美激情艳妇裸体舞| 日本一区二区三区在线不卡| 国产精品成人一区二区三区夜夜夜| 国产精品久久久久久久久免费桃花 | 日韩欧美一区二区三区在线| 精品日产卡一卡二卡麻豆| 久久久亚洲午夜电影| 中文字幕一区二区三区蜜月| 一区二区三区日韩在线观看| 午夜精品久久久| 国产一区二区久久| 久草中文综合在线| 久久国产精品色| 久久久精品一品道一区| 中文字幕一区二区三区精华液 | 欧美一级免费大片| 色成年激情久久综合| 97精品电影院| 99久久免费国产| 成人爱爱电影网址| 99久久er热在这里只有精品15| 精品亚洲欧美一区| 激情小说亚洲一区| 激情成人综合网| 久久成人免费电影| 国产一区二区在线视频| 国产一区91精品张津瑜| 国产经典欧美精品| 成人听书哪个软件好| 成人午夜电影小说| 色综合久久久久久久久| 色噜噜狠狠色综合中国| 精品视频一区二区三区免费| 欧美日产国产精品| 欧美一区二区三区男人的天堂| 欧美精品xxxxbbbb| 精品国产3级a| 国产精品欧美久久久久无广告| 中文字幕日韩一区| 亚洲一区二区三区视频在线播放 | 欧美久久高跟鞋激| 日韩一区二区三区视频在线| 精品久久久久久亚洲综合网| 国产精品网站在线播放| 亚洲免费观看在线视频| 日韩精品91亚洲二区在线观看| 九九视频精品免费| 91农村精品一区二区在线| 欧美日本国产视频| 精品日韩99亚洲| 亚洲欧美日韩久久精品| 亚洲国产欧美日韩另类综合| 免费精品视频在线| 成人午夜激情视频| 欧美一区二区在线不卡| 国产欧美精品一区二区三区四区| 亚洲国产视频网站| 成人小视频在线| 欧美日韩国产一二三| 国产人伦精品一区二区| 一级中文字幕一区二区| 久久成人免费电影| 色婷婷亚洲综合| 欧美综合一区二区| 欧美一级欧美三级| 欧美电视剧免费观看| 亚洲人成在线播放网站岛国| 丝袜诱惑制服诱惑色一区在线观看| 日韩电影在线免费观看| 91视频一区二区三区| 91精品国产综合久久久久| 久久久精品天堂| 亚洲精品国产精华液| 成人性生交大合| 欧美日韩mp4| 欧美激情一二三区| 亚洲va韩国va欧美va| 国产一区在线看| 欧美三级中文字幕| 国产欧美一区二区三区网站| 日韩av在线发布| aa级大片欧美| 欧美精品v日韩精品v韩国精品v| 国产精品久久久久毛片软件| 精品亚洲aⅴ乱码一区二区三区| 99久久精品国产麻豆演员表| 精品电影一区二区| 亚洲香肠在线观看| 色妹子一区二区| 欧美激情一区二区三区蜜桃视频| 日韩不卡一区二区三区| 欧美丝袜丝nylons| 中文字幕一区免费在线观看| 韩国av一区二区三区四区 | 国内精品久久久久影院薰衣草| 日本乱人伦aⅴ精品| 国产午夜亚洲精品理论片色戒 | 日本一区二区三区在线不卡| 久久99精品国产麻豆不卡| 99视频一区二区三区| 亚洲欧洲成人精品av97| a级高清视频欧美日韩| 久久久久久久久久久久久夜| 国产成人自拍在线| 欧美大片一区二区三区|