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

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

?? ff.c

?? FatFs/Tiny-FatFs Module Source Files R0.07
?? C
?? 第 1 頁 / 共 5 頁
字號:
			if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }	/* Disk error? */
			res = put_cluster(fs, clst, 0);		/* Mark the cluster "empty" */
			if (res != FR_OK) break;
			if (fs->free_clust != 0xFFFFFFFF) {	/* Update FSInfo */
				fs->free_clust++;
				fs->fsi_flag = 1;
			}
			clst = nxt;	/* Next cluster */
		}
	}

	return res;
}
#endif




/*-----------------------------------------------------------------------*/
/* Stretch or create a cluster chain                                     */
/*-----------------------------------------------------------------------*/
#if !_FS_READONLY
static
DWORD create_chain (	/* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
	FATFS *fs,			/* File system object */
	DWORD clst			/* Cluster# to stretch. 0 means create a new chain. */
)
{
	DWORD cs, ncl, scl, mcl;


	mcl = fs->max_clust;
	if (clst == 0) {		/* Create new chain */
		scl = fs->last_clust;			/* Get suggested start point */
		if (scl == 0 || scl >= mcl) scl = 1;
	}
	else {					/* Stretch existing chain */
		cs = get_cluster(fs, clst);		/* Check the cluster status */
		if (cs < 2) return 1;			/* It is an invalid cluster */
		if (cs < mcl) return cs;		/* It is already followed by next cluster */
		scl = clst;
	}

	ncl = scl;				/* Start cluster */
	for (;;) {
		ncl++;							/* Next cluster */
		if (ncl >= mcl) {				/* Wrap around */
			ncl = 2;
			if (ncl > scl) return 0;	/* No free custer */
		}
		cs = get_cluster(fs, ncl);		/* Get the cluster status */
		if (cs == 0) break;				/* Found a free cluster */
		if (cs == 0xFFFFFFFF || cs == 1)/* An error occured */
			return cs;
		if (ncl == scl) return 0;		/* No free custer */
	}

	if (put_cluster(fs, ncl, 0x0FFFFFFF))	/* Mark the new cluster "in use" */
		return 0xFFFFFFFF;
	if (clst != 0) {						/* Link it to previous one if needed */
		if (put_cluster(fs, clst, ncl))
			return 0xFFFFFFFF;
	}

	fs->last_clust = ncl;				/* Update FSINFO */
	if (fs->free_clust != 0xFFFFFFFF) {
		fs->free_clust--;
		fs->fsi_flag = 1;
	}

	return ncl;		/* Return new cluster number */
}
#endif /* !_FS_READONLY */




/*-----------------------------------------------------------------------*/
/* Get sector# from cluster#                                             */
/*-----------------------------------------------------------------------*/

static
DWORD clust2sect (	/* !=0: sector number, 0: failed - invalid cluster# */
	FATFS *fs,		/* File system object */
	DWORD clst		/* Cluster# to be converted */
)
{
	clst -= 2;
	if (clst >= (fs->max_clust - 2)) return 0;		/* Invalid cluster# */
	return clst * fs->csize + fs->database;
}




/*-----------------------------------------------------------------------*/
/* Seek directory index                                                  */
/*-----------------------------------------------------------------------*/

static
FRESULT dir_seek (
	DIR *dj,		/* Pointer to directory object */
	WORD idx		/* Directory index number */
)
{
	DWORD clst;
	WORD ic;


	dj->index = idx;
	clst = dj->sclust;
	if (clst == 1 || clst >= dj->fs->max_clust)	/* Check start cluster range */
		return FR_INT_ERR;

	if (clst == 0) {	/* Static table */
		if (idx >= dj->fs->n_rootdir)		/* Index is out of range */
			return FR_INT_ERR;
		dj->sect = dj->fs->dirbase + idx / (SS(dj->fs) / 32);
	}
	else {				/* Dynamic table */
		ic = SS(dj->fs) / 32 * dj->fs->csize;	/* Indexes per cluster */
		while (idx >= ic) {	/* Follow cluster chain */
			clst = get_cluster(dj->fs, clst);			/* Get next cluster */
			if (clst == 0xFFFFFFFF) return FR_DISK_ERR;	/* Disk error */
			if (clst < 2 || clst >= dj->fs->max_clust)	/* Reached to end of table or int error */
				return FR_INT_ERR;
			idx -= ic;
		}
		dj->clust = clst;
		dj->sect = clust2sect(dj->fs, clst) + idx / (SS(dj->fs) / 32);
	}
	dj->dir = dj->fs->win + (idx % (SS(dj->fs) / 32)) * 32;

	return FR_OK;	/* Seek succeeded */
}




/*-----------------------------------------------------------------------*/
/* Move directory index next                                             */
/*-----------------------------------------------------------------------*/

static
FRESULT dir_next (	/* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not streach */
	DIR *dj,		/* Pointer to directory object */
	BOOL streach	/* FALSE: Do not streach table, TRUE: Streach table if needed */
)
{
	DWORD clst;
	WORD i;


	i = dj->index + 1;
	if (!i || !dj->sect)	/* Report EOT when index has reached 65535 */
		return FR_NO_FILE;

	if (!(i % (SS(dj->fs) / 32))) {	/* Sector changed? */
		dj->sect++;					/* Next sector */

		if (dj->sclust == 0) {	/* Static table */
			if (i >= dj->fs->n_rootdir)	/* Report EOT when end of table */
				return FR_NO_FILE;
		}
		else {					/* Dynamic table */
			if (((i / (SS(dj->fs) / 32)) & (dj->fs->csize - 1)) == 0) {	/* Cluster changed? */
				clst = get_cluster(dj->fs, dj->clust);			/* Get next cluster */
				if (clst <= 1) return FR_INT_ERR;
				if (clst == 0xFFFFFFFF) return FR_DISK_ERR;
				if (clst >= dj->fs->max_clust) {				/* When it reached end of dinamic table */
#if !_FS_READONLY
					BYTE c;
					if (!streach) return FR_NO_FILE;			/* When do not streach, report EOT */
					clst = create_chain(dj->fs, dj->clust);		/* Streach cluster chain */
					if (clst == 0) return FR_DENIED;			/* No free cluster */
					if (clst == 1) return FR_INT_ERR;
					if (clst == 0xFFFFFFFF) return FR_DISK_ERR;
					/* Clean-up streached table */
					if (move_window(dj->fs, 0)) return FR_DISK_ERR;	/* Flush active window */
					MemSet(dj->fs->win, 0, SS(fs));				/* Clear window buffer */
					dj->fs->winsect = clust2sect(dj->fs, clst);	/* Cluster start sector */
					for (c = 0; c < dj->fs->csize; c++) {		/* Fill the new cluster with 0 */
						dj->fs->wflag = 1;
						if (move_window(dj->fs, 0)) return FR_DISK_ERR;
						dj->fs->winsect++;
					}
					dj->fs->winsect -= c;						/* Rewind window address */
#else
					return FR_NO_FILE;			/* Report EOT */
#endif
				}
				dj->clust = clst;				/* Initialize data for new cluster */
				dj->sect = clust2sect(dj->fs, clst);
			}
		}
	}

	dj->index = i;
	dj->dir = dj->fs->win + (i % (SS(dj->fs) / 32)) * 32;

	return FR_OK;
}




/*-----------------------------------------------------------------------*/
/* Test/Pick/Fit an LFN segment from/to directory entry                  */
/*-----------------------------------------------------------------------*/
#if _USE_LFN
static
const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30};	/* Offset of LFN chars in the directory entry */


static
BOOL test_lfn (			/* TRUE:Matched, FALSE:Not matched */
	WCHAR *lfnbuf,		/* Pointer to the LFN to be compared */
	BYTE *dir			/* Pointer to the directory entry containing a part of LFN */
)
{
	int i, s;
	WCHAR wc1, wc2;


	i = ((dir[LDIR_Ord] & 0xBF) - 1) * 13;	/* Offset in the LFN buffer */
	s = 0;
	do {
		if (i >= _MAX_LFN) return FALSE;	/* Out of buffer range? */
		wc1 = LD_WORD(dir+LfnOfs[s]);		/* Get both characters to compare */
		wc2 = lfnbuf[i++];
		if (IsLower(wc1)) wc1 -= 0x20;		/* Compare it (ignore case) */
		if (IsLower(wc2)) wc2 -= 0x20;
		if (wc1 != wc2) return FALSE;
	} while (++s < 13 && wc1);				/* Repeat until last char or a NUL char is processed */

	return TRUE;							/* The LFN entry matched */
}



static
BOOL pick_lfn (			/* TRUE:Succeeded, FALSE:Buffer overflow */
	WCHAR *lfnbuf,		/* Pointer to the Unicode-LFN buffer */
	BYTE *dir			/* Pointer to the directory entry */
)
{
	int i, s;
	WCHAR wchr;


	i = ((dir[LDIR_Ord] & 0xBF) - 1) * 13;	/* Offset in the LFN buffer */
	s = 0;
	do {
		wchr = LD_WORD(dir+LfnOfs[s]);		/* Get an LFN char */
		if (!wchr) break;					/* End of LFN? */
		if (i >= _MAX_LFN) return FALSE;	/* Buffer overflow */
		lfnbuf[i++] = wchr;					/* Store it */
	} while (++s < 13);						/* Repeat until last char is copied */
	if (dir[LDIR_Ord] & 0x40) lfnbuf[i] = 0;	/* Put terminator if last LFN entry */

	return TRUE;
}


#if !_FS_READONLY
static
void fit_lfn (
	const WCHAR *lfnbuf,	/* Pointer to the LFN buffer */
	BYTE *dir,				/* Pointer to the directory entry */
	BYTE ord,				/* LFN order (1-20) */
	BYTE sum				/* SFN sum */
)
{
	int i, s;
	WCHAR wchr;


	dir[LDIR_Chksum] = sum;			/* Set check sum */
	dir[LDIR_Attr] = AM_LFN;		/* Set attribute. LFN entry */
	dir[LDIR_Type] = 0;
	ST_WORD(dir+LDIR_FstClusLO, 0);

	i = (ord - 1) * 13;				/* Offset in the LFN buffer */
	s = wchr = 0;
	do {
		if (wchr != 0xFFFF) wchr = lfnbuf[i++];	/* Get an effective char */
		ST_WORD(dir+LfnOfs[s], wchr);	/* Put it */
		if (!wchr) wchr = 0xFFFF;	/* Padding chars following last char */
	} while (++s < 13);
	if (wchr == 0xFFFF || !lfnbuf[i]) ord |= 0x40;/* Bottom LFN part is the start of LFN sequence */
	dir[LDIR_Ord] = ord;			/* Set the LFN order */
}

#endif
#endif



/*-----------------------------------------------------------------------*/
/* Create numbered name                                                  */
/*-----------------------------------------------------------------------*/
#if _USE_LFN
void gen_numname (
	BYTE *dst,			/* Pointer to genartated SFN */
	const BYTE *src,	/* Pointer to source SFN to be modified */
	const WCHAR *lfn,	/* Pointer to LFN */
	WORD num			/* Sequense number */
)
{
	char ns[8];
	int i, j;


	MemCpy(dst, src, 11);

	if (num > 5) {	/* On many collisions, generate a hash number instead of sequencial number */
		do num = (num >> 1) + (num << 15) + (WORD)*lfn++; while (*lfn);
	}

	/* itoa */
	i = 7;
	do {
		ns[i--] = (num % 10) + '0';
		num /= 10;
	} while (num);
	ns[i] = '~';

	/* Append the number */
	for (j = 0; j < i && dst[j] != ' '; j++) {
		if (IsDBCS1(dst[j])) {
			if (j == i - 1) break;
			j++;
		}
	}
	do {
		dst[j++] = (i < 8) ? ns[i++] : ' ';
	} while (j < 8);
}
#endif




/*-----------------------------------------------------------------------*/
/* Calculate sum of an SFN                                               */
/*-----------------------------------------------------------------------*/
#if _USE_LFN
static
BYTE sum_sfn (
	const BYTE *dir		/* Ptr to directory entry */
)
{
	BYTE sum = 0;
	int n = 11;

	do sum = (sum >> 1) + (sum << 7) + *dir++; while (--n);
	return sum;
}
#endif




/*-----------------------------------------------------------------------*/
/* Find an object in the directory                                       */
/*-----------------------------------------------------------------------*/

static
FRESULT dir_find (
	DIR *dj			/* Pointer to the directory object linked to the file name */
)
{
	FRESULT res;
	BYTE a, c, stat, ord, sum, *dir;

	ord = sum = 0xFF; stat = *(dj->fn+11);
	do {
		res = move_window(dj->fs, dj->sect);
		if (res != FR_OK) break;
		dir = dj->dir;					/* Ptr to the directory entry of current index */
		c = dir[DIR_Name];
		if (c == 0) { res = FR_NO_FILE; break; }	/* Reached to end of table */
		a = dir[DIR_Attr] & AM_MASK;
#if _USE_LFN	/* LFN configuration */
		if (c == 0xE5 || c == '.' || ((a & AM_VOL) && a != AM_LFN)) {	/* An entry without valid data */
			ord = 0xFF;
		} else {
			if (a == AM_LFN) {			/* An LFN entry is found */
				if (dj->lfn) {
					if (c & 0x40) {		/* Is it start of LFN sequence? */
						sum = dir[LDIR_Chksum];
						c &= 0xBF; ord = c;		/* LFN start order */
						dj->lfn_idx = dj->index;
					}
					/* Check LFN validity. Compare LFN if it is out of 8.3 format */
					ord = (c == ord && sum == dir[LDIR_Chksum] && (!(stat & 1) || test_lfn(dj->lfn, dir))) ? ord - 1 : 0xFF;
				}
			} else {					/* An SFN entry is found */
				if (ord || sum != sum_sfn(dir)) {	/* Did not LFN match? */
					dj->lfn_idx = 0xFFFF;
					ord = 0xFF;
				}
				if (stat & 1) {			/* Match LFN if it is out of 8.3 format */
					if (ord == 0) break;
				} else {				/* Match SFN if LFN is in 8.3 format */
					if (!MemCmp(dir, dj->fn, 11)) break;
				}
			}
		}
#else	/* Non LFN configuration */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蝌蚪porny成人天涯| 奇米色一区二区三区四区| 国内精品久久久久影院色| 欧美精品乱码久久久久久| 亚洲欧美另类小说视频| 国产精品一区二区三区四区| 欧美成人免费网站| 青青草国产精品97视觉盛宴| 欧美日韩视频在线一区二区 | 日韩中文字幕麻豆| 欧美日韩高清一区二区三区| 久久久久久麻豆| 国产麻豆日韩欧美久久| xnxx国产精品| 国产黄色91视频| 国产精品久久免费看| 91农村精品一区二区在线| 亚洲欧美偷拍另类a∨色屁股| 99天天综合性| 一区二区三区 在线观看视频| 欧美亚洲高清一区| 五月天欧美精品| 日韩视频123| 国产精品一区二区在线看| 国产精品另类一区| 色综合色综合色综合色综合色综合 | 久久精品夜色噜噜亚洲a∨| 国产伦精品一区二区三区免费| 国产欧美日韩在线| caoporen国产精品视频| 亚洲精品国产精品乱码不99 | 亚洲欧美一区二区三区国产精品| 国产成人精品一区二区三区四区| 国产午夜久久久久| 国产真实乱子伦精品视频| www久久久久| av电影天堂一区二区在线| 亚洲精品一二三| 色哟哟在线观看一区二区三区| 337p日本欧洲亚洲大胆精品| 成人精品亚洲人成在线| 亚洲综合丝袜美腿| 欧美精品一区二区三| 99久久久精品免费观看国产蜜| 亚洲国产精品一区二区尤物区| 欧美一级日韩不卡播放免费| 国产成人精品免费一区二区| 亚洲精品v日韩精品| 日韩欧美色电影| 色94色欧美sute亚洲13| 日韩 欧美一区二区三区| 欧美一级欧美三级| 午夜精品久久久久影视| 亚洲国产高清在线观看视频| 在线观看亚洲一区| 久久精品99国产精品| 国产精品久久久99| 91亚洲大成网污www| 天天色天天操综合| 国产精品高清亚洲| 日韩精品一区在线| 欧美日韩在线三区| av一区二区不卡| 日韩电影免费一区| 亚洲欧美日韩精品久久久久| 久久一夜天堂av一区二区三区| 一本大道久久a久久精二百| 欧美一级黄色大片| av一区二区三区在线| 国产毛片精品一区| 日韩av不卡在线观看| 精品女同一区二区| 欧美日韩一区精品| 美女视频一区在线观看| 午夜电影网亚洲视频| 亚洲视频免费在线| 国产欧美va欧美不卡在线| 日韩精品一区二区三区三区免费 | av午夜一区麻豆| 国产一区二区在线免费观看| 日韩在线一二三区| 中文字幕一区二区三区精华液 | 一区二区三区国产精品| 国产精品亲子乱子伦xxxx裸| 久久久久久久久伊人| 欧美亚洲一区二区在线观看| 99麻豆久久久国产精品免费| 成人avav在线| 成人免费高清视频在线观看| 成人污污视频在线观看| 国产成人福利片| 国产九九视频一区二区三区| 韩国v欧美v日本v亚洲v| 国产麻豆精品在线| 韩国精品主播一区二区在线观看 | 亚洲伊人伊色伊影伊综合网| 专区另类欧美日韩| 国产福利一区二区三区| 国产又黄又大久久| 日韩在线a电影| 青青草97国产精品免费观看 | 久久久国产综合精品女国产盗摄| 日韩欧美国产综合| 亚洲精品一线二线三线无人区| 日韩女优av电影| 亚洲精品一区二区三区福利| 337p日本欧洲亚洲大胆精品| 国产亚洲精品精华液| 欧美电影免费提供在线观看| 日韩视频在线你懂得| 欧美特级限制片免费在线观看| 在线视频综合导航| 日本精品视频一区二区| 欧洲在线/亚洲| 欧美视频中文字幕| 色婷婷综合久久久中文一区二区| 成人污视频在线观看| 风流少妇一区二区| 成人免费的视频| 欧美性受xxxx黑人xyx性爽| 欧美日韩精品久久久| 制服.丝袜.亚洲.中文.综合| 色偷偷久久一区二区三区| 欧美日韩精品一区视频| 欧美一级片在线看| 精品日韩一区二区三区免费视频| 91精品国产综合久久久蜜臀图片| 日韩一二三四区| 4438x亚洲最大成人网| 91 com成人网| 精品国产精品网麻豆系列| 久久女同精品一区二区| 亚洲免费观看高清在线观看| 免费观看一级特黄欧美大片| 成人亚洲一区二区一| 欧美日韩视频在线第一区| 91精品国产欧美一区二区| 久久久亚洲高清| 一区二区三区视频在线看| 激情综合网天天干| 欧美自拍偷拍午夜视频| 精品国产免费人成在线观看| 亚洲色图欧洲色图婷婷| 精品综合久久久久久8888| 国产成人av电影在线| 欧美在线一二三四区| 久久久久久久免费视频了| 99久久国产综合精品麻豆| 欧美高清你懂得| 国产精品乱人伦| 久久福利资源站| 欧美日韩在线综合| 亚洲四区在线观看| 蜜桃av一区二区在线观看| 国产一区二区三区久久悠悠色av | 精品国产不卡一区二区三区| 亚洲精品美国一| 粉嫩蜜臀av国产精品网站| 日韩一区二区在线观看| 一区二区三区在线观看国产 | 亚洲欧美综合色| 黑人精品欧美一区二区蜜桃| 91浏览器入口在线观看| 欧美高清激情brazzers| 亚洲人成人一区二区在线观看| 久草这里只有精品视频| 91视频91自| 69堂精品视频| 一区二区三区精品视频在线| 99热精品国产| 国产日韩成人精品| 国产激情视频一区二区三区欧美 | 亚洲欧美在线观看| 久久电影网站中文字幕| 欧美日韩日本视频| 国产精品久久毛片| 国产91在线看| 国产综合一区二区| 精品久久久网站| 麻豆精品一区二区综合av| 555夜色666亚洲国产免| 亚洲综合自拍偷拍| 99视频在线精品| 亚洲欧洲av一区二区三区久久| 国产精品1区2区3区| 久久嫩草精品久久久久| 精品一区二区三区免费观看| 精品国产一区二区三区av性色| 美国十次综合导航| 亚洲精品一区二区三区四区高清| 午夜伦欧美伦电影理论片| 欧美天堂一区二区三区| 亚洲国产精品久久人人爱| 欧美写真视频网站| 日韩精品一级二级| 亚洲精品一线二线三线| 国产jizzjizz一区二区| 中文字幕日韩精品一区 | 国内不卡的二区三区中文字幕| 26uuu国产日韩综合|