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

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

?? ff.c

?? FatFs/Tiny-FatFs Module Source Files R0.07
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
				*p++ = c;
			}
		}
		fno->fattrib = dir[DIR_Attr];				/* Attribute */
		fno->fsize = LD_DWORD(dir+DIR_FileSize);	/* Size */
		fno->fdate = LD_WORD(dir+DIR_WrtDate);		/* Date */
		fno->ftime = LD_WORD(dir+DIR_WrtTime);		/* Time */
	}
	*p = 0;

#if _USE_LFN
	p = fno->lfname;
	if (p) {
		WCHAR wchr, *lfn;

		i = 0;
		if (dj->sect && dj->lfn_idx != 0xFFFF) {/* Get LFN if available */
			lfn = dj->lfn;
			while ((wchr = *lfn++) != 0) {		/* Get an LFN char */
				wchr = ff_convert(wchr, 0);		/* Unicode -> OEM code */
				if (!wchr) { i = 0; break; }	/* Conversion error, no LFN */
				if (_DF1S && wchr >= 0x100)		/* Put 1st byte if it is a DBC */
					p[i++] = (char)(wchr >> 8);
				p[i++] = (char)wchr;
				if (i >= fno->lfsize) { i = 0; break; }	/* Buffer overrun, no LFN */
			}
		}
		p[i] = 0;	/* Terminator */
	}
#endif
}
#endif /* _FS_MINIMIZE <= 1 */




/*-----------------------------------------------------------------------*/
/* Follow a file path                                                    */
/*-----------------------------------------------------------------------*/

static
FRESULT follow_path (	/* FR_OK(0): successful, !=0: error code */
	DIR *dj,			/* Directory object to return last directory and found object */
	const char *path	/* Full-path string to find a file or directory */
)
{
	FRESULT res;
	BYTE *dir, stat;


	if (*path == '/' || *path == '\\' ) path++;	/* Strip heading separator */

	dj->sclust =						/* Set start directory (root dir) */
		(dj->fs->fs_type == FS_FAT32) ? dj->fs->dirbase : 0;

	if ((BYTE)*path < ' ') {			/* Null path means the root directory */
		res = dir_seek(dj, 0);
		dj->dir = NULL;

	} else {							/* Follow path */
		for (;;) {
			res = dir_seek(dj, 0);			/* Rewind directory object */
			if (res != FR_OK) break;
			res = create_name(dj, &path);	/* Get a segment */
			if (res != FR_OK) break;
			res = dir_find(dj);				/* Find it */
			stat = *(dj->fn+11);
			if (res != FR_OK) {				/* Could not find the object */
				if (res == FR_NO_FILE && !(stat & 4))
					res = FR_NO_PATH;
				break;
			}
			if (stat & 4) break;			/* Last segment match. Function completed. */
			dir = dj->dir;					/* There is next segment. Follow the sub directory */
			if (!(dir[DIR_Attr] & AM_DIR)) { /* Cannot follow because it is a file */
				res = FR_NO_PATH; break;
			}
			dj->sclust = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO);
		}
	}

	return res;
}




/*-----------------------------------------------------------------------*/
/* Load boot record and check if it is an FAT boot record                */
/*-----------------------------------------------------------------------*/

static
BYTE check_fs (	/* 0:The FAT boot record, 1:Valid boot record but not an FAT, 2:Not a boot record, 3:Error */
	FATFS *fs,	/* File system object */
	DWORD sect	/* Sector# (lba) to check if it is an FAT boot record or not */
)
{
	if (disk_read(fs->drive, fs->win, sect, 1) != RES_OK)	/* Load boot record */
		return 3;
	if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55)				/* Check record signature (always placed at offset 510 even if the sector size is >512) */
		return 2;

	if (!MemCmp(&fs->win[BS_FilSysType], "FAT", 3))		/* Check FAT signature */
		return 0;
	if (!MemCmp(&fs->win[BS_FilSysType32], "FAT32", 5) && !(fs->win[BPB_ExtFlags] & 0x80))
		return 0;

	return 1;
}




/*-----------------------------------------------------------------------*/
/* Make sure that the file system is valid                               */
/*-----------------------------------------------------------------------*/

static
FRESULT auto_mount (	/* FR_OK(0): successful, !=0: any error occured */
	const char **path,	/* Pointer to pointer to the path name (drive number) */
	FATFS **rfs,		/* Pointer to pointer to the found file system object */
	BYTE chk_wp			/* !=0: Check media write protection for write access */
)
{
	FRESULT res;
	BYTE drv, fmt, *tbl;
	DSTATUS stat;
	DWORD bsect, fsize, tsect, mclst;
	const char *p = *path;
	FATFS *fs;


	/* Get drive number from the path name */
	drv = p[0] - '0';			/* Is there a drive number? */
	if (drv <= 9 && p[1] == ':') {
		p += 2;					/* Found a drive number, get and strip it */
		*path = p;				/* Return pointer to the path name */
	} else {
		drv = 0;				/* No drive number is given, use drive number 0 as default */
	}

	/* Check if the drive number is valid or not */
	if (drv >= _DRIVES) return FR_INVALID_DRIVE;	/* Is the drive number valid? */
	*rfs = fs = FatFs[drv];					/* Returen pointer to the corresponding file system object */
	if (!fs) return FR_NOT_ENABLED;			/* Is the file system object registered? */

	ENTER_FF(fs);				/* Lock file system */

	if (fs->fs_type) {						/* If the logical drive has been mounted */
		stat = disk_status(fs->drive);
		if (!(stat & STA_NOINIT)) {			/* and physical drive is kept initialized (has not been changed), */
#if !_FS_READONLY
			if (chk_wp && (stat & STA_PROTECT))	/* Check write protection if needed */
				return FR_WRITE_PROTECTED;
#endif
			return FR_OK;					/* The file system object is valid */
		}
	}

	/* The logical drive must be re-mounted. Following code attempts to mount the logical drive */

	fs->fs_type = 0;					/* Clear the file system object */
	fs->drive = LD2PD(drv);				/* Bind the logical drive and a physical drive */
	stat = disk_initialize(fs->drive);	/* Initialize low level disk I/O layer */
	if (stat & STA_NOINIT)				/* Check if the drive is ready */
		return FR_NOT_READY;
#if S_MAX_SIZ > 512						/* Get disk sector size if needed */
	if (disk_ioctl(drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > S_MAX_SIZ)
		return FR_NO_FILESYSTEM;
#endif
#if !_FS_READONLY
	if (chk_wp && (stat & STA_PROTECT))	/* Check write protection if needed */
		return FR_WRITE_PROTECTED;
#endif
	/* Search FAT partition on the drive */
	fmt = check_fs(fs, bsect = 0);		/* Check sector 0 as an SFD format */
	if (fmt == 1) {						/* Not an FAT boot record, it may be patitioned */
		/* Check a partition listed in top of the partition table */
		tbl = &fs->win[MBR_Table + LD2PT(drv) * 16];	/* Partition table */
		if (tbl[4]) {									/* Is the partition existing? */
			bsect = LD_DWORD(&tbl[8]);					/* Partition offset in LBA */
			fmt = check_fs(fs, bsect);					/* Check the partition */
		}
	}
	if (fmt == 3) return FR_DISK_ERR;
	if (fmt || LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs))	/* No valid FAT patition is found */
		return FR_NO_FILESYSTEM;

	/* Initialize the file system object */
	fsize = LD_WORD(fs->win+BPB_FATSz16);				/* Number of sectors per FAT */
	if (!fsize) fsize = LD_DWORD(fs->win+BPB_FATSz32);
	fs->sects_fat = fsize;
	fs->n_fats = fs->win[BPB_NumFATs];					/* Number of FAT copies */
	fsize *= fs->n_fats;								/* (Number of sectors in FAT area) */
	fs->fatbase = bsect + LD_WORD(fs->win+BPB_RsvdSecCnt); /* FAT start sector (lba) */
	fs->csize = fs->win[BPB_SecPerClus];				/* Number of sectors per cluster */
	fs->n_rootdir = LD_WORD(fs->win+BPB_RootEntCnt);	/* Nmuber of root directory entries */
	tsect = LD_WORD(fs->win+BPB_TotSec16);				/* Number of sectors on the file system */
	if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32);
	fs->max_clust = mclst = (tsect						/* Last cluster# + 1 */
		- LD_WORD(fs->win+BPB_RsvdSecCnt) - fsize - fs->n_rootdir / (SS(fs)/32)
		) / fs->csize + 2;

	fmt = FS_FAT12;										/* Determine the FAT sub type */
	if (mclst >= 0xFF7) fmt = FS_FAT16;				/* Number of clusters >= 0xFF5 */
	if (mclst >= 0xFFF7) fmt = FS_FAT32;			/* Number of clusters >= 0xFFF5 */

	if (fmt == FS_FAT32)
		fs->dirbase = LD_DWORD(fs->win+BPB_RootClus);	/* Root directory start cluster */
	else
		fs->dirbase = fs->fatbase + fsize;				/* Root directory start sector (lba) */
	fs->database = fs->fatbase + fsize + fs->n_rootdir / (SS(fs)/32);	/* Data start sector (lba) */

#if !_FS_READONLY
	/* Initialize allocation information */
	fs->free_clust = 0xFFFFFFFF;
	fs->wflag = 0;
	/* Get fsinfo if needed */
	if (fmt == FS_FAT32) {
		fs->fsi_sector = bsect + LD_WORD(fs->win+BPB_FSInfo);
		fs->fsi_flag = 0;
		if (disk_read(fs->drive, fs->win, fs->fsi_sector, 1) == RES_OK &&
			LD_WORD(fs->win+BS_55AA) == 0xAA55 &&
			LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 &&
			LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) {
			fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free);
			fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count);
		}
	}
#endif
	fs->winsect = 0;
	fs->fs_type = fmt;			/* FAT syb-type */
	fs->id = ++Fsid;			/* File system mount ID */
	res = FR_OK;

	return res;
}




/*-----------------------------------------------------------------------*/
/* Check if the file/dir object is valid or not                          */
/*-----------------------------------------------------------------------*/

static
FRESULT validate (	/* FR_OK(0): The object is valid, !=0: Invalid */
	FATFS *fs,		/* Pointer to the file system object */
	WORD id			/* Member id of the target object to be checked */
)
{
	if (!fs || !fs->fs_type || fs->id != id)
		return FR_INVALID_OBJECT;

	ENTER_FF(fs);		/* Lock file system */

	if (disk_status(fs->drive) & STA_NOINIT)
		return FR_NOT_READY;

	return FR_OK;
}




/*--------------------------------------------------------------------------

   Public Functions

--------------------------------------------------------------------------*/



/*-----------------------------------------------------------------------*/
/* Mount/Unmount a Locical Drive                                         */
/*-----------------------------------------------------------------------*/

FRESULT f_mount (
	BYTE drv,		/* Logical drive number to be mounted/unmounted */
	FATFS *fs		/* Pointer to new file system object (NULL for unmount)*/
)
{
	FATFS *rfs;


	if (drv >= _DRIVES)
		return FR_INVALID_DRIVE;

	rfs = FatFs[drv];

	if (rfs) {
#if _FS_REENTRANT					/* Discard mutex of the current fs. (Platform dependent) */
		CloseHandle(rfs->h_mutex);	/* Discard mutex */
#endif
		rfs->fs_type = 0;			/* Clear old fs object */
	}

	if (fs) {
		fs->fs_type = 0;	/* Clear new fs object */
#if _FS_REENTRANT				/* Create mutex for the new fs. (Platform dependent) */
		fs->h_mutex = CreateMutex(NULL, FALSE, NULL);
#endif
	}
	FatFs[drv] = fs;		/* Register new fs object */

	return FR_OK;
}




/*-----------------------------------------------------------------------*/
/* Open or Create a File                                                 */
/*-----------------------------------------------------------------------*/

FRESULT f_open (
	FIL *fp,			/* Pointer to the blank file object */
	const char *path,	/* Pointer to the file name */
	BYTE mode			/* Access mode and file open mode flags */
)
{
	FRESULT res;
	DIR dj;
	NAMEBUF(sfn, lfn);
	BYTE *dir;


	fp->fs = NULL;		/* Clear file object */
#if !_FS_READONLY
	mode &= (FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW);
	res = auto_mount(&path, &dj.fs, (BYTE)(mode & (FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)));
#else
	mode &= FA_READ;
	res = auto_mount(&path, &dj.fs, 0);
#endif
	if (res != FR_OK) LEAVE_FF(dj.fs, res);
	INITBUF(dj, sfn, lfn);
	res = follow_path(&dj, path);	/* Follow the file path */

#if !_FS_READONLY
	/* Create or Open a file */
	if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) {
		DWORD ps, cl;

		if (res != FR_OK) {		/* No file, create new */
			if (res == FR_NO_FILE)
				res = dir_register(&dj);
			if (res != FR_OK) LEAVE_FF(dj.fs, res);
			mode |= FA_CREATE_ALWAYS;
			dir = dj.dir;
		}
		else {					/* Any object is already existing */
			if (mode & FA_CREATE_NEW)			/* Cannot create new */
				LEAVE_FF(dj.fs, FR_EXIST);
			dir = dj.dir;
			if (!dir || (dir[DIR_Attr] & (AM_RDO | AM_DIR)))	/* Cannot overwrite it (R/O or DIR) */
				LEAVE_FF(dj.fs, FR_DENIED);
			if (mode & FA_CREATE_ALWAYS) {		/* Resize it to zero if needed */
				cl = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO);	/* Get start cluster */
				ST_WORD(dir+DIR_FstClusHI, 0);	/* cluster = 0 */
				ST_WORD(dir+DIR_FstClusLO, 0);
				ST_DWORD(dir+DIR_FileSize, 0);	/* size = 0 */
				dj.fs->wflag = 1;
				ps = dj.fs->winsect;			/* Remove the cluster chain */
				if (cl) {
					res = remove_chain(dj.fs, cl);
					if (res) LEAVE_FF(dj.fs, res);
					dj.fs->last_clust = cl - 1;	/* Reuse the cluster hole */
				}
				res = move_window(dj.fs, ps);
				if (res != FR_OK) LEAVE_FF(dj.fs, res);
			}
		}
		if (mode & FA_CREATE_ALWAYS) {
			dir[DIR_Attr] = 0;					/* Reset attribute */
			ps = get_fattime();
			ST_DWORD(dir+DIR_CrtTime, ps);		/* Created time */
			dj.fs->wflag = 1;
			mode |= FA__WRITTEN;				/* Set file changed flag */
		}
	}
	/* Open an existing file */
	else {
#endif /* !_FS_READONLY */
		if (res != FR_OK) LEAVE_FF(dj.fs, res);	/* Follow failed */
		dir = dj.dir;
		if (!dir || (dir[DIR_Attr] & AM_DIR))	/* It is a directory */
			LEAVE_FF(dj.fs, FR_NO_FILE);
#if !_FS_READONLY
		if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */
			LEAVE_FF(dj.fs, FR_DENIED);
	}
	fp->dir_sect = dj.fs->winsect;		/* Pointer to the directory entry */
	fp->dir_ptr = dj.dir;
#endif
	fp->flag = mode;					/* File access mode */
	fp->org_clust =						/* File start cluster */
		((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO);
	fp->fsize = LD_DWORD(dir+DIR_FileSize);	/* File size */
	fp->fptr = 0; fp->csect = 255;		/* File pointer */
	fp->dsect = 0;
	fp->fs = dj.fs; fp->id = dj.fs->id;	/* Owner file system object of the file */

	LEAVE_FF(dj.fs, FR_OK);
}




/*-----------------------------------------------------------------------*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区久本道91| 国产精品69毛片高清亚洲| 亚洲女人的天堂| 亚洲欧洲精品天堂一级| 中文字幕欧美三区| 国产精品动漫网站| 自拍偷拍欧美精品| 一区二区三区视频在线观看| 一区二区三区欧美视频| 亚洲夂夂婷婷色拍ww47| 亚洲成人动漫精品| 日本欧美韩国一区三区| 精品一区二区三区香蕉蜜桃| 激情小说欧美图片| 成人一级黄色片| 99国产一区二区三精品乱码| 色诱视频网站一区| 欧美午夜不卡在线观看免费| 这里只有精品视频在线观看| 欧美一区二区三区视频在线| 欧美成人乱码一区二区三区| 久久青草欧美一区二区三区| 国产精品国模大尺度视频| 亚洲人成精品久久久久| 亚洲图片有声小说| 日韩va亚洲va欧美va久久| 欧美精品视频www在线观看| 欧美精品高清视频| 久久精品一区二区三区不卡| 中文字幕一区日韩精品欧美| 亚洲成av人综合在线观看| 蓝色福利精品导航| www.性欧美| 欧美日韩精品专区| 久久一夜天堂av一区二区三区| 中文字幕欧美一区| 亚洲高清在线视频| 国产精品亚洲一区二区三区在线 | www.激情成人| 精品视频在线视频| 精品国产三级电影在线观看| 一区视频在线播放| 舔着乳尖日韩一区| 成人晚上爱看视频| 91精品国产综合久久精品性色| 久久亚洲综合av| 一区二区激情小说| 国产剧情一区二区三区| 欧美在线观看一二区| 精品国产网站在线观看| 亚洲精品午夜久久久| 精品一区二区免费| 91国在线观看| 国产免费久久精品| 五月天亚洲精品| 91在线免费视频观看| 26uuu亚洲综合色欧美| 一区二区成人在线视频| 国产乱子伦视频一区二区三区 | 26uuu久久综合| 亚洲蜜臀av乱码久久精品| 久久精品999| 欧美视频一区二区三区在线观看| 国产三区在线成人av| 亚洲1区2区3区4区| 99久久精品国产一区二区三区| 精品久久一二三区| 亚洲不卡av一区二区三区| 99r国产精品| 26uuu久久天堂性欧美| 天堂久久一区二区三区| 91最新地址在线播放| 国产亚洲欧美中文| 老司机精品视频一区二区三区| 欧美在线免费视屏| 自拍偷在线精品自拍偷无码专区| 国产剧情av麻豆香蕉精品| 欧美一区二区三区色| 亚洲一二三区不卡| 色94色欧美sute亚洲线路二| 中文久久乱码一区二区| 极品少妇一区二区三区精品视频 | 久久久av毛片精品| 老司机一区二区| 欧美男女性生活在线直播观看| 一区二区在线观看免费视频播放| 国产iv一区二区三区| 精品国产欧美一区二区| 青青青爽久久午夜综合久久午夜| 91成人免费在线视频| 亚洲精选在线视频| 91日韩在线专区| 国产精品免费网站在线观看| 高清不卡一二三区| 久久精品无码一区二区三区| 国产一区二区在线看| 精品久久久久久久久久久久久久久 | 日韩av电影天堂| 欧美绝品在线观看成人午夜影视| 亚洲精品水蜜桃| 色哟哟国产精品免费观看| 亚洲精品视频免费看| 99精品视频在线播放观看| 国产精品成人网| aaa欧美大片| 亚洲精品视频在线观看网站| 91蜜桃网址入口| 亚洲一区二区三区四区中文字幕 | 亚洲精品视频在线观看免费| 91国内精品野花午夜精品| 亚洲一区二区视频| 欧美日韩在线一区二区| 五月综合激情日本mⅴ| 欧美一区二区视频观看视频 | 在线这里只有精品| 亚洲成人免费在线| 欧美一区二区三区男人的天堂| 美女视频网站久久| 26uuu国产在线精品一区二区| 国产精品系列在线观看| 国产精品色婷婷久久58| av成人免费在线| 亚洲国产乱码最新视频| 91精品国产色综合久久不卡蜜臀| 蜜臀精品一区二区三区在线观看| 日韩精品中午字幕| 成人高清在线视频| 亚洲自拍另类综合| 日韩午夜激情免费电影| 国产91精品欧美| 亚洲免费av高清| 欧美一级高清片在线观看| 国产在线乱码一区二区三区| 中文字幕不卡在线观看| 亚洲天堂av一区| 欧美三区在线视频| 精品一二线国产| 最新日韩在线视频| 91精品国产综合久久香蕉麻豆| 国产精品一区专区| 亚洲综合成人网| 久久夜色精品国产欧美乱极品| 99精品欧美一区二区三区综合在线| 亚洲aaa精品| 久久久91精品国产一区二区精品 | 国产精品丝袜一区| 欧美美女一区二区三区| 国产一区二区日韩精品| 一区二区理论电影在线观看| 精品国产乱码久久久久久影片| av午夜精品一区二区三区| 日韩精品91亚洲二区在线观看| 久久久久久一二三区| 欧美三区在线观看| 成人av在线播放网址| 日韩成人免费电影| 亚洲欧洲99久久| 欧美videos大乳护士334| 一本色道久久综合精品竹菊| 国产综合色在线视频区| 一区二区成人在线观看| 国产清纯白嫩初高生在线观看91| 欧美日韩国产高清一区| 成人免费电影视频| 老司机午夜精品| 亚洲午夜三级在线| 中文字幕一区二区三区在线观看| 欧美不卡视频一区| 在线免费一区三区| 国产成人免费视| 蜜乳av一区二区三区| 亚洲一区在线观看免费 | 国产精品人成在线观看免费| 日韩一区二区三区av| 色诱亚洲精品久久久久久| 国产精品99久久久久久久女警| 日韩在线观看一区二区| 亚洲精品免费播放| 国产日韩欧美综合一区| 日韩精品一区二区三区在线观看| 在线观看网站黄不卡| 99re这里只有精品首页| 国产伦精品一区二区三区视频青涩| 天天综合色天天| 亚洲一区二区免费视频| 中文字幕一区在线观看| 精品免费一区二区三区| 欧美日本在线一区| 91成人在线观看喷潮| 91麻豆文化传媒在线观看| 国产成人在线色| 国产在线精品国自产拍免费| 免费观看在线综合色| 亚洲国产视频一区二区| 最新久久zyz资源站| 中文字幕中文字幕在线一区| 欧美激情一区二区| 日本一二三四高清不卡| 久久九九久久九九| 久久久久久久网|