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

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

?? fat_file.c

?? fat16文件系統源碼。需要的請下
?? C
?? 第 1 頁 / 共 3 頁
字號:

#define  FAT_GLOBAL

#include "type.h"
#include "global.h"
#include "hard.h"
#include "fat.h" 
#include "fat_h.h"   

#include <string.h>



//---------------------------------------------------------------------------------
void fat_read_sector(INT32U u32Sector)
{
   phy_read_open(u32Sector);
   phy_read_sector();
   phy_read_close();  
}



//---------------------------------------------------------------------------------
INT32U fat_U8_to_U32_LH(INT8U LSB, INT8U L, INT8U M, INT8U MSB)
{
   INT32U U32;
   
   U32 = ( ((INT32U)MSB) << 24 ) + ( ((INT32U)M) << 16 ) + ( ((INT32U)L) << 8 ) + LSB;
   return U32;
}


//---------------------------------------------------------------------------------
INT16U fat_U8_to_U16_LH(INT8U LSB, INT8U MSB)
{
   INT16U U16;
   
   U16 = ( ((INT16U)MSB) << 8 ) + LSB;
   return U16;
}



/*F**************************************************************************
* NAME: fat_initialize
*----------------------------------------------------------------------------
* PARAMS: none
*
* return:
*   - OK: intallation succeeded
*   - KO: - partition is not active
*         - FAT type is not FAT16 or FAT12
*         - MBR or PBR signatures are not correct
*         - low level read open failure
*----------------------------------------------------------------------------
* PURPOSE:
*   Install the fat system, read mbr, bootrecords...
*----------------------------------------------------------------------------
* NOTE:
*   if MBR not found, try to mount unpartitionned FAT
*   fat_ptr_fats = partition offset + nb_reserved_sector
*   fat_ptr_rdir = fat_ptr_fat + fat_size * nb_fat
*   fat_ptr_data = fat_ptr_rdir + nb_root_entries * 32 / sect_size
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte fat_initialize(void)
{          
	Byte i;
	Uint32 tot_sect;
	Uint32 fat_nb_sector;

  /* read and check usefull MBR info */
  /* go to the first partition field */
 //	fat_is_fat32 = 0;
 //	fat_is_fat16 = 0;

    fat_read_sector(MBR_ADDRESS);  // go to first partition entry

    /* check first partition state */
	if(gl_buffer[446]!=PARTITION_ACTIVE)
    {
       fat_ptr_fats = 0x00000000;            /* disk may not be partitionned */
    }
    else
    {
	     // ((Byte*)&fat_ptr_fats)[3] = gl_buffer[454];
	     // ((Byte*)&fat_ptr_fats)[2] = gl_buffer[455];
	     // ((Byte*)&fat_ptr_fats)[1] = gl_buffer[456];
	     // ((Byte*)&fat_ptr_fats)[0] = gl_buffer[457];  
	      
	      fat_ptr_fats = fat_U8_to_U32_LH(gl_buffer[454], gl_buffer[455], gl_buffer[456], gl_buffer[457]); 
	      
	      /* go to the MBR signature field */
	
	      if ((gl_buffer[510] != LOW(BR_SIGNATURE)) ||
	          (gl_buffer[511] != HIGH(BR_SIGNATURE)))    
	      {
	        fat_ptr_fats = 0x00000000;          /* disk may not be partitionned */
	      }
    }

    /* read and check usefull PBR info */
    fat_read_sector(fat_ptr_fats);

	//((Byte*)&fat_sector_size)[1] = gl_buffer[11];
	//((Byte*)&fat_sector_size)[0] = gl_buffer[12];
	
    fat_sector_size = fat_U8_to_U16_LH(gl_buffer[11], gl_buffer[12]);

    if((fat_sector_size != 512) && (fat_sector_size != 2048))
	{
	   if((gl_buffer[510] == 0x55) && (gl_buffer[511] == 0xaa))
	   {
	       Uint16 u16Count = 0;
	       while(1)
		   {
	          fat_read_sector(++ fat_ptr_fats);
	          
			  if((gl_buffer[0] == 0xeb)||(gl_buffer[0] == 0xe9))
			  {
			  	// ((Byte*)&fat_sector_size)[1] = gl_buffer[11];
		        // ((Byte*)&fat_sector_size)[0] = gl_buffer[12];
		         fat_sector_size = fat_U8_to_U16_LH(gl_buffer[11], gl_buffer[12]);
		         
	             if((fat_sector_size == 512)||(fat_sector_size == 2048))
				 {
                    break;
                 }
			  }
			  u16Count++;
			  if(u16Count == 0xFFFF)
			  {
                 break;
			  }
		   }
		}
	}

    /* read cluster size (in sector) */
    fat_cluster_size = gl_buffer[13]; //Hard_read_byte();
//    fat_cluster_mask = HIGH((Uint16)fat_cluster_size * fat_sector_size) - 1;
    /* compute FATs sector address: add reserved sector number */
    fat_ptr_fats += gl_buffer[14];
    fat_ptr_fats += ((Uint16)(gl_buffer[15])) << 8;  
    /* read number of FATs */
    i = gl_buffer[16];
    if (i == 2)
       fat_2_is_present = TRUE;
    else
      fat_2_is_present = FALSE;
    /* read number of dir entries  and compute rdir offset */
    

   // ((Byte*)&fat_ptr_data)[3] = gl_buffer[17];
   // ((Byte*)&fat_ptr_data)[2] = gl_buffer[18];
   // ((Byte*)&fat_ptr_data)[1] = 0;
   // ((Byte*)&fat_ptr_data)[0] = 0;
   
    fat_ptr_data = fat_U8_to_U32_LH(gl_buffer[17],gl_buffer[18],0,0); 

	fat_root_entries = (Uint16)(fat_ptr_data);

    fat_ptr_data = (fat_ptr_data * DIR_SIZE) /fat_sector_size;

	/* read number of sector in partition (<32Mb) */
	//((Byte*)&fat_nb_sector)[3] =  gl_buffer[19];
	//((Byte*)&fat_nb_sector)[2] =  gl_buffer[20];
	//((Byte*)&fat_nb_sector)[1] = 0x00;
	//((Byte*)&fat_nb_sector)[0] = 0x00;
	fat_nb_sector = fat_U8_to_U32_LH(gl_buffer[19],gl_buffer[20],0,0);
  
    /* read number of sector in partition (>32Mb) */
    //((Byte*)&fat_nb_sector)[3] += gl_buffer[32]; 
    //((Byte*)&fat_nb_sector)[2] += gl_buffer[33]; 
   // ((Byte*)&fat_nb_sector)[1] += gl_buffer[34]; 
   // ((Byte*)&fat_nb_sector)[0] += gl_buffer[35]; 
   
    fat_nb_sector = fat_U8_to_U32_LH(gl_buffer[32],gl_buffer[33],gl_buffer[34],gl_buffer[35]);
////////////////////////////////////////////////////////////////////////////////////
	//((Byte*)&fat_fat_size)[3] = gl_buffer[22]; 
   // ((Byte*)&fat_fat_size)[2] = gl_buffer[23]; 
    //((Byte*)&fat_fat_size)[1] = 0; 
   // ((Byte*)&fat_fat_size)[0] = 0;	
    fat_fat_size = fat_U8_to_U32_LH(gl_buffer[22],gl_buffer[23],0,0);

	if(fat_fat_size == 0)
	{
		//((Byte*)&fat_fat_size)[3] += gl_buffer[36]; 
	   // ((Byte*)&fat_fat_size)[2] += gl_buffer[37]; 
	   // ((Byte*)&fat_fat_size)[1] += gl_buffer[38]; 
	   // ((Byte*)&fat_fat_size)[0] += gl_buffer[39];
	   fat_fat_size = fat_U8_to_U32_LH(gl_buffer[36],gl_buffer[37],gl_buffer[38],gl_buffer[39]);
	   
	}
    
	fat_ptr_rdir = i * fat_fat_size;
	fat_ptr_rdir += fat_ptr_fats;
/////////////////////////////////////////////////////////////////////////////////////
    tot_sect = fat_nb_sector - (1 + (i * fat_fat_size) + fat_ptr_data);
    fat_count_of_clusters = tot_sect / fat_cluster_size;

    if (fat_count_of_clusters <= MAX_CLUSTERS12)
       fat_type_id = FAT_IS_12;
    else if (fat_count_of_clusters <= MAX_CLUSTERS16)
        fat_type_id = FAT_IS_16;
	else
	{
		fat_type_id = FAT_IS_32;
		
		//((Byte*)&fat32_root_cluster)[3] = gl_buffer[44];
		//((Byte*)&fat32_root_cluster)[2] = gl_buffer[45];
		//((Byte*)&fat32_root_cluster)[1] = gl_buffer[46];
		//((Byte*)&fat32_root_cluster)[0] = gl_buffer[47];
		fat32_root_cluster = fat_U8_to_U32_LH(gl_buffer[44],gl_buffer[45],gl_buffer[46],gl_buffer[47]);
	}
    /* else is FAT32 not supported */

    /* compute data sector address */
    fat_ptr_data += fat_ptr_rdir;

	fat_max_cluster_number = (Uint16)(104857600 /(((Uint32)fat_sector_size) * fat_cluster_size)) + 2;

//	fat_2_is_present = 0;	// improve speed

    /* go to the signature field */
    if(0x200 != fat_sector_size)
	     return KO;

     return OK;
}


/*F**************************************************************************
* NAME: fat_goto_rootdir
*----------------------------------------------------------------------------
* PARAMS: none
*----------------------------------------------------------------------------
* PURPOSE:
*   go to root diretory
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void fat_goto_rootdir(void)
{
	Byte i;
   	fat_dir_current_sect = fat_ptr_rdir;
   	fat_dclust_byte_count = 0;
   	fat_dir_sector_offset = 0;
    fat_fsave_read_handle = 0;
   	dir_is_root = TRUE;

	//init fsave struct
	fat_fsave_index = 0;
	for(i=0; i<MAX_SUBDIR_DEPTH; i++)
	{
		fat_fsave[i].index = 0;
		fat_fsave[i].file = SCAN_XXX;	
	}


#if COMPILE_FAT_32 == TRUE
	if(fat_type_id == FAT_IS_32)
	{
		fat_cache.current.start_cluster.l = fat32_root_cluster;
		fat_get_clusters(&dclusters, MAX_DIR_FRAGMENT_NUMBER);
	}
#endif
	
}

/*F**************************************************************************
* NAME: fat_get_dir_entry
*----------------------------------------------------------------------------
* PARAMS:
*   entry: directory entry structure
* return: none
*----------------------------------------------------------------------------
* PURPOSE:
*   Get from directory all information about a directory or file entry
*----------------------------------------------------------------------------
* NOTE:
*   This function reads directly datas from sectors
*   It automaticaly computes difference between LFN and normal entries
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void fat_get_dir_entry (fat_st_dir_entry  *entry)
{
	Byte    exit_flag = FALSE;
	Byte    lfn_entry_found = FALSE;
	Byte    i;
	Uint16  num;
	Uint16  j;
	Byte flag;
	byte count;

  	num = fat_dir_sector_offset; /*number of bytes to seek in a cluster*/
  	flag = FALSE;
  	count = 0;

 	for (i=MAX_FILENAME_LEN; i!=0; lfn_name[--i] = '\0');

  	phy_read_sector();

  	//num = num%fat_sector_size;

  	while (!exit_flag)
  	/* loop while the entry is not a normal one. */
  	{
	    /* read the directory entry */
      	if(flag == TRUE)
      	{
		    if ((dir_is_root == TRUE)&&(fat_type_id != FAT_IS_32))
		    { 
				 if((num%fat_sector_size)==0)
				 {
				  	  //phy_read_open(fat_ptr_rdir+n);
					  phy_read_sector();
				      num=0;		
				 }
			}
		    else
		    { /* subdir can be fragmented -> dgetc() */
				 if(num % fat_sector_size == 0 )
				 {
			         fat_dgetsector();
					 num=0;
				 }
			}
      	}
      
        j = num;			  
	    num += DIR_SIZE;
        flag = TRUE;
        

       	/*computes gathered data        */
       	/* check if we have a LFN entry */
      	if (gl_buffer[11+j] != ATTR_LFN_ENTRY)
       	{
	      	if (!lfn_entry_found)
	      	{
		        /* true DOS 8.3 entry format */
		        for (i = 0; i < 8; i++)
		        {
		          	lfn_name[i] = gl_buffer[i+j];
		          
		          	if (lfn_name[i] == ' ')
		          	{ /* space is end of name */
		            	break;
		          	}
		        }
		        /* append extension */
				if((gl_buffer[11+j] & ATTR_DIRECTORY )!= ATTR_DIRECTORY)
				{
			        lfn_name[i++] = '.';
				}
			    lfn_name[i++] = gl_buffer[8+j];
			    lfn_name[i++] = gl_buffer[9+j];
			    lfn_name[i++] = gl_buffer[10+j];

			    lfn_name[i] = '\0';        /* end of string */				
		  	}	        
	      	else
	      	{ // LFN name treatment //

               	i = 0;
			   	while((lfn_name[i] != '\0') && (lfn_name[i] != 0xff))
			   	{
			       	i++;
			   	}
			   	lfn_name[i] = '\0';
	      	}
	
	      	/* store extension */
	      	ext[0]= gl_buffer[8+j];
	      	ext[1]= gl_buffer[9+j];
	      	ext[2]= gl_buffer[10+j];
	
	      	/* standard computing for normal entry */
	      	entry->attributes = gl_buffer[11+j];
	      	entry->start_cluster.b[0] = gl_buffer[26+j];
			entry->start_cluster.b[1] = gl_buffer[27+j];
			entry->start_cluster.b[2] = gl_buffer[20+j];
			entry->start_cluster.b[3] = gl_buffer[21+j];
	      	//entry->start_cluster += ((Uint16) gl_buffer[27+j]) << 8;
	      	entry->size.b[0] = gl_buffer[28+j];
	      	entry->size.b[1] = gl_buffer[29+j];
	      	entry->size.b[2] = gl_buffer[30+j];
	      	entry->size.b[3] = gl_buffer[31+j];
	      	/* now it's time to stop */
	      	exit_flag = TRUE;

	  	}// end  if (name_buffer[11] != ATTR_LFN_ENTRY)
      	else
	  	{
          	lfn_entry_found = TRUE;
		  	//lfn_name[0] = 'L';
		  if(count < 5)
          {	
			  if((gl_buffer[0 + j] & LFN_SEQ_MASK) <= MAX_LFN_ENTRIES)
			  {
				  for(i=0; i<5; i++)
				  {
				     lfn_name[i*2 + 26*((gl_buffer[0+j] & LFN_SEQ_MASK) - 1) + 1] = gl_buffer[2*i + 1 +j];
				     lfn_name[i*2 + 26*((gl_buffer[0+j] & LFN_SEQ_MASK) - 1)] = gl_buffer[2*i + 2 +j];
				  }
				  for(i=0; i<6; i++)
				  {
				     lfn_name[i*2 + 10 + 26*((gl_buffer[0+j] & LFN_SEQ_MASK) - 1) + 1] = gl_buffer[2*i + 14 +j];
				     lfn_name[i*2 + 10 + 26*((gl_buffer[0+j] & LFN_SEQ_MASK) - 1)] = gl_buffer[2*i + 15 +j];
				  }
				  for(i=0; i<2; i++)
				  {
				     lfn_name[i*2 + 22 + 26*((gl_buffer[0+j] & LFN_SEQ_MASK) - 1) + 1] = gl_buffer[2*i + 28 +j];
				     lfn_name[i*2 + 22 + 26*((gl_buffer[0+j] & LFN_SEQ_MASK) - 1)] = gl_buffer[2*i + 29 +j];
				  }
			 }
		 }
          	count++;
	   	}                
    }//end while
   	phy_read_close();                        /* close physical read */

}




/*F**************************************************************************
* NAME: fat_dgetsector
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   Return the directory data page at the current position
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/ 
void fat_dgetsector (void)
{
  	Uint32 next_cluster;  
    /* new cluster in allocation list */
//  	if((fat_dclust_byte_count % (fat_sector_size * fat_cluster_size)) == 0 )
	if(((fat_dclust_byte_count / fat_sector_size) % fat_cluster_size) == 0 )
  	{
	    //fat_dclust_byte_count=0;
		/* extract if necessary the next cluster from the allocation list */
		if ((dclusters[fat_dchain_index].number == fat_dchain_nb_clust)&&(dclusters[0].number != 0))
		{ /* new fragment */
		  	fat_dchain_index++;
		  	fat_dchain_nb_clust = 1;
		  	next_cluster = dclusters[fat_dchain_index].cluster.l;
		  	fat_dir_current_sect = fat_ptr_data + ((Uint32)(next_cluster) * fat_cluster_size);
		  	phy_read_open(fat_dir_current_sect);
		}
		else
		{ /* no new fragment */
		  	if(dclusters[fat_dchain_index].number == 0)
		  	 	fat_dchain_nb_clust = 0;
		  	//next_cluster = dclusters[fat_dchain_index].cluster + fat_dchain_nb_clust;
		  	next_cluster = dclusters[fat_dchain_index].cluster.l + fat_dchain_nb_clust;
		  	fat_dir_current_sect = fat_ptr_data + ((Uint32)(next_cluster) * fat_cluster_size);
		  //if((fat_dchain_index == 0)&&(fat_dchain_nb_clust == 0))
          //{
			  phy_read_open(fat_dir_current_sect);
          //}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性色aⅴ视频一区日韩精品| 国产精品2024| 亚洲靠逼com| 亚洲国产日日夜夜| 免费成人美女在线观看.| 国产在线看一区| 成人黄色综合网站| 欧美视频一区在线| 91精品国产综合久久精品麻豆| 国产激情一区二区三区四区| 国内欧美视频一区二区| 亚洲影院在线观看| 最新高清无码专区| 亚洲无人区一区| 日韩欧美卡一卡二| 中国色在线观看另类| 欧美一区二区三区爱爱| 26uuu色噜噜精品一区二区| 国产免费久久精品| 亚洲国产精品成人久久综合一区 | 色哟哟在线观看一区二区三区| 亚洲一区二区黄色| 99久久99久久精品国产片果冻| 亚洲国产精品t66y| 奇米精品一区二区三区在线观看一| 国产精品久久久久久久久快鸭| 日本不卡高清视频| 91精品欧美一区二区三区综合在| 久久精品视频在线免费观看| 日韩激情av在线| 欧美在线高清视频| 久久99这里只有精品| 日韩亚洲欧美在线| 国产大陆a不卡| 久久久蜜桃精品| 福利电影一区二区三区| 久久只精品国产| 99久久综合狠狠综合久久| 欧美在线短视频| 国产三级精品三级| 精品一区二区三区在线视频| 69堂精品视频| 亚洲精品国产a| 在线观看不卡一区| 成人欧美一区二区三区黑人麻豆| 波多野结衣欧美| 97精品国产97久久久久久久久久久久| 亚洲国产高清不卡| 粉嫩aⅴ一区二区三区四区| 中文字幕一区二区5566日韩| 一区二区高清视频在线观看| 欧美日韩精品一区二区三区四区| 日本伊人精品一区二区三区观看方式 | 成人免费av在线| 成人精品小蝌蚪| 国产精品自拍三区| 国产精品黄色在线观看 | 国产视频一区在线播放| 一区二区三区日韩| 欧美在线视频全部完| 亚洲动漫第一页| 欧美日韩日日夜夜| caoporn国产精品| 极品销魂美女一区二区三区| 亚洲欧美二区三区| 精品一区二区三区免费毛片爱| 亚洲日穴在线视频| 亚洲精品高清视频在线观看| 欧美www视频| jizzjizzjizz欧美| 日本 国产 欧美色综合| 亚洲高清视频的网址| 欧美成人欧美edvon| 9191精品国产综合久久久久久| 国产一区亚洲一区| 国产呦精品一区二区三区网站| 欧美日韩一区二区在线观看| 成人黄页毛片网站| 同产精品九九九| 中文字幕av不卡| 欧美一区在线视频| 91日韩精品一区| 色噜噜狠狠色综合中国| 国产精品久久久久久亚洲伦| 国产日韩亚洲欧美综合| 99久久99久久综合| 欧美另类久久久品| 亚洲精品在线观看视频| 欧洲国内综合视频| 一本大道久久a久久综合| 国产精品福利一区| 一区二区免费看| 亚洲人成影院在线观看| 香蕉久久夜色精品国产使用方法 | 亚洲国产激情av| 亚洲欧美激情在线| 日韩三级在线观看| 制服视频三区第一页精品| 亚洲精品网站在线观看| 亚洲人成网站影音先锋播放| 一区二区三区欧美视频| 精品伦理精品一区| 精品国免费一区二区三区| 国产丶欧美丶日本不卡视频| 欧美日产在线观看| 国产农村妇女毛片精品久久麻豆| 一区二区三区免费| 另类专区欧美蜜桃臀第一页| 秋霞电影网一区二区| 一本色道久久综合狠狠躁的推荐| 一区二区三区高清在线| 国产99久久久国产精品潘金| 床上的激情91.| 色中色一区二区| 国产欧美一区二区在线| 91女人视频在线观看| 久久久无码精品亚洲日韩按摩| 色婷婷激情一区二区三区| 91小视频免费看| 亚洲日本中文字幕区| 欧美日精品一区视频| 亚洲小说欧美激情另类| 色老头久久综合| 亚洲欧洲中文日韩久久av乱码| 欧美三级资源在线| 精品av综合导航| 国产精品影视在线| www.亚洲免费av| 亚洲欧美影音先锋| 色婷婷激情一区二区三区| 亚洲视频资源在线| 欧美日韩亚洲不卡| 在线观看网站黄不卡| 2020日本不卡一区二区视频| 国产凹凸在线观看一区二区| 欧美性感一区二区三区| 日本中文字幕一区二区视频| 欧美日韩亚洲国产综合| 亚洲一区视频在线| 日韩天堂在线观看| 日韩一区二区电影| 国产91精品一区二区麻豆网站| 国产欧美日韩在线视频| 在线不卡的av| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 在线观看91视频| 国产精品亚洲视频| 亚洲午夜av在线| 欧美mv日韩mv国产| 亚洲午夜久久久久久久久电影院| 日韩精品在线看片z| 色久优优欧美色久优优| 一级精品视频在线观看宜春院 | 韩国女主播一区二区三区| 亚洲欧洲日韩女同| 亚洲成国产人片在线观看| 欧美成人激情免费网| 波多野结衣视频一区| 国产精品久久久久久久午夜片| 在线不卡的av| 欧美一区二区三区免费| 欧美福利视频导航| 欧美三级乱人伦电影| 久久众筹精品私拍模特| 在线看国产日韩| 欧美视频在线不卡| 国产自产视频一区二区三区| 午夜电影一区二区| 亚洲柠檬福利资源导航| 精品国产露脸精彩对白| 精品国产乱码久久久久久蜜臀| 4hu四虎永久在线影院成人| 国产91精品露脸国语对白| 国产乱国产乱300精品| 婷婷久久综合九色综合伊人色| 久久久综合精品| 欧美国产国产综合| 国产精品美女久久久久高潮| 在线观看91av| 国产亚洲综合在线| 国产精品理论在线观看| 亚洲男人的天堂在线观看| 亚洲图片欧美一区| 国产一区二区在线看| 成人黄色在线视频| 色综合久久综合中文综合网| 国产在线精品国自产拍免费| 午夜精品免费在线观看| 国内久久精品视频| 欧美一区二区精品久久911| 久久综合九色综合97_久久久| 国产精品蜜臀在线观看| 99久久综合色| 欧美精选午夜久久久乱码6080| 26uuu久久天堂性欧美| 不卡视频一二三四| www.成人在线| 91美女蜜桃在线| 色综合天天综合网天天狠天天| 91免费版pro下载短视频|