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

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

?? ff.c

?? FatFs/Tiny-FatFs Module Source Files R0.07
?? C
?? 第 1 頁 / 共 5 頁
字號:
		if (c != 0xE5 && c != '.' && !(a & AM_VOL) && !MemCmp(dir, dj->fn, 11)) /* Is it a valid entry? */
			break;
#endif
		res = dir_next(dj, FALSE);				/* Next entry */
	} while (res == FR_OK);

	return res;
}




/*-----------------------------------------------------------------------*/
/* Read an object from the directory                                     */
/*-----------------------------------------------------------------------*/
#if _FS_MINIMIZE <= 2
static
FRESULT dir_read (
	DIR *dj			/* Pointer to the directory object to store read object name */
)
{
	FRESULT res;
	BYTE a, c, ord, sum, *dir;


	ord = sum = 0xFF;
	res = FR_NO_FILE;
	while (dj->sect) {
		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 (c & 0x40) {			/* Is it start of LFN sequence? */
					sum = dir[LDIR_Chksum];
					c &= 0xBF; ord = c;
					dj->lfn_idx = dj->index;
				}
				/* Check LFN validity and capture it */
				ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF;
			} else {					/* An SFN entry is found */
				if (ord || sum != sum_sfn(dir))	/* Is there a valid LFN entry? */
					dj->lfn_idx = 0xFFFF;		/* No LFN. */
				break;
			}
		}
#else	/* Non LFN configuration */
		if (c != 0xE5 && c != '.' && !(a & AM_VOL))	/* Is it a valid entry? */
			break;
#endif
		res = dir_next(dj, FALSE);				/* Next entry */
		if (res != FR_OK) break;
	}

	if (res != FR_OK) dj->sect = 0;

	return res;
}
#endif



/*-----------------------------------------------------------------------*/
/* Register an object to the directory                                   */
/*-----------------------------------------------------------------------*/
#if !_FS_READONLY
static
FRESULT dir_register (	/* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */
	DIR *dj				/* Target directory with object name to be created */
)
{
	FRESULT res;
	BYTE c, *dir;

#if _USE_LFN	/* LFN configuration */
	WORD n, ne, is;
	BYTE sn[12], *fn, sum;
	WCHAR *lfn;

	fn = dj->fn; lfn = dj->lfn;
	MemCpy(sn, fn, 12);
	if (sn[11] & 1) {		/* When LFN is out of 8.3 format, generate a numbered name */
		fn[11] = 0; dj->lfn = NULL;			/* Find only SFN */
		for (n = 1; n < 100; n++) {
			gen_numname(fn, sn, lfn, n);	/* Generate a numbered name */
			res = dir_seek(dj, 0);
			if (res != FR_OK) break;
			res = dir_find(dj);				/* Check if the name collides with existing SFN */
			if (res != FR_OK) break;
		}
		if (n == 100) return FR_DENIED;		/* Abort if too many collisions */
		if (res != FR_NO_FILE) return res;	/* Abort if the result is other than 'not collided' */
		fn[11] = sn[11]; dj->lfn = lfn;
	}
	if (sn[11] & 2) {		/* When eliminate LFN, reserve only an SFN entry. */
		ne = 1;
	} else {				/* Otherwise reserve an SFN + LFN entries. */
		for (ne = 0; lfn[ne]; ne++) ;
		ne = (ne + 25) / 13;
	}

	/* Reserve contiguous entries */
	res = dir_seek(dj, 0);
	if (res != FR_OK) return res;
	n = is = 0;
	do {
		res = move_window(dj->fs, dj->sect);
		if (res != FR_OK) break;
		c = *dj->dir;	/* Check the entry status */
		if (c == 0xE5 || c == 0) {	/* Is it a blank entry? */
			if (n == 0) is = dj->index;	/* First index of the contigulus entry */
			if (++n == ne) break;	/* A contiguous entry that requiered count is found */
		} else {
			n = 0;					/* Not a blank entry. Restart to search */
		}
		res = dir_next(dj, TRUE);	/* Next entry with table streach */
	} while (res == FR_OK);

	if (res == FR_OK && ne > 1) {	/* Initialize LFN entry if needed */
		res = dir_seek(dj, is);
		if (res == FR_OK) {
			sum = sum_sfn(dj->fn);	/* Sum of the SFN tied to the LFN */
			ne--;
			do {					/* Store LFN entries in bottom first */
				res = move_window(dj->fs, dj->sect);
				if (res != FR_OK) break;
				fit_lfn(dj->lfn, dj->dir, (BYTE)ne, sum);
				dj->fs->wflag = 1;
				res = dir_next(dj, FALSE);	/* Next entry */
			} while (res == FR_OK && --ne);
		}
	}

#else	/* Non LFN configuration */
	res = dir_seek(dj, 0);
	if (res == FR_OK) {
		do {	/* Find a blank entry for the SFN */
			res = move_window(dj->fs, dj->sect);
			if (res != FR_OK) break;
			c = *dj->dir;
			if (c == 0xE5 || c == 0) break;	/* Is it a blank entry? */
			res = dir_next(dj, TRUE);		/* Next entry with table streach */
		} while (res == FR_OK);
	}
#endif

	if (res == FR_OK) {		/* Initialize the SFN entry */
		res = move_window(dj->fs, dj->sect);
		if (res == FR_OK) {
			dir = dj->dir;
			MemSet(dir, 0, 32);			/* Clean the entry */
			MemCpy(dir, dj->fn, 11);	/* Put SFN */
			dir[DIR_NTres] = *(dj->fn+11) & 0x18;	/* Put NT flag */
			dj->fs->wflag = 1;
		}
	}

	return res;
}
#endif /* !_FS_READONLY */




/*-----------------------------------------------------------------------*/
/* Remove an object from the directory                                   */
/*-----------------------------------------------------------------------*/
#if !_FS_READONLY && !_FS_MINIMIZE
static
FRESULT dir_remove (	/* FR_OK: Successful, FR_DISK_ERR: A disk error */
	DIR *dj				/* Directory object pointing the entry to be removed */
)
{
	FRESULT res;

#if _USE_LFN	/* LFN configuration */
	WORD i;

	i = dj->index;	/* SFN index */
	res = dir_seek(dj, (WORD)((dj->lfn_idx == 0xFFFF) ? i : dj->lfn_idx));	/* Goto the SFN or top of the LFN entries */
	if (res == FR_OK) {
		do {
			res = move_window(dj->fs, dj->sect);
			if (res != FR_OK) break;
			*dj->dir = 0xE5;				/* Mark the entry "deleted" */
			dj->fs->wflag = 1;
			if (dj->index >= i) break;		/* When SFN is deleted, all entries of the object is deleted. */
			res = dir_next(dj, FALSE);		/* Next entry */
		} while (res == FR_OK);
		if (res == FR_NO_FILE) res = FR_INT_ERR;
	}

#else			/* Non LFN configuration */
	res = dir_seek(dj, dj->index);
	if (res == FR_OK) {
		res = move_window(dj->fs, dj->sect);
		if (res == FR_OK) {
			*dj->dir = 0xE5;				/* Mark the entry "deleted" */
			dj->fs->wflag = 1;
		}
	}
#endif

	return res;
}
#endif /* !_FS_READONLY */




/*-----------------------------------------------------------------------*/
/* Pick a segment and create the object name in directory form           */
/*-----------------------------------------------------------------------*/

static
FRESULT create_name (
	DIR *dj,			/* Pointer to the directory object */
	const char **path	/* Pointer to pointer to the segment in the path string */
)
{
#if _USE_LFN
	BYTE c, b, cf, *sfn;
	WCHAR w, *lfn;
	int i, ni, si, di;
	const char *p;

	/* Create LFN in Unicode */
	si = di = 0;
	p = *path;
	lfn = dj->lfn;
	for (;;) {
		w = (BYTE)p[si++];				/* Get a character */
		if (w < ' ' || w == '/' || w == '\\') break;	/* Break on end of segment */
		if (IsDBCS1(w)) {				/* If it is DBC 1st byte */
			c = p[si++];				/* Get 2nd byte */
			if (!IsDBCS2(c))			/* Reject invalid DBC */
				return FR_INVALID_NAME;
			w = (w << 8) + c;
		} else {
			if (StrChr("\"*:<>?|\x7F", w))	/* Reject unallowable chars for LFN */
				return FR_INVALID_NAME;
		}
		w = ff_convert(w, 1);			/* Convert OEM to Unicode, store it */
		if (!w || di >= _MAX_LFN)		/* Reject invalid code or too long name */
			return FR_INVALID_NAME;
		lfn[di++] = w;
	}
	*path = &p[si];						/* Rerurn pointer to the next segment */
	cf = (w < ' ') ? 4 : 0;				/* Set last segment flag if end of path */

	while (di) {						/* Strip trailing spaces and dots */
		w = lfn[di - 1];
		if (w != ' ' && w != '.') break;
		di--;
	}
	if (!di) return FR_INVALID_NAME;	/* Reject null string */

	lfn[di] = 0;						/* LFN is created */

	/* Create SFN in directory form */
	sfn = dj->fn;
	MemSet(sfn, ' ', 11);
	for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ;	/* Strip leading spaces and dots */
	if (si) cf |= 1;
	while (di && lfn[di - 1] != '.') di--;	/* Find extension (di<=si: no extension) */

	b = i = 0; ni = 8;
	for (;;) {
		w = lfn[si++];					/* Get an LFN char */
		if (w == 0) break;				/* Break when enf of the LFN */
		if (w == ' ' || (w == '.' && si != di)) {	/* Remove spaces and dots */
			cf |= 1; continue;
		}
		if (i >= ni || si == di) {		/* Here is extension or end of SFN */
			if (ni == 11) {				/* Extension is longer than 3 bytes */
				cf |= 1; break;
			}
			if (si != di) cf |= 1;		/* File name is longer than 8 bytes */
			if (si > di) break;			/* No extension */
			si = di; i = 8; ni = 11;	/* Enter extension section */
			b <<= 2; continue;
		}
		w = ff_convert(w, 0);			/* Unicode -> OEM code */
		if (w >= 0x80) cf |= 0x20;		/* If there is any extended char, force create an LFN */
		if (w >= 0x100) {				/* Double byte char */
			if (i >= ni - 1) {
				cf |= 1; i = ni; continue;
			}
			sfn[i++] = (BYTE)(w >> 8);
		} else {						/* Single byte char */
			if (StrChr("+,;[=]", w)) {	/* Replace unallowable chars for SFN */
				w = '_'; cf |= 1;
			} else {
				if (IsUpper(w)) {		/* Large capital */
					b |= 2;
				} else {
					if (IsLower(w)) {	/* Small capital */
						b |= 1; w -= 0x20;
					}
				}
			}
		}
		sfn[i++] = (BYTE)w;
	}
	if (sfn[0] == 0xE5) sfn[0] = 0x05;	/* When first char collides with 0xE5, replace it with 0x05 */

	if (ni == 8) b <<= 2;
	if ((cf & 0x21) == 0) {	/* When LFN is in 8.3 format without extended char, NT flags are created */
		if ((b & 0x03) == 0x01) cf |= 0x10;	/* NT flag (Extension has only small capital) */
		if ((b & 0x0C) == 0x04) cf |= 0x08;	/* NT flag (Filename has only small capital) */
		if ((b & 0x0C) != 0x0C && (b & 0x03) != 0x03) cf |= 2;	/* Eliminate LFN when non composite capitals */
	}

	sfn[11] = cf;		/* SFN is created */

#else
	BYTE c, d, b, *sfn;
	int ni, si, i;
	const char *p;

	/* Create file name in directory form */
	sfn = dj->fn;
	MemSet(sfn, ' ', 11);
	si = i = b = 0; ni = 8;
	p = *path;
	for (;;) {
		c = p[si++];
		if (c < ' ' || c == '/' || c == '\\') break;	/* Break on end of segment */
		if (c == '.' || i >= ni) {
			if (ni != 8 || c != '.') return FR_INVALID_NAME;
			i = 8; ni = 11;
			b <<= 2; continue;
		}
		if (c >= 0x80) b |= 3;			/* If there is any extended char, eliminate NT flag */
		if (IsDBCS1(c)) {				/* If it is DBC 1st byte */
			d = p[si++];				/* Get 2nd byte */
			if (!IsDBCS2(d) || i >= ni - 1)	/* Reject invalid DBC */
				return FR_INVALID_NAME;
			sfn[i++] = c;
			sfn[i++] = d;
		} else {
			if (StrChr(" +,;[=]\"*:<>?|\x7F", c))	/* Reject unallowable chrs for SFN */
				return FR_INVALID_NAME;
			if (IsUpper(c)) {
				b |= 2;
			} else {
				if (IsLower(c)) {
					b |= 1; c -= 0x20;
				}
			}
			sfn[i++] = c;
		}
	}
	*path = &p[si];						/* Rerurn pointer to the next segment */
	c = (c < ' ') ? 4 : 0;				/* Set last segment flag if end of path */

	if (!i) return FR_INVALID_NAME;		/* Reject null string */
	if (sfn[0] == 0xE5) sfn[0] = 0x05;	/* When first char collides with 0xE5, replace it with 0x05 */

	if (ni == 8) b <<= 2;
	if ((b & 0x03) == 0x01) c |= 0x10;	/* NT flag (Extension has only small capital) */
	if ((b & 0x0C) == 0x04) c |= 0x08;	/* NT flag (Filename has only small capital) */

	sfn[11] = c;		/* Store NT flag, File name is created */
#endif

	return FR_OK;
}




/*-----------------------------------------------------------------------*/
/* Get file information from directory entry                             */
/*-----------------------------------------------------------------------*/
#if _FS_MINIMIZE <= 1
static
void get_fileinfo (		/* No return code */
	DIR *dj,			/* Pointer to the directory object */
	FILINFO *fno	 	/* Pointer to store the file information */
)
{
	int i;
	BYTE c, nt, *dir;
	char *p;


	p = fno->fname;
	if (dj->sect) {
		dir = dj->dir;
		nt = dir[DIR_NTres];		/* NT flag */
		for (i = 0; i < 8; i++) {	/* Copy file name body */
			c = dir[i];
			if (c == ' ') break;
			if (c == 0x05) c = 0xE5;
			if ((nt & 0x08) && IsUpper(c)) c += 0x20;
			*p++ = c;
		}
		if (dir[8] != ' ') {		/* Copy file name extension */
			*p++ = '.';
			for (i = 8; i < 11; i++) {
				c = dir[i];
				if (c == ' ') break;
				if ((nt & 0x10) && IsUpper(c)) c += 0x20;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av电影免费观看| 午夜精品一区二区三区电影天堂 | 五月婷婷激情综合| 欧美亚洲自拍偷拍| 亚洲成人第一页| 欧美美女网站色| 久久丁香综合五月国产三级网站| 日韩精品一区在线| 国产激情视频一区二区三区欧美 | 欧美丰满嫩嫩电影| 美国欧美日韩国产在线播放| www成人在线观看| 99热国产精品| 亚洲大片在线观看| 久久久久久久综合狠狠综合| 成人黄色大片在线观看| 亚洲午夜免费福利视频| 宅男噜噜噜66一区二区66| 激情综合色综合久久| 国产精品久久久久影院亚瑟| 91国产免费看| 国精产品一区一区三区mba桃花| 国产精品久久久久久久第一福利 | 亚洲一二三四在线观看| 日韩三级免费观看| 一本色道久久综合狠狠躁的推荐| 日韩av电影免费观看高清完整版在线观看 | 一区二区三区91| 日韩欧美一区二区视频| 成人av电影观看| 调教+趴+乳夹+国产+精品| 国产欧美日韩综合| 欧美日韩视频在线一区二区| 国产精品1区2区| 亚洲成人av一区二区| 久久久99精品免费观看不卡| 欧美性三三影院| 大胆欧美人体老妇| 麻豆成人久久精品二区三区红 | 日本视频免费一区| 国产精品福利av| 精品国偷自产国产一区| 欧美影院精品一区| 国产91精品欧美| 麻豆精品在线观看| 亚洲午夜久久久| 欧美一区二区久久久| 日韩综合小视频| 成人国产精品免费网站| 国产精品乱码妇女bbbb| 在线不卡中文字幕| 一本高清dvd不卡在线观看| 国产一区不卡视频| 日本成人在线电影网| 一区二区三区在线播放| 国产精品拍天天在线| 久久亚洲综合av| 欧美不卡一二三| 777久久久精品| 欧美日韩午夜影院| 欧美日韩在线电影| 色婷婷综合五月| 色先锋aa成人| 色婷婷亚洲综合| 99精品视频在线观看免费| 丰满亚洲少妇av| 丁香另类激情小说| 国产一区二区福利| 狠狠色2019综合网| 精东粉嫩av免费一区二区三区| 色婷婷久久久亚洲一区二区三区| 琪琪一区二区三区| 日韩精品中文字幕在线一区| 天天色天天操综合| 2欧美一区二区三区在线观看视频| 在线精品视频免费播放| 色94色欧美sute亚洲线路一ni| 成av人片一区二区| www.色精品| 色婷婷综合久久久久中文一区二区| www.爱久久.com| 91免费观看在线| 色综合色狠狠天天综合色| 成人高清免费观看| 91在线码无精品| 欧洲视频一区二区| 欧美色精品在线视频| 欧美三级韩国三级日本三斤| 欧美日韩国产综合一区二区| 91精品婷婷国产综合久久| 欧美一级理论性理论a| 精品毛片乱码1区2区3区 | 国产在线精品一区二区不卡了| 精品电影一区二区| 精品久久久久一区二区国产| jizzjizzjizz欧美| 91国产视频在线观看| 4438x亚洲最大成人网| 日韩一二三区视频| 久久综合狠狠综合久久激情| 国产精品毛片久久久久久| 亚洲欧洲日韩av| 亚洲国产综合人成综合网站| 丝瓜av网站精品一区二区| 久久精品国产亚洲aⅴ| 成人一区二区三区视频在线观看| 99久久婷婷国产| 在线观看91视频| 精品日韩一区二区三区| 国产精品美女久久久久aⅴ| 夜夜嗨av一区二区三区四季av| 日韩电影网1区2区| 国产二区国产一区在线观看| 欧美综合一区二区三区| 日韩免费观看2025年上映的电影| 国产精品丝袜一区| 日韩综合小视频| 成人网在线免费视频| 欧美亚洲国产一区在线观看网站 | 亚洲成人www| 国产成人午夜99999| 欧美日韩一级大片网址| 国产亚洲欧美日韩日本| 亚洲成人免费影院| 成人综合婷婷国产精品久久| 欧美一区二区视频免费观看| 国产精品久久久久永久免费观看 | 亚洲香蕉伊在人在线观| 国产成人精品1024| 7777精品伊人久久久大香线蕉完整版 | 久久新电视剧免费观看| 亚洲免费av观看| 国产精品一级黄| 91精品国产91久久久久久一区二区 | 成人av电影免费观看| 欧美xxxxx牲另类人与| 亚洲一区二区三区在线| 成人美女视频在线看| 日韩一级片在线播放| 亚洲在线免费播放| 成人激情免费视频| 精品久久久久久久一区二区蜜臀| 一区二区三区波多野结衣在线观看| 国产精品亚洲午夜一区二区三区| 欧美精品视频www在线观看| 亚洲欧美二区三区| 国产aⅴ综合色| 亚洲精品在线免费观看视频| 日韩二区三区四区| 欧美亚洲一区二区三区四区| 亚洲欧美另类综合偷拍| 成人精品在线视频观看| 国产亚洲精品中文字幕| 狠狠色狠狠色综合系列| 精品少妇一区二区三区在线播放| 午夜精品久久久久久久99樱桃| 色成人在线视频| 成人美女在线观看| 喷水一区二区三区| 亚洲综合色噜噜狠狠| 92国产精品观看| 亚洲欧洲国产日韩| 国产a区久久久| 国产精品丝袜在线| 成人免费毛片嘿嘿连载视频| 亚洲福利一区二区| 欧美三级视频在线| 亚洲国产视频一区二区| 在线观看亚洲精品| 亚洲一区二区三区四区在线| 欧美视频一区在线| 午夜精品一区二区三区免费视频| 欧美色网一区二区| 视频在线在亚洲| 欧美电影免费观看高清完整版在线观看| 日韩不卡一区二区| 2024国产精品| 国产传媒欧美日韩成人| 中文字幕av不卡| 99久久国产综合精品女不卡| 亚洲欧美激情视频在线观看一区二区三区 | fc2成人免费人成在线观看播放| 亚洲国产精品v| 色综合久久88色综合天天免费| 夜夜亚洲天天久久| 这里只有精品电影| 国产一区二区三区日韩| 国产精品私人影院| 91高清在线观看| 捆绑紧缚一区二区三区视频| 精品国产a毛片| 91在线无精精品入口| 五月天久久比比资源色| 欧美xxxxx牲另类人与| 成人成人成人在线视频| 亚洲一级电影视频| 欧美精品一区二区久久婷婷| 国产91在线看| 亚洲综合一区在线| 日韩欧美国产小视频|