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

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

?? fat_open.c

?? 基于Vc的UCFS程序,作者在電腦上開辟了一段RAM來作為文件系統存儲. 對學習fat文件系統很有幫助.
?? C
?? 第 1 頁 / 共 3 頁
字號:
#endif /* FS_FAT_NOFAT32==0 */

  buffer = FS__fat_malloc(FS_FAT_SEC_SIZE);
  if (!buffer) {
    return 0;
  }
  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;
  len = FS__CLIB_strlen(pName);
  if (len > 11) {
    len = 11;
  }
  /* Read directory */
  for (i = 0; i < DirSize; i++) {
    curclst = -1;
    dsec = FS__fat_dir_realsec(Idx, Unit, DirStart, i);
    if (dsec == 0) {
      FS__fat_free(buffer);
      return -1;
    }
    err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, dsec, (void*)buffer);
    if (err < 0) {
      FS__fat_free(buffer);
      return -1;
    }
    /* Scan for pName in the directory sector */
    s = (FS__fat_dentry_type*) buffer;
    while (1) {
      if (s >= (FS__fat_dentry_type*)(buffer + bytespersec)) {
        break;  /* End of sector reached */
      }
      x = FS__CLIB_strncmp((char*)s->data, pName, len);
      if (x == 0) { /* Name does match */
        if (s->data[11] != 0) {
          break;  /* Entry found */
        }
      }
      s++;
    }
    if (s < (FS__fat_dentry_type*)(buffer + bytespersec)) {
      /* Entry has been found, delete directory entry */
      s->data[0]  = 0xe5;
      s->data[11] = 0;
      err = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, dsec, (void*)buffer);
      if (err < 0) {
        FS__fat_free(buffer);
        return -1;
      }
      /* Free blocks in FAT */
      /*
         For normal files, there are no more clusters freed than the entrie's filesize
         does indicate. That avoids corruption of the complete media in case there is
         no EOF mark found for the file (FAT is corrupt!!!). 
         If the function should remove a directory, filesize if always 0 and cannot
         be used for that purpose. To avoid running into endless loop, todo is set
         to 0x0ffffff8L, which is the maximum number of clusters for FAT32.
      */
      if (RmFile) {
        filesize  = s->data[28] + 0x100UL * s->data[29] + 0x10000UL * s->data[30] + 0x1000000UL * s->data[31];
        todo      = filesize / (FS__FAT_aBPBUnit[Idx][Unit].SecPerClus * bytespersec);
        value     = filesize % (FS__FAT_aBPBUnit[Idx][Unit].SecPerClus * bytespersec);
        if (value != 0) {
          todo++;
        }
      } 
      else {
        todo = (FS_i32)0x0ffffff8L;
      }
      curclst = s->data[26] + 0x100L * s->data[27] + 0x10000L * s->data[20] + 0x1000000L * s->data[21];
      lastsec = -1;
      /* Free cluster loop */
      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 -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];
            if (curclst & 1) {
              buffer[fatoffs] &= 0x0f;
            }
            else {
              buffer[fatoffs]  = 0x00;
            }
            err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
            err2 = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec, (void*)buffer);
            lexp = (err < 0);
            lexp = lexp || (err2 < 0);
            if (lexp) {
              FS__fat_free(buffer);
              return -1;
            }
            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];
            if (curclst & 1) {
              buffer[0]  = 0x00;;
            }
            else {
              buffer[0] &= 0xf0;
            }
            err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec + 1, (void*)buffer);
            err2 = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec + 1, (void*)buffer);
            lexp = (err < 0);
            lexp = lexp || (err2 < 0);
            if (lexp) {
              FS__fat_free(buffer);
              return -1;
            }
          }
          else {
            a = buffer[fatoffs];
            b = buffer[fatoffs + 1];
            if (curclst & 1) {
              buffer[fatoffs]     &= 0x0f;
              buffer[fatoffs + 1]  = 0x00;
            }
            else {
              buffer[fatoffs]      = 0x00;
              buffer[fatoffs + 1] &= 0xf0;
            }
            err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
            err2 = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec, (void*)buffer);
            lexp = (err < 0);
            lexp = lexp || (err2 < 0);
            if (lexp) {
              FS__fat_free(buffer);
              return -1;
            }
          }
          if (curclst & 1) {
            curclst = ((a & 0xf0) >> 4) + 16 * b;
          }
          else {
            curclst = a + 256 * (b & 0x0f);
          }
          curclst &= 0x0fff;
          if (curclst >= 0x0ff8) {
            FS__fat_free(buffer);
            return 0;
          }
        }
#if (FS_FAT_NOFAT32==0)
        else if (fattype == 2) { /* FAT32 */
          a = buffer[fatoffs];
          b = buffer[fatoffs + 1];
          c = buffer[fatoffs + 2];
          d = buffer[fatoffs + 3] & 0x0f;
          buffer[fatoffs]      = 0x00;
          buffer[fatoffs + 1]  = 0x00;
          buffer[fatoffs + 2]  = 0x00;
          buffer[fatoffs + 3]  = 0x00;
          err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
          err2 = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec, (void*)buffer);
          lexp = (err < 0);
          lexp = lexp || (err2 < 0);
          if (lexp) {
            FS__fat_free(buffer);
            return -1;
          }
          curclst = a + 0x100 * 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];
          buffer[fatoffs]     = 0x00;
          buffer[fatoffs + 1] = 0x00;
          err  = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
          err2 = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec, (void*)buffer);
          lexp = (err < 0);
          lexp = lexp || (err2 < 0);
          if (lexp) {
            FS__fat_free(buffer);
            return -1;
          }
          curclst  = a + 256 * b;
          curclst &= 0xffff;
          if (curclst >= (FS_i32)0xfff8) {
            FS__fat_free(buffer);
            return 0;
          }
        }
        todo--;
      } /* Free cluster loop */
    } /*  Delete entry */
    if (curclst > 0) {
      FS__fat_free(buffer);
      return curclst;
    }
  } /* for */
  FS__fat_free(buffer);
  return curclst;
}


/*********************************************************************
*
*             FS__fat_make_realname
*
  Description:
  FS internal function. Convert a given name to the format, which is
  used in the FAT directory.
  
  Parameters:
  pOrgName    - Pointer to name to be translated
  pEntryName  - Pointer to a buffer for storing the real name used
                in a directory.

  Return value:
  None.
*/

void FS__fat_make_realname(char *pEntryName, const char *pOrgName) {
  FS_FARCHARPTR ext;
  FS_FARCHARPTR s;
  int i;

  s = (FS_FARCHARPTR)pOrgName;
  ext = (FS_FARCHARPTR) FS__CLIB_strchr(s, '.');
  if (!ext) {
    ext = &s[FS__CLIB_strlen(s)];
  }
  i=0;
  while (1) {
    if (s >= ext) {
      break;  /* '.' reached */
    }
    if (i >= 8) {
      break;  /* If there is no '.', this is the end of the name */
    }
    if (*s == (char)0xe5) {
      pEntryName[i] = 0x05;
    }
    else {
      pEntryName[i] = (char)FS__CLIB_toupper(*s);
    }
    i++;
    s++;
  }
  while (i < 8) {
    /* Fill name with spaces*/
    pEntryName[i] = ' ';
    i++;
  }
  if (*s == '.') {
    s++;
  }
  while (i < 11) {
    if (*s != 0) {
      if (*s == (char)0xe5) {
        pEntryName[i] = 0x05;
      }
      else {
        pEntryName[i] = (char)FS__CLIB_toupper(*s);
      }
      s++;
    }
    else {
      pEntryName[i] = ' ';
    }
    i++;
  }
  pEntryName[11]=0;
}


/*********************************************************************
*
*             FS__fat_find_dir
*
  Description:
  FS internal function. Find the directory with name pDirName in directory
  DirStart.
  
  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  pDirName    - Directory name; if zero, return the root directory.
  DirStart    - 1st cluster of the directory.
  DirSize     - Sector (not cluster) size of the directory.
 
  Return value:
  >0          - Directory found. Value is the first cluster of the file.
  ==0         - An error has occured.
*/

FS_u32 FS__fat_find_dir(int Idx, FS_u32 Unit, char *pDirName, FS_u32 DirStart, 
                        FS_u32 DirSize) {
  FS__fat_dentry_type *s;
  FS_u32 dstart;
  FS_u32 i;
  FS_u32 dsec;
  FS_u32 fatsize;
  int len;
  int err;
  int c;
  char *buffer;

  if (pDirName == 0) {
    /* Return root directory */
    if (FS__FAT_aBPBUnit[Idx][Unit].FATSz16) {
      fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz16;
      dstart  = FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt + FS__FAT_aBPBUnit[Idx][Unit].NumFATs * fatsize;
    }
    else {
      fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz32;
      dstart  = FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt + FS__FAT_aBPBUnit[Idx][Unit].NumFATs * fatsize
                + (FS__FAT_aBPBUnit[Idx][Unit].RootClus - 2) * FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
    }
  }
  else {
    /* Find directory */
    buffer = FS__fat_malloc(FS_FAT_SEC_SIZE);
    if (!buffer) {
      return 0;
    }
    len = FS__CLIB_strlen(pDirName);
    if (len > 11) {
      len = 11;
    }
    /* Read directory */
    for (i = 0; i < DirSize; i++) {
      dsec = FS__fat_dir_realsec(Idx, Unit, DirStart, i);
      if (dsec == 0) {
        FS__fat_free(buffer);
        return 0;
      }
      err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, dsec, (void*)buffer);
      if (err < 0) {
        FS__fat_free(buffer);
        return 0;
      }
      s = (FS__fat_dentry_type*)buffer;
      while (1) {
        if (s >= (FS__fat_dentry_type*)(buffer + FS_FAT_SEC_SIZE)) {
          break;  /* End of sector reached */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情小说乱人伦| 国产在线观看一区二区| 国产91精品免费| 欧美一区二区精美| 亚洲狼人国产精品| 国产高清视频一区| 91精品国产美女浴室洗澡无遮挡| 中日韩免费视频中文字幕| 免费成人美女在线观看.| 亚洲国产经典视频| 日本亚洲天堂网| 欧美在线|欧美| 国产精品欧美一级免费| 国产一区二区不卡| 欧美一区二区三区不卡| 一区二区三区精品在线| 99久久精品免费看| 国产欧美一区二区精品久导航| 午夜视频在线观看一区二区| 色婷婷亚洲婷婷| 亚洲欧洲精品成人久久奇米网| 国产一区不卡视频| 精品国精品自拍自在线| 男女男精品视频网| 7777精品伊人久久久大香线蕉的| 一区二区三区产品免费精品久久75| proumb性欧美在线观看| 国产精品无人区| 丁香亚洲综合激情啪啪综合| 久久久国际精品| 国产一区二区三区| 久久综合一区二区| 激情久久久久久久久久久久久久久久| 91精品在线观看入口| 日韩电影免费在线看| 欧美精品一二三| 日本视频中文字幕一区二区三区| 在线播放国产精品二区一二区四区 | 一区二区三区高清在线| 99久久伊人网影院| 中文字幕制服丝袜一区二区三区 | 成人精品小蝌蚪| 国产欧美视频一区二区| 高清成人免费视频| 国产精品欧美经典| 91在线你懂得| 一区二区免费看| 欧美老年两性高潮| 奇米在线7777在线精品 | 色综合中文字幕| 日韩美女啊v在线免费观看| 91美女在线视频| 一本在线高清不卡dvd| 亚洲色图19p| 欧美亚一区二区| 视频在线观看一区二区三区| 欧美一区二区三区电影| 国产专区综合网| 欧美国产视频在线| 91性感美女视频| 亚洲成av人在线观看| 欧美疯狂做受xxxx富婆| 韩国精品一区二区| 国产精品人妖ts系列视频| 一本高清dvd不卡在线观看| 亚洲国产成人porn| 日韩欧美国产不卡| 国产精品1区2区3区在线观看| 国产精品久久久久毛片软件| 91精品91久久久中77777| 无吗不卡中文字幕| 精品国产乱码久久久久久影片| 国产91色综合久久免费分享| 亚洲精品日产精品乱码不卡| 欧美精品自拍偷拍| 国产剧情一区二区三区| 自拍av一区二区三区| 欧美日本国产视频| 国产精品综合在线视频| 亚洲图片欧美激情| 欧美一区二区黄| 成人午夜在线免费| 亚洲成a人片综合在线| 久久久久久久免费视频了| 91香蕉视频mp4| 美腿丝袜一区二区三区| 日本一区二区三区在线观看| 91高清视频免费看| 精品一区二区日韩| 亚洲免费av网站| 精品1区2区在线观看| 一本色道久久加勒比精品| 日本不卡视频在线观看| 国产.精品.日韩.另类.中文.在线.播放 | 色综合天天综合在线视频| 日本v片在线高清不卡在线观看| 欧美韩国一区二区| 欧美日韩亚洲高清一区二区| 国产精品原创巨作av| 亚洲综合免费观看高清完整版在线 | 欧美性色综合网| 国产一区二区在线观看视频| 亚洲综合色区另类av| 国产视频一区在线播放| 精品视频一区三区九区| 成人一区二区三区视频在线观看| 视频一区二区国产| 亚洲视频精选在线| 337p日本欧洲亚洲大胆精品| 欧美视频中文字幕| 成人精品小蝌蚪| 麻豆精品在线播放| 亚洲一区二区在线免费看| 日本一区二区视频在线| 欧美一区二区福利在线| 在线免费精品视频| 成人网页在线观看| 久久99国内精品| 午夜视频一区二区| 亚洲视频狠狠干| 国产女人aaa级久久久级| 日韩视频一区二区三区在线播放 | 懂色av中文字幕一区二区三区| 天堂成人国产精品一区| 综合激情成人伊人| 国产人久久人人人人爽| 在线成人小视频| 欧美三级日韩三级| 91一区二区在线观看| 成人免费毛片嘿嘿连载视频| 寂寞少妇一区二区三区| 日韩在线播放一区二区| 亚洲一区二区三区小说| 亚洲少妇30p| 国产精品传媒入口麻豆| 国产日韩在线不卡| 精品国产凹凸成av人导航| 欧美久久久久中文字幕| 99久久免费精品| 久久久久久毛片| 日韩一区二区电影在线| 欧美蜜桃一区二区三区| 欧美综合天天夜夜久久| 91香蕉视频污在线| 95精品视频在线| jlzzjlzz亚洲日本少妇| 成人免费视频一区二区| 国产xxx精品视频大全| 国产精品资源在线看| 国产一区二区三区电影在线观看| 极品少妇xxxx偷拍精品少妇| 麻豆精品久久精品色综合| 日本不卡不码高清免费观看| 日本在线观看不卡视频| 蜜桃视频一区二区| 蜜桃av噜噜一区二区三区小说| 全部av―极品视觉盛宴亚洲| 日本欧美肥老太交大片| 日韩av网站免费在线| 免费看欧美女人艹b| 蜜臀久久99精品久久久久久9| 秋霞国产午夜精品免费视频| 日本不卡一区二区三区| 另类成人小视频在线| 精品在线视频一区| 韩国精品一区二区| 粉嫩欧美一区二区三区高清影视| 丁香激情综合五月| 成人久久视频在线观看| 99久久婷婷国产综合精品电影| 91亚洲精品久久久蜜桃| 在线一区二区三区四区五区| 欧美日韩国产高清一区| 日韩一级片网站| 久久这里只有精品首页| 国产欧美精品一区| 亚洲青青青在线视频| 亚洲午夜在线电影| 奇米四色…亚洲| 国产精品一区不卡| av一区二区三区在线| 在线观看网站黄不卡| 制服丝袜国产精品| 亚洲精品一区二区在线观看| 国产日韩一级二级三级| 亚洲乱码一区二区三区在线观看| 亚洲一二三四区不卡| 日本三级亚洲精品| 国产丶欧美丶日本不卡视频| av亚洲精华国产精华精华| 欧美性猛交xxxxxxxx| 日韩精品一区二区三区在线观看| 国产亚洲精品aa| 一区二区三区在线视频观看58| 日韩精品电影一区亚洲| 国产精品一区免费视频| 色综合视频一区二区三区高清| 欧美乱妇一区二区三区不卡视频| 精品剧情v国产在线观看在线| 国产精品久久久久7777按摩|