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

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

?? fat_ioct.c

?? ucfs的源代碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  Description:
  FS internal function. Store information about used/unused clusters
  in a FS_DISKFREE_T data structure.

  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  pDiskData   - Pointer to a FS_DISKFREE_T data structure.
  
  Return value:
  ==0         - Information is stored in pDiskData.
  <0          - An error has occured.
*/

static int _FS_fat_GetTotalFree(int Idx, FS_u32 Unit, FS_DISKFREE_T *pDiskData) {
  FS_u32 freeclust;
  FS_u32 usedclust;
  FS_u32 totclust;
  FS_u32 fatentry;
  FS_u32 fatsize;
  FS_i32 fatoffs;
  FS_i32 bytespersec;
  FS_i32 cursec;
  FS_i32 fatsec;
  FS_i32 lastsec;
  FS_i32 fatindex;
  int fattype;
  int err;
  char *buffer;
  unsigned char a;
  unsigned char b;
#if (FS_FAT_NOFAT32==0)
  unsigned char c;
  unsigned char d;
#endif
  
  if (!pDiskData) {
    return -1;  /* No pointer to a FS_DISKFREE_T structure */
  }
  buffer = FS__fat_malloc(FS_FAT_SEC_SIZE);
  if (!buffer) {
    return -1;
  }
  fattype = FS__fat_which_type(Idx, Unit);
#if (FS_FAT_NOFAT32!=0)
  if (fattype == 2) {
    FS__fat_free(buffer);
    return -1;
  }
#endif /* FS_FAT_NOFAT32!=0 */
  fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz16;
  if (fatsize == 0) {
    fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz32;
  }
  bytespersec = (FS_i32)FS__FAT_aBPBUnit[Idx][Unit].BytesPerSec;
  /* Calculate total allocation units on disk */
  totclust = FS__FAT_aBPBUnit[Idx][Unit].TotSec16;
  if (!totclust) {
    totclust = FS__FAT_aBPBUnit[Idx][Unit].TotSec32;
  }
  totclust  -= FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt;
  totclust  -= 2*fatsize;
  usedclust  = FS__FAT_aBPBUnit[Idx][Unit].RootEntCnt;
  usedclust *= 0x20;
  usedclust /= bytespersec;
  totclust  -= usedclust;
  totclust  /= FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
  /* Scan FAT for free and used entries */
  cursec     = 0;
  fatsec     = 0;
  lastsec    = -1;
  fatentry   = 0xffffUL;
  freeclust  = 0;
  usedclust  = 0;
  while (1) {
    if (cursec >= (FS_i32)totclust) {
      break;  /* Last cluster reached */
    }
    if (fatsec >= (FS_i32)fatsize + FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt) {
      break;  /* End of FAT reached */
    }
    if (fattype == 1) {
      fatindex = (cursec + 2) + ((cursec + 2) / 2);    /* FAT12 */
    }
    else if (fattype == 2) {
      fatindex = (cursec + 2) * 4;               /* FAT32 */
    }
    else {
      fatindex = (cursec + 2) * 2;               /* FAT16 */
    }
    fatsec = FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt + (fatindex / bytespersec);
    fatoffs = fatindex % bytespersec;
    if (fatsec != lastsec) {
      err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
      if (err < 0) {
        err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec, (void*)buffer);
        if (err < 0) {
          FS__fat_free(buffer);
          return -1;
        }
        /* Try to repair original FAT sector with contents of copy */
        FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
      }
      lastsec = fatsec;
    }
    if (fattype == 1) {
      if (fatoffs == (bytespersec - 1)) {
        a = buffer[fatoffs];
        err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsec+1, (void*)buffer);
        if (err < 0) {
          err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec + 1, (void*)buffer);
          if (err < 0) {
            FS__fat_free(buffer);
            return -1;
          }
          /* Try to repair original FAT sector with contents of copy */
          FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec + 1, (void*)buffer);
        }
        lastsec = fatsec + 1;
        b = buffer[0];
      }
      else {
        a = buffer[fatoffs];
        b = buffer[fatoffs + 1];
      }
      if (cursec & 1) {
        fatentry = ((a & 0xf0) >> 4 ) + 16 * b;
      }
      else {
        fatentry = a + 256 * (b & 0x0f);
      }
      fatentry &= 0x0fff;
    }
#if (FS_FAT_NOFAT32==0)
    else if (fattype == 2) {
      a = buffer[fatoffs];
      b = buffer[fatoffs + 1];
      c = buffer[fatoffs + 2];
      d = buffer[fatoffs + 3];
      fatentry = a + 0x100UL * b + 0x10000UL * c + 0x1000000UL * d;
      fatentry &= 0x0fffffffUL;
    }
#endif /* FS_FAT_NOFAT32==0 */
    else {
      a = buffer[fatoffs];
      b = buffer[fatoffs + 1];
      fatentry = a + 256 * b;
      fatentry &= 0xffffUL;
    }
    cursec++;
    if (fatentry == 0) {
      freeclust++;
    }
    else {
      usedclust++;
    }
  }
  FS__fat_free(buffer);
  pDiskData->total_clusters      = totclust;
  pDiskData->avail_clusters      = freeclust;
  pDiskData->sectors_per_cluster = FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
  pDiskData->bytes_per_sector    = (FS_u16)bytespersec;
  return 0;
}

#endif /* FS_FAT_DISKINFO */


/*********************************************************************
*
*             Global functions
*
**********************************************************************
*/

/*********************************************************************
*
*             FS__fat_ioctl
*
  Description:
  FS internal function. Execute device command. The FAT layer checks
  first, if it has to process the command (e.g. format). Any other
  command is passed to the device driver.

  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  Cmd         - Command to be executed.
  Aux         - Parameter depending on command.
  pBuffer     - Pointer to a buffer used for the command.
  
  Return value:
  Command specific. In general a negative value means an error.
*/

int FS__fat_ioctl(int Idx, FS_u32 Unit, FS_i32 Cmd, FS_i32 Aux, void *pBuffer) {
  int x;
#if ((FS_SUPPORT_SEC_ACCESS) || (FS_FAT_NOFORMAT==0))
  int i;
#endif
#if (FS_FAT_NOFORMAT==0)
  int j;
#endif

  FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_INC_BUSYCNT, 0, (void*)0);  /* Turn on busy signal */
#if (FS_FAT_NOFORMAT==0)
  if (Cmd == FS_CMD_FORMAT_MEDIA) {
    j = 0;
    while (1) {
      if (j >= FS_KNOWNMEDIA_NUM) {
        break;  /* Not a known media */
      }
      if (_FS_wd_format_media_table[j].media_id == Aux) {
        break;  /* Media found in the list */
      }
      j++;
    }	//find the right media
    if (j >= FS_KNOWNMEDIA_NUM) {	//can't find the right media
      FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
      return -1;
    }
    i = FS__lb_status(FS__pDevInfo[Idx].devdriver, Unit);	//get status of device, if ok return 1
    if (i >= 0) {
      x = _FS_fat_format(FS__pDevInfo[Idx].devdriver,
                          Unit,
                          _FS_wd_format_media_table[j].secperclus,
                          _FS_wd_format_media_table[j].rootentcnt,
                          _FS_wd_format_media_table[j].totsec16,
                          _FS_wd_format_media_table[j].totsec32,
                          _FS_wd_format_media_table[j].media,
                          _FS_wd_format_media_table[j].fatsz16,
                          0,
                          _FS_wd_format_media_table[j].secpertrk,
                          _FS_wd_format_media_table[j].numheads,
                          _FS_wd_format_media_table[j].hiddsec,
                          _FS_wd_format_media_table[j].fsystype);
      i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_FLUSH_CACHE, 0, (void*)0);
      if (i < 0) {
        x = i;
      }
      else {
        /* Invalidate BPB */
        for (i = 0; i < (int)FS__maxdev; i++) {
          for (j = 0; j < (int)FS__fat_maxunit; j++) {
              FS__FAT_aBPBUnit[i][j].Signature = 0x0000;
          }
        }
      }
    }
    else {
      FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
      return -1;
    }
  }
  else if (Cmd == FS_CMD_FORMAT_AUTO) {
    i = FS__lb_status(FS__pDevInfo[Idx].devdriver, Unit);
    if (i >= 0) {
      x = _FS_FAT_AutoFormat(Idx, Unit);
      i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_FLUSH_CACHE, 0, (void*)0);
      if (i < 0) {
        x = i;
      }
    }
    else {
      x = -1;
    }
  }
#else /* FS_FAT_NOFORMAT==0 */
  if (Cmd == FS_CMD_FORMAT_MEDIA) {
    x = -1;  /* Format command is not supported */
  }
#endif /* FS_FAT_NOFORMAT==0 */
#if FS_FAT_DISKINFO
  else if (Cmd == FS_CMD_GET_DISKFREE) {
    i = FS__fat_checkunit(Idx, Unit);
    if (i > 0) {
      x = _FS_fat_GetTotalFree(Idx, Unit, (FS_DISKFREE_T*)pBuffer);
      i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_FLUSH_CACHE, 0, (void*)0);
      if (i < 0) {
        x = i;
      }
    }
    else {
      x = -1;
    }
  }
#else /* FS_FAT_DISKINFO==0 */
  else if (Cmd == FS_CMD_GET_DISKFREE) {
    x = -1; /* Diskinfo command not supported */
  }
#endif /* FS_FAT_DISKINFO */
#if FS_SUPPORT_SEC_ACCESS
  else if ((Cmd == FS_CMD_READ_SECTOR) || (Cmd == FS_CMD_WRITE_SECTOR)) {
    if (!pBuffer) {
      FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);
      return -1;
    }
    i = FS__lb_status(FS__pDevInfo[Idx].devdriver, Unit);
    if (i >= 0) {
      if (Cmd == FS_CMD_READ_SECTOR) {
        x = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, Aux, pBuffer);
      }
      else {
        x = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, Aux, pBuffer);
      }
    }
    else {
      x = -1;
    }
  }
#else /* FS_SUPPORT_SEC_ACCESS */
  else if ((Cmd == FS_CMD_READ_SECTOR) || (Cmd == FS_CMD_WRITE_SECTOR)) {
    FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);
    return -1;
  }
#endif /* FS_SUPPORT_SEC_ACCESS */
  else {
    /* Maybe command for driver */
    x = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, Cmd, Aux, (void*)pBuffer);
  }
  FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
  return x;
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩激情一区| 国产成人鲁色资源国产91色综 | 欧美乱熟臀69xxxxxx| a美女胸又www黄视频久久| 国产一区二区0| 国产麻豆精品在线| 国产高清视频一区| 国产成人午夜精品影院观看视频 | 久久午夜羞羞影院免费观看| 欧美精品久久久久久久多人混战| 国产喂奶挤奶一区二区三区| 日韩欧美久久一区| 日韩免费成人网| 久久青草欧美一区二区三区| 久久久高清一区二区三区| 欧美国产日韩一二三区| 亚洲蜜臀av乱码久久精品| 亚洲一区二区三区在线播放| 亚洲色大成网站www久久九九| 一区二区三区四区不卡视频| 亚洲一区二区三区小说| 天天综合网 天天综合色| 韩国成人在线视频| 成人福利视频网站| 欧美三级午夜理伦三级中视频| 日韩一区二区电影网| 国产午夜精品一区二区三区嫩草| 亚洲欧美综合在线精品| 日韩电影免费一区| 成人激情av网| 91精品国产色综合久久| 日本一区二区免费在线观看视频 | 欧美一区二区在线看| 久久综合av免费| 美洲天堂一区二卡三卡四卡视频| 精品在线视频一区| 91亚洲精品乱码久久久久久蜜桃 | 国产.精品.日韩.另类.中文.在线.播放| 国产宾馆实践打屁股91| 欧美日韩在线综合| 国产欧美va欧美不卡在线| 午夜成人在线视频| www.激情成人| 欧美精品一区男女天堂| 亚洲精品国产a| 国产精选一区二区三区 | 亚洲成人资源在线| 国产91露脸合集magnet| 91精品国产入口在线| 亚洲三级免费观看| 韩国精品主播一区二区在线观看| 色婷婷国产精品| 欧美国产日本视频| 精品一区二区三区影院在线午夜 | 亚洲欧美日韩综合aⅴ视频| 日本午夜精品一区二区三区电影| 一本久久a久久免费精品不卡| 精品国产精品一区二区夜夜嗨| 性做久久久久久久久| 色综合久久久网| 中国av一区二区三区| 久久99国产精品尤物| 制服丝袜在线91| 亚洲综合一二区| 91丨porny丨在线| 国产日韩精品一区二区三区| 蜜桃久久av一区| 欧美久久久久久蜜桃| 曰韩精品一区二区| 色婷婷精品久久二区二区蜜臂av | 99国产精品国产精品毛片| 亚洲精品在线一区二区| 日本在线播放一区二区三区| 欧美日韩亚洲国产综合| 亚洲在线观看免费视频| 91偷拍与自偷拍精品| **欧美大码日韩| 91首页免费视频| 亚洲一线二线三线视频| 欧美日韩视频在线一区二区| 亚洲国产色一区| 337p亚洲精品色噜噜| 久久66热re国产| 国产色综合一区| 99热99精品| 亚洲一区二区av在线| 精品视频1区2区| 美女视频一区在线观看| 国产午夜精品一区二区三区四区 | 老司机免费视频一区二区 | av综合在线播放| 亚洲国产日韩在线一区模特| 欧美日韩日本视频| 麻豆精品视频在线观看| 久久香蕉国产线看观看99| 懂色av中文一区二区三区| 国产精品久久久久久久久图文区| 91在线丨porny丨国产| 一区二区三区在线观看视频| 欧美日韩国产天堂| 久久99精品久久久久久久久久久久 | 久久久国产精品午夜一区ai换脸| 成人av午夜电影| 亚洲一区二区三区四区五区中文| 91麻豆精品91久久久久久清纯| 精品一区在线看| 亚洲精品欧美在线| 欧美一区二区三区日韩| 高清不卡一区二区在线| 亚洲美女视频一区| 欧美一级电影网站| 92精品国产成人观看免费 | 久久久久久综合| 在线日韩一区二区| 国产成人综合网站| 亚洲成av人片一区二区三区| 亚洲国产精品高清| 欧美一区二区三区成人| 成人app软件下载大全免费| 日韩av电影免费观看高清完整版 | 日本欧美肥老太交大片| 国产精品卡一卡二卡三| 日韩一区二区视频| 色婷婷久久久亚洲一区二区三区| 韩国视频一区二区| 亚洲成a人v欧美综合天堂| 中文字幕一区免费在线观看| 日韩免费视频线观看| 色综合久久久久网| 国产精品一二三区| 奇米色一区二区三区四区| 中文字幕一区二区三区四区| 日韩欧美在线一区二区三区| 在线一区二区观看| 国产精品一区二区久久精品爱涩| 日韩国产精品大片| 亚洲亚洲人成综合网络| 亚洲男人天堂av网| 日韩毛片精品高清免费| 国产三级精品在线| 久久精品欧美日韩| 日韩欧美国产综合在线一区二区三区| 91美女蜜桃在线| 99re66热这里只有精品3直播| 国产精品一二三四区| 国产一区二区三区不卡在线观看| 午夜电影网一区| 午夜电影网亚洲视频| 亚洲一区二区在线观看视频| 亚洲伦理在线精品| 亚洲精品视频免费观看| 一区二区三区中文字幕精品精品| 亚洲啪啪综合av一区二区三区| 26uuu成人网一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 欧美老年两性高潮| 欧美日本精品一区二区三区| 欧美午夜精品免费| 91精品蜜臀在线一区尤物| 制服丝袜激情欧洲亚洲| 欧美一区二区精品在线| 日韩欧美123| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品在线观看视频| 国产欧美一二三区| 一区二区三区不卡在线观看 | 国产激情一区二区三区| 国产69精品久久久久777| 成年人国产精品| 欧美在线观看视频在线| 欧美一区二区福利视频| 久久夜色精品国产噜噜av | 在线播放欧美女士性生活| 日韩一级黄色片| 久久精品男人天堂av| 亚洲乱码国产乱码精品精的特点| 亚洲一区二区三区四区的| 久久精品国产亚洲高清剧情介绍| 久久99久久久久| www.亚洲人| 欧美精品123区| 久久久不卡影院| 一区二区国产视频| 精品中文字幕一区二区| 色综合亚洲欧洲| 777午夜精品视频在线播放| 久久婷婷国产综合国色天香 | 欧美日韩精品久久久| 亚洲精品在线电影| 亚洲精选在线视频| 精彩视频一区二区三区| 91国在线观看| 久久久久久久综合色一本| 亚洲一级在线观看| 国产高清不卡一区| 91精品久久久久久久99蜜桃 | 欧美午夜精品一区二区三区| 久久久久久久网| 天堂午夜影视日韩欧美一区二区| 国产精品中文字幕日韩精品|