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

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

?? fat_misc.c

?? uCOS uCGUI uCFS 在ADS下調試通過 LPC2292
?? 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一区二区三区免费野_久草精品视频
国产一区二区三区精品欧美日韩一区二区三区 | 4438成人网| 欧美变态凌虐bdsm| 一区二区三区av电影| 久久99在线观看| 欧美亚日韩国产aⅴ精品中极品| 欧美精品一区二区精品网| 亚洲va欧美va人人爽| 国产在线日韩欧美| 欧美男同性恋视频网站| 亚洲人被黑人高潮完整版| 久久99久国产精品黄毛片色诱| 91亚洲男人天堂| 欧美激情综合五月色丁香小说| 首页国产丝袜综合| 在线观看av一区| 国产精品久久99| 丰满少妇在线播放bd日韩电影| 欧美一级视频精品观看| 亚洲国产成人porn| 在线视频国产一区| 亚洲欧洲无码一区二区三区| 国内精品不卡在线| 欧美精品一区二区三区一线天视频 | 欧美日本在线一区| 亚洲综合区在线| 欧美性受极品xxxx喷水| 亚洲精品欧美在线| 91丨porny丨在线| 亚洲视频免费看| av亚洲精华国产精华精| 欧美羞羞免费网站| 亚洲图片欧美色图| 欧美人体做爰大胆视频| 一区二区三区精品视频| 欧美在线免费观看亚洲| 亚洲一区二区3| 欧美一级久久久| 免费观看在线色综合| 欧美sm美女调教| 国产精品一区二区久久不卡| 久久综合久久鬼色| 国产寡妇亲子伦一区二区| 中文字幕第一区综合| 色综合久久中文综合久久牛| 一区二区免费在线| 欧美精品在欧美一区二区少妇| 日韩一区精品字幕| 精品精品欲导航| 国产精品综合久久| 国产精品每日更新在线播放网址| 91性感美女视频| 日韩va亚洲va欧美va久久| 日韩欧美123| av在线不卡网| 亚洲超丰满肉感bbw| 欧美成人一区二区三区片免费| 蜜桃精品视频在线观看| 国产精品水嫩水嫩| 色又黄又爽网站www久久| 一卡二卡三卡日韩欧美| 日韩三级在线免费观看| 高清shemale亚洲人妖| 一区二区免费在线| 欧美精品一区二区久久婷婷| 97精品国产97久久久久久久久久久久 | 国产精品第五页| 欧美男人的天堂一二区| 国产成人aaaa| 三级在线观看一区二区| 久久嫩草精品久久久精品| 成人av影视在线观看| 亚洲一本大道在线| 久久久国产精华| 欧美片网站yy| 成人一区在线看| 秋霞午夜av一区二区三区| 中文字幕成人网| 91精品国产入口| 91同城在线观看| 国产福利一区二区三区| 日韩高清在线不卡| 亚洲欧美区自拍先锋| 国产亚洲婷婷免费| 91精品国模一区二区三区| 99精品桃花视频在线观看| 免费在线视频一区| 亚洲国产成人tv| 亚洲精品老司机| 国产日产精品一区| 欧美精品亚洲二区| 欧美性欧美巨大黑白大战| 国产99久久久久| 寂寞少妇一区二区三区| 午夜久久福利影院| 亚洲精品国产一区二区三区四区在线| 国产精品免费久久| 久久久精品国产免大香伊| 欧美一区二区三区四区视频| 一本久道久久综合中文字幕| 成人国产在线观看| 国产**成人网毛片九色| 精品一区在线看| 三级一区在线视频先锋| 午夜视频在线观看一区二区| 一区二区三区中文在线观看| 中文字幕一区二区三区在线播放| 精品成人一区二区三区四区| 91麻豆精品国产91久久久久久| 在线观看免费亚洲| 日本精品视频一区二区| 91网站最新地址| 色哟哟国产精品| 欧美影片第一页| 欧美亚洲丝袜传媒另类| 欧美日韩亚洲综合在线| 欧美日韩一区不卡| 69精品人人人人| 91精品综合久久久久久| 欧美成人国产一区二区| 久久综合精品国产一区二区三区| 精品日韩在线一区| 久久久精品天堂| 中文字幕视频一区| 一区二区三区在线播| 性做久久久久久免费观看欧美| 亚洲图片欧美视频| 麻豆精品新av中文字幕| 国产精品中文有码| 99精品久久免费看蜜臀剧情介绍| 99久久免费国产| 欧美日韩激情一区二区三区| 7777精品伊人久久久大香线蕉的| 日韩一区二区三区精品视频| 精品国产精品一区二区夜夜嗨| 久久伊人中文字幕| 国产精品精品国产色婷婷| 亚洲久本草在线中文字幕| 亚洲国产综合人成综合网站| 捆绑调教一区二区三区| 成人av综合一区| 欧美高清视频一二三区 | 欧美一区二区三区免费在线看 | 欧美三级日韩在线| 欧美变态口味重另类| 日韩一区欧美一区| 天天av天天翘天天综合网色鬼国产 | 国产v综合v亚洲欧| 在线视频亚洲一区| 久久先锋影音av| 亚洲高清视频的网址| 韩国毛片一区二区三区| 91麻豆免费看片| 精品欧美乱码久久久久久1区2区| 中文av字幕一区| 天堂在线一区二区| 9色porny自拍视频一区二区| 欧美人牲a欧美精品| 国产精品网站在线播放| 天天爽夜夜爽夜夜爽精品视频| 国产精品乡下勾搭老头1| 欧美三级一区二区| 中文字幕制服丝袜一区二区三区| 亚洲大片精品永久免费| 国产一区二区三区在线观看免费视频 | 欧美日本在线一区| 国产精品你懂的| 蜜臀av性久久久久蜜臀aⅴ| 99久久婷婷国产综合精品电影 | 欧美在线观看一区| 久久色成人在线| 性久久久久久久久久久久| 成人国产亚洲欧美成人综合网| 日韩一级在线观看| 亚洲大尺度视频在线观看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产精品不卡视频| 国产毛片精品一区| 欧美不卡在线视频| 日韩电影在线观看电影| 91福利视频久久久久| 中文字幕免费在线观看视频一区| 日本欧美加勒比视频| 在线观看日韩毛片| 亚洲视频资源在线| 国产99久久久精品| 久久久久成人黄色影片| 麻豆专区一区二区三区四区五区| 欧美三级乱人伦电影| 亚洲一区影音先锋| 一本色道久久综合亚洲aⅴ蜜桃| 国产区在线观看成人精品| 国产真实精品久久二三区| 日韩一区二区电影在线| 日本不卡一区二区三区高清视频| 欧美日韩视频不卡| 午夜国产不卡在线观看视频| 欧美另类z0zxhd电影| 亚洲成人在线观看视频| 91麻豆精品国产91久久久资源速度 |