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

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

?? fat_misc.c

?? 這是ram7下的ucos_gus_fs的代碼,開發arm系列的朋友一定需要.
?? C
?? 第 1 頁 / 共 3 頁
字號:
  clstcount     = 0;
  while (clstcount < maxclst) {
    eofclst = curclst;
    clstcount++;
    if (fattype == 1) {
      fatindex = curclst + (curclst / 2);   /* FAT12 */
    }
#if (FS_FAT_NOFAT32==0)    
    else if (fattype == 2) {
      fatindex = curclst * 4;               /* FAT32 */
    }
#endif /* FS_FAT_NOFAT32==0 */    
    else {
      fatindex = curclst * 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 (curclst & 1) {
        curclst = ((a & 0xf0) >> 4 ) + 16 * b;
      }
      else {
        curclst = a + 256 * (b & 0x0f);
      }
      curclst &= 0x0fffL;
      if (curclst >= 0x0ff8L) {
        /* EOF found */
        FS__fat_free(buffer);
        if (pClstCnt) {
          *pClstCnt = clstcount;
        }
        return eofclst;
      }
    }
#if (FS_FAT_NOFAT32==0)
    else if (fattype == 2) {
      a         = buffer[fatoffs];
      b         = buffer[fatoffs + 1];
      c         = buffer[fatoffs + 2];
      d         = buffer[fatoffs + 3];
      curclst   = a + 0x100L * b + 0x10000L * c + 0x1000000L * d;
      curclst  &= 0x0fffffffL;
      if (curclst >= (FS_i32)0x0ffffff8L) {
        /* EOF found */
        FS__fat_free(buffer);
        if (pClstCnt) {
          *pClstCnt = clstcount;
        }
        return eofclst;
      }
    }
#endif /* FS_FAT_NOFAT32==0 */
    else {
      a         = buffer[fatoffs];
      b         = buffer[fatoffs + 1];
      curclst   = a + 256 * b;
      curclst  &= 0xffffL;
      if (curclst >= (FS_i32)0xfff8L) {
        /* EOF found */
        FS__fat_free(buffer);
        if (pClstCnt) {
          *pClstCnt = clstcount;
        }
        return eofclst;
      }
    }
  } /* while (clstcount<maxclst) */
  FS__fat_free(buffer);
  return -1;
}


/*********************************************************************
*
*             FS__fat_FAT_alloc
*
  Description:
  FS internal function. Allocate a new cluster in the FAT and link it
  to LastClust. Assign an EOF mark to the new allocated cluster.
  The function has grown a lot, since it supports all FAT types (FAT12,
  FAT16 & FAT32). There is also room for performance improvement, when
  makeing the new FAT entry and the old entry is within the same FAT
  sector.

  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  LastClust   - Number of cluster, to which the new allocated cluster
                is linked to. If this is negative, the new cluster is
                not linked to anything and only the EOF mark is set.
 
  Return value:
  >=0         - Number of new allocated cluster, which contains the 
                EOF mark.
  <0          - An error has occured.
*/

FS_i32 FS__fat_FAT_alloc(int Idx, FS_u32 Unit, FS_i32 LastClust) {
  FS_u32 fatsize;
  FS_i32 fatoffs;
  FS_i32 bytespersec;
  FS_i32 curclst;
  FS_i32 fatsec;
  FS_i32 lastsec;
  unsigned char *buffer;
  int fattype;
  int err;
  int err2;
  int lexp;
  
  buffer = (unsigned char*)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;
  /* Find a free cluster in the FAT */
  curclst       = _FS__fat_FindFreeCluster(Idx, Unit, &fatsec, &lastsec, &fatoffs, LastClust, buffer, fattype, fatsize, bytespersec);
  if (curclst < 0) {
    FS__fat_free(buffer);   /* No free cluster found. */
    return -1;
  }
  /* Make an EOF entry for the new cluster */
  err = _FS__fat_SetEOFMark(Idx, Unit, fatsec, &lastsec, fatoffs, curclst, buffer, fattype, fatsize, bytespersec);
  if (err < 0) {
    FS__fat_free(buffer);
    return -1;
  }
  /* Link the new cluster to the cluster list */
  if (LastClust < 0) {
    err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, lastsec, (void*)buffer);
    err2 = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsize + lastsec, (void*)buffer);
    lexp = (err < 0);
    lexp = lexp || (err2 < 0);
    if (lexp) {
      FS__fat_free(buffer);
      return -1;
    }
  }
  else {
    err = _FS__fat_LinkCluster(Idx, Unit, &lastsec, curclst, LastClust, buffer, fattype, fatsize, bytespersec);
    if (err < 0) {
      FS__fat_free(buffer);
      return -1;
    }
  }
  
#if (FS_FAT_NOFAT32==0)
  /* Update the FSInfo structure */
  if (fattype == 2) {  /* FAT32 */
    /* Modify FSInfo */
    err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, FS__FAT_aBPBUnit[Idx][Unit].FSInfo, (void*)buffer);
    if (err < 0) {
      FS__fat_free(buffer);
      return -1;
    }
    /* Check for FSInfo structure in buffer */
    if (buffer[0] == (char)0x52) {
      if (buffer[1] == (char)0x52) {
        if (buffer[2] == (char)0x61) {
          if (buffer[3] == (char)0x41) {
            if (buffer[484] == (char)0x72) {
              if (buffer[485] == (char)0x72) {
                if (buffer[486] == (char)0x41) {
                  if (buffer[487] == (char)0x61) {
                    if (buffer[508] == (char)0x00) {
                      if (buffer[509] == (char)0x00) {
                        if (buffer[510] == (char)0x55) {
                          if (buffer[511] == (char)0xaa) {
                            /* Invalidate last known free cluster count */
                            buffer[488] = (char)0xff;
                            buffer[489] = (char)0xff;
                            buffer[490] = (char)0xff;
                            buffer[491] = (char)0xff;
                            /* Give hint for free cluster search */
                            buffer[492] = curclst & 0xff;
                            buffer[493] = (curclst / 0x100L) & 0xff;
                            buffer[494] = (curclst / 0x10000L) & 0xff;
                            buffer[495] = (curclst / 0x1000000L) & 0x0f;
                            err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, FS__FAT_aBPBUnit[Idx][Unit].FSInfo, (void*)buffer);
                            if (err < 0) {
                              FS__fat_free(buffer);
                              return -1;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    } /* buffer contains FSInfo structure */
  } /* FS_Info modification for fattype==2 */
#endif /* FS_FAT_NOFAT32==0 */
  FS__fat_free(buffer);
  return curclst;
}


/*********************************************************************
*
*             FS__fat_diskclust
*
  Description:
  FS internal function. Walk through the FAT starting at StrtClst for
  ClstNum times. Return the found cluster number of the media. This is
  very similar to FS__fat_FAT_find_eof.
  
  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  StrtClst    - Starting point for FAT walk.
  ClstNum     - Number of steps.
 
  Return value:
  > 0         - Number of cluster found after ClstNum steps.
  ==0         - An error has occured.
*/

FS_i32 FS__fat_diskclust(int Idx, FS_u32 Unit, FS_i32 StrtClst, FS_i32 ClstNum) {
  FS_u32 fatsize;
  FS_i32 fatindex;
  FS_i32 fatsec;
  FS_i32 fatoffs;
  FS_i32 lastsec;
  FS_i32 curclst;
  FS_i32 todo;
  FS_i32 bytespersec;
  int err;
  int fattype;
  char *buffer;
  unsigned char a;
  unsigned char b;
#if (FS_FAT_NOFAT32==0)
  unsigned char c;
  unsigned char d;
#endif /* FS_FAT_NOFAT32==0 */

  fattype = FS__fat_which_type(Idx, Unit);
#if (FS_FAT_NOFAT32!=0)
  if (fattype == 2) {
    return 0;
  }
#endif  /* FS_FAT_NOFAT32!=0 */
  buffer = FS__fat_malloc(FS_FAT_SEC_SIZE);
  if (!buffer) {
    return 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;
  todo        = ClstNum;
  curclst     = StrtClst;
  lastsec     = -1;
  while (todo) {
    if (fattype == 1) {
      fatindex = curclst + (curclst / 2);    /* FAT12 */
    }
#if (FS_FAT_NOFAT32==0)
    else if (fattype == 2) {
      fatindex = curclst * 4;               /* FAT32 */
    }
#endif /* FS_FAT_NOFAT32==0 */
    else {
      fatindex = curclst * 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 0;
        }
        /* 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 0;
          }
          /* 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 (curclst & 1) {
        curclst = ((a & 0xf0) >> 4) + 16 * b;
      }
      else {
        curclst = a + 256 * (b & 0x0f);
      }
      curclst &= 0x0fffL;
      if (curclst >= 0x0ff8L) {
        FS__fat_free(buffer);
        return 0;
      }
    }
#if (FS_FAT_NOFAT32==0)
    else if (fattype == 2) {
      a = buffer[fatoffs];
      b = buffer[fatoffs + 1];
      c = buffer[fatoffs + 2];
      d = buffer[fatoffs + 3];
      curclst = a + 0x100L * b + 0x10000L * c + 0x1000000L * d;
      curclst &= 0x0fffffffL;
      if (curclst >= (FS_i32)0x0ffffff8L) {
        FS__fat_free(buffer);
        return 0;
      }
    }
#endif /* FS_FAT_NOFAT32==0 */
    else {
      a = buffer[fatoffs];
      b = buffer[fatoffs + 1];
      curclst  = a + 256 * b;
      curclst &= 0xffffL;
      if (curclst >= (FS_i32)0xfff8L) {
        FS__fat_free(buffer);
        return 0;
      }
    }
    todo--;
  }
  FS__fat_free(buffer);
  return curclst;
}


/*********************************************************************
*
*             Global Variables
*
**********************************************************************
*/

const FS__fsl_type FS__fat_functable = {
#if (FS_FAT_NOFAT32==0)
  "FAT12/FAT16/FAT32",
#else
  "FAT12/FAT16",
#endif /* FS_FAT_NOFAT32==0 */
  FS__fat_fopen,        /* open  */
  FS__fat_fclose,       /* close */
  FS__fat_fread,        /* read  */
  FS__fat_fwrite,       /* write */
  0,                    /* tell  */
  0,                    /* seek  */
  FS__fat_ioctl,        /* ioctl */
#if FS_POSIX_DIR_SUPPORT
  FS__fat_opendir,      /* opendir   */
  FS__fat_closedir,     /* closedir  */
  FS__fat_readdir,      /* readdir   */
  0,                    /* rewinddir */
  FS__fat_MkRmDir,      /* mkdir     */
  FS__fat_MkRmDir,      /* rmdir     */
#endif  /* FS_POSIX_DIR_SUPPORT */
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三| 欧美在线观看18| 在线观看亚洲精品| 欧美精品一区二区三区高清aⅴ| 国产欧美在线观看一区| 奇米777欧美一区二区| av男人天堂一区| 亚洲精品在线电影| 日韩国产精品久久久久久亚洲| 97aⅴ精品视频一二三区| 久久精品亚洲精品国产欧美kt∨| 午夜影院久久久| 色综合久久66| 中文字幕在线视频一区| 国产成人在线色| 精品国产伦一区二区三区免费| 日韩av网站在线观看| 91黄色激情网站| 一卡二卡欧美日韩| 色综合久久综合网| 国产亚洲综合av| 高清在线成人网| 中文欧美字幕免费| 成人性色生活片免费看爆迷你毛片| 久久先锋影音av鲁色资源网| 麻豆精品一区二区三区| 欧美一区二区福利视频| 日本一不卡视频| 日韩免费观看高清完整版在线观看| 午夜精品影院在线观看| 欧美日韩国产另类不卡| 日本v片在线高清不卡在线观看| 在线不卡中文字幕播放| 日本aⅴ亚洲精品中文乱码| 欧美一区二区三区影视| 国内国产精品久久| xnxx国产精品| av在线播放不卡| 亚洲一二三级电影| 91精品国产全国免费观看| 久久99日本精品| 欧美激情一区三区| 91一区二区三区在线播放| 一区二区三区 在线观看视频| 欧美私模裸体表演在线观看| 亚洲成人av资源| 欧美videossexotv100| 久久不见久久见免费视频7| 久久―日本道色综合久久| 成人性生交大片免费看在线播放| 亚洲人成网站在线| 欧美一级一级性生活免费录像| 国产一区二区三区免费在线观看| 欧美国产日韩亚洲一区| 一本久久精品一区二区| 丝袜脚交一区二区| 欧美激情一区二区三区蜜桃视频| 色婷婷av久久久久久久| 男人的天堂亚洲一区| 国产午夜亚洲精品羞羞网站| 91国在线观看| 国产精品一二三区在线| 一区二区视频在线| 精品欧美乱码久久久久久| 99视频有精品| 免费观看30秒视频久久| 国产精品美女久久久久av爽李琼| 欧美伦理电影网| 不卡一区二区在线| 蜜臀av性久久久久蜜臀av麻豆| 国产欧美视频一区二区| 国产日产欧美一区| 欧美系列在线观看| 成人免费毛片片v| 日产国产高清一区二区三区| 91欧美一区二区| 精品区一区二区| 91年精品国产| 日韩成人免费在线| 国产成人综合亚洲网站| 久久精品一区二区三区四区| www亚洲一区| 中文av一区特黄| 亚洲欧美综合网| 亚洲网友自拍偷拍| 七七婷婷婷婷精品国产| 精品一区二区在线看| 国产在线麻豆精品观看| 国产91丝袜在线播放| av网站免费线看精品| 91黄色免费观看| 91精品婷婷国产综合久久性色 | 成人国产视频在线观看| 色呦呦一区二区三区| 在线视频欧美区| 欧美一区二区三区免费观看视频| 亚洲精品一区二区三区香蕉| 欧美经典三级视频一区二区三区| 亚洲男女毛片无遮挡| 亚洲午夜成aⅴ人片| 久久疯狂做爰流白浆xx| 成人精品电影在线观看| 91久久精品国产91性色tv| 91精品国产综合久久福利| 久久久久久久综合色一本| 日韩美女精品在线| 日韩专区在线视频| 国产精品一级在线| 欧美视频一二三区| 久久久国产精品不卡| 亚洲精品中文字幕在线观看| 免费av成人在线| 成人福利视频网站| 91精品国产综合久久精品app| 26uuu亚洲婷婷狠狠天堂| 1区2区3区精品视频| 日本v片在线高清不卡在线观看| 成人午夜视频福利| 欧美一区二区三区免费| 自拍偷拍亚洲综合| 精品写真视频在线观看| 欧美在线看片a免费观看| 久久久777精品电影网影网 | 成人免费在线视频| 日韩精品一二区| 99热精品国产| 欧美精品一区二区三区蜜臀| 亚洲国产成人va在线观看天堂| 国产高清无密码一区二区三区| 欧美日韩一区中文字幕| 中文字幕在线观看不卡视频| 国产美女视频一区| 在线电影院国产精品| 亚洲精品精品亚洲| 丁香六月综合激情| 精品精品欲导航| 午夜精品免费在线| 欧美亚洲丝袜传媒另类| 中文字幕国产一区二区| 久久国产三级精品| 欧美欧美午夜aⅴ在线观看| 亚洲欧美综合网| 成人免费毛片app| 精品国产电影一区二区| 日韩在线观看一区二区| 在线观看一区二区精品视频| 亚洲欧洲日韩女同| av电影一区二区| 国产清纯在线一区二区www| 久久99久久99| 日韩精品一区二区在线| 日日夜夜精品视频免费| 欧美日韩中文字幕精品| 亚洲综合色视频| 欧美午夜精品免费| 一区二区三区**美女毛片| 色婷婷av久久久久久久| 最新国产成人在线观看| 成人va在线观看| 国产精品久久久一本精品| 高清不卡在线观看av| 国产亚洲欧美在线| 国产mv日韩mv欧美| 国产精品久久久久影院色老大| 懂色av噜噜一区二区三区av| 国产亚洲综合在线| 高清不卡一二三区| 中文字幕 久热精品 视频在线| 国产成人亚洲综合色影视| 国产亚洲短视频| 成人av片在线观看| 亚洲视频图片小说| 国产偷国产偷精品高清尤物| 国产米奇在线777精品观看| 久久久久久麻豆| www.欧美日韩| 一区二区三区精品| 91精品麻豆日日躁夜夜躁| 免费观看在线综合| 国产亚洲欧美日韩俺去了| www.亚洲在线| 一区二区三区精品视频| 欧美一区二区高清| 国产一区二区久久| 一区在线观看视频| 欧美三级资源在线| 久久精品免费看| 国产精品欧美经典| 欧洲国内综合视频| 蜜桃视频在线观看一区| 国产午夜精品一区二区三区嫩草| 成人av免费在线播放| 亚洲精品高清视频在线观看| 欧美精品aⅴ在线视频| 国产一区二区三区最好精华液| 国产精品久久久久久久久免费桃花 | 波多野结衣91| 日韩综合小视频| 国产女主播一区| 欧美老人xxxx18|