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

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

?? fat_open.c

?? ucfs的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
        }
        c = FS__CLIB_strncmp((char*)s->data, pDirName, len);
        if (c == 0) { /* Name does match */
          if (s->data[11] & FS_FAT_ATTR_DIRECTORY) {
            break;  /* Entry found */
          }
        }
        s++;
      }
      if (s < (FS__fat_dentry_type*)(buffer + FS_FAT_SEC_SIZE)) {
        /* Entry found. Return number of 1st block of the directory */
        FS__fat_free(buffer);
        dstart  = (FS_u32)s->data[26];
        dstart += (FS_u32)0x100UL * s->data[27];
        dstart += (FS_u32)0x10000UL * s->data[20];
        dstart += (FS_u32)0x1000000UL * s->data[21];
        return dstart;
      }
    }
    dstart = 0;
    FS__fat_free(buffer);
  }
  return dstart;
}


/*********************************************************************
*
*             FS__fat_dir_realsec
*
  Description:
  FS internal function. Translate a directory relative sector number
  to a real sector number on the media.
  
  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  DirStart    - 1st cluster of the directory. This is zero to address 
                the root directory. 
  DirSec      - Sector in the directory.
 
  Return value:
  >0          - Directory found. Value is the sector number on the media.
  ==0         - An error has occured.
*/

FS_u32 FS__fat_dir_realsec(int Idx, FS_u32 Unit, FS_u32 DirStart, FS_u32 DirSec) {
  FS_u32 rootdir;
  FS_u32 rsec;
  FS_u32 dclust;
  FS_u32 fatsize;
  int fattype;
  int lexp;
  unsigned char secperclus;

  fattype = FS__fat_which_type(Idx, Unit);
  lexp = (0 == DirStart);
  lexp = lexp && (fattype != 2);
  if (lexp) {
    /* Sector in FAT12/FAT16 root directory */
    rootdir = FS__fat_find_dir(Idx, Unit, 0, 0, 0);
    rsec = rootdir + DirSec;
  }
  else {
    fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz16;
    if (fatsize == 0) {
      fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz32;
    }
    secperclus = FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
    dclust = DirSec / secperclus;
    if (0 == DirStart) {
      /* FAT32 root directory */
      rsec = FS__FAT_aBPBUnit[Idx][Unit].RootClus;
    } 
    else {
      rsec = FS__fat_diskclust(Idx, Unit, DirStart, dclust);
      if (rsec == 0) {
        return 0;
      }
    }
    rsec -= 2;
    rsec *= secperclus;
    rsec += FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt + FS__FAT_aBPBUnit[Idx][Unit].NumFATs * fatsize;
    rsec += ((FS_u32)((FS_u32)FS__FAT_aBPBUnit[Idx][Unit].RootEntCnt) * FS_FAT_DENTRY_SIZE) / FS_FAT_SEC_SIZE;
    rsec += (DirSec % secperclus);
  }
  return rsec;
}


/*********************************************************************
*
*             FS__fat_dirsize
*
  Description:
  FS internal function. Return the sector size of the directory 
  starting at DirStart.
  
  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  DirStart    - 1st cluster of the directory. This is zero to address 
                the root directory. 
 
  Return value:
  >0          - Sector (not cluster) size of the directory.
  ==0         - An error has occured.
*/

FS_u32 FS__fat_dir_size(int Idx, FS_u32 Unit, FS_u32 DirStart) {
  FS_u32 dsize;
  FS_i32 value;

  if (DirStart == 0) {
    /* For FAT12/FAT16 root directory, the size can be found in BPB */
    dsize = ((FS_u32)((FS_u32)FS__FAT_aBPBUnit[Idx][Unit].RootEntCnt)
            * FS_FAT_DENTRY_SIZE) / ((FS_u32)FS__FAT_aBPBUnit[Idx][Unit].BytesPerSec);
    if (dsize == 0) {
      /* Size in BPB is 0, so it is a FAT32 (FAT32 does not have a real root dir) */
      value = FS__fat_FAT_find_eof(Idx, Unit, FS__FAT_aBPBUnit[Idx][Unit].RootClus, &dsize);
      if (value < 0) {
        dsize = 0;
      }
      else {
        dsize *= FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
      }
    }
  }
  else {
    /* Calc size of a sub-dir */
    value = FS__fat_FAT_find_eof(Idx, Unit, DirStart, &dsize);
    if (value < 0) {
      dsize = 0;
    }
    else {
      dsize *= FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
    }
  }
  return dsize;
}


/*********************************************************************
*
*             FS__fat_findpath
*
  Description:
  FS internal function. Return start cluster and size of the directory
  of the file name in pFileName.
  
  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  pFullName   - Fully qualified file name w/o device name.
  pFileName   - Pointer to a pointer, which is modified to point to the
                file name part of pFullName.
  pUnit       - Pointer to an FS_u32 for returning the unit number.
  pDirStart   - Pointer to an FS_u32 for returning the start cluster of
                the directory.

  Return value:
  >0          - Sector (not cluster) size of the directory.
  ==0         - An error has occured.
*/

FS_u32 FS__fat_findpath(int Idx, const char *pFullName, FS_FARCHARPTR *pFileName, 
                        FS_u32 *pUnit, FS_u32 *pDirStart) {
  FS_u32 dsize;
  FS_i32 i;
  FS_i32 j;
  FS_FARCHARPTR dname_start;
  FS_FARCHARPTR dname_stop;
  FS_FARCHARPTR chprt;
  int x;
  char dname[12];
  char realname[12];

  /* Find correct unit (unit:name) */
  *pFileName = (FS_FARCHARPTR)FS__CLIB_strchr(pFullName, ':');
  if (*pFileName) {
    /* Scan for unit number */
    *pUnit = FS__CLIB_atoi(pFullName);
    (*pFileName)++;
  }
  else {
    /* Use 1st unit as default */
    *pUnit = 0;
    *pFileName = (FS_FARCHARPTR) pFullName;
  }
  /* Check volume */
  x = !FS__fat_checkunit(Idx, *pUnit);
  if (x) {
    return 0;
  }
  /* Setup pDirStart/dsize for root directory */
  *pDirStart = 0;
  dsize      = FS__fat_dir_size(Idx, *pUnit, 0);
  /* Find correct directory */
  do {
    dname_start = (FS_FARCHARPTR)FS__CLIB_strchr(*pFileName, '\\');
    if (dname_start) {
      dname_start++;
      *pFileName = dname_start;
      dname_stop = (FS_FARCHARPTR)FS__CLIB_strchr(dname_start, '\\');
    }
    else {
      dname_stop = 0;
    }
    if (dname_stop) {
      i = dname_stop-dname_start;
      if (i >= 12) {
        j = 0;
        for (chprt = dname_start; chprt < dname_stop; chprt++) {
          if (*chprt == '.') {
            i--;
          }
          else if (j < 12) {
            realname[j] = *chprt;
            j++;
          }
        }
        if (i >= 12) {
          return 0;
        }
      }
      else {
        FS__CLIB_strncpy(realname, dname_start, i);
      }
      realname[i] = 0;
      FS__fat_make_realname(dname, realname);
      *pDirStart =  FS__fat_find_dir(Idx, *pUnit, dname, *pDirStart, dsize);
      if (*pDirStart) {
        dsize  =  FS__fat_dir_size(Idx, *pUnit, *pDirStart);
      }
      else {
        dsize = 0;    /* Directory NOT found */
      }
    }
  } while (dname_start);
  return dsize;
}


/*********************************************************************
*
*             Global functions section 2
*
**********************************************************************

  These are real global functions, which are used by the API Layer
  of the file system.
  
*/

/*********************************************************************
*
*             FS__fat_fopen
*
  Description:
  FS internal function. Open an existing file or create a new one.

  Parameters:
  pFileName   - File name. 
  pMode       - Mode for opening the file.
  pFile       - Pointer to an FS_FILE data structure.
  
  Return value:
  ==0         - Unable to open the file.
  !=0         - Address of the FS_FILE data structure.
*/

FS_FILE *FS__fat_fopen(const char *pFileName, const char *pMode, FS_FILE *pFile) {
  FS_u32 unit;
  FS_u32 dstart;
  FS_u32 dsize;
  FS_i32 i;
  FS_FARCHARPTR fname;
  FS__fat_dentry_type s;
  char realname[12];
  int lexp_a;
  int lexp_b;
  
  if (!pFile) {
    return 0;  /* Not a valid pointer to an FS_FILE structure*/
  }
  dsize = FS__fat_findpath(pFile->dev_index, pFileName, &fname, &unit, &dstart);
  if (dsize == 0) {
    return 0;  /* Directory not found */
  }
  FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, unit, FS_CMD_INC_BUSYCNT, 0, (void*)0);  /* Turn on busy signal */
  FS__fat_make_realname(realname, fname);  /* Convert name to FAT real name */
  /* FileSize = 0 */
  s.data[28] = 0x00;      
  s.data[29] = 0x00;
  s.data[30] = 0x00;
  s.data[31] = 0x00;
  i = _FS_fat_find_file(pFile->dev_index, unit, realname, &s, dstart, dsize);
  /* Delete file */
  lexp_b = (FS__CLIB_strcmp(pMode, "del") == 0);    /* Delete file request */
  lexp_a = lexp_b && (i >= 0);                      /* File does exist */
  if (lexp_a) {
    i = FS__fat_DeleteFileOrDir(pFile->dev_index, unit, realname, dstart, dsize, 1);
    if (i != 0) {
      pFile->error = -1;
    }
    else {
      pFile->error = 0;
    }
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo, FS_CMD_FLUSH_CACHE, 2, (void*)0);
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
    return 0;
  }
  else if (lexp_b) {
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
    pFile->error = -1;
    return 0;
  }
  /* Check read only */
  lexp_a = ((i >= 0) && ((s.data[11] & FS_FAT_ATTR_READ_ONLY) != 0)) &&
          ((pFile->mode_w) || (pFile->mode_a) || (pFile->mode_c));
  if (lexp_a) {
    /* Files is RO and we try to create, write or append */
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
    return 0;
  }
  lexp_a = ( i>= 0) && (!pFile->mode_a) && (((pFile->mode_w) && (!pFile->mode_r)) || 
          ((pFile->mode_w) && (pFile->mode_c) && (pFile->mode_r)) );
  if (lexp_a) {
    /* Delete old file */
    i = FS__fat_DeleteFileOrDir(pFile->dev_index, unit, realname, dstart, dsize, 1);
    /* FileSize = 0 */
    s.data[28] = 0x00;      
    s.data[29] = 0x00;
    s.data[30] = 0x00;
    s.data[31] = 0x00;
    i=-1;
  }
  if ((!pFile->mode_c) && (i < 0)) {
    /* File does not exist and we must not create */
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
    return 0;
  }
  else if ((pFile->mode_c) && (i < 0)) {
    /* Create new file */
    i = _FS_fat_create_file(pFile->dev_index, unit, realname, dstart, dsize);
    if (i < 0) {
      /* Could not create file */
      if (i == -2) {
        /* Directory is full, try to increase */
        i = _FS_fat_IncDir(pFile->dev_index, unit, dstart, &dsize);
        if (i > 0) {
          i = _FS_fat_create_file(pFile->dev_index, unit, realname, dstart, dsize);
        }
      }
      if (i < 0) {
        FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
        return 0;
      }
    }
  }
  pFile->fileid_lo  = unit;
  pFile->fileid_hi  = i;
  pFile->fileid_ex  = dstart;
  pFile->EOFClust   = -1;
  pFile->CurClust   = 0;
  pFile->error      = 0;
  pFile->size       = (FS_u32)s.data[28];   /* FileSize */
  pFile->size      += (FS_u32)0x100UL * s.data[29];
  pFile->size      += (FS_u32)0x10000UL * s.data[30];
  pFile->size      += (FS_u32)0x1000000UL * s.data[31];
  if (pFile->mode_a) {
    pFile->filepos   = pFile->size;
  }
  else {
    pFile->filepos   = 0;
  }
  pFile->inuse     = 1;
  return pFile;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲第一| 欧美剧情片在线观看| 日本高清不卡在线观看| 欧美大片一区二区三区| 中文字幕中文字幕一区| 日韩国产欧美一区二区三区| 成人av在线电影| 欧美tickle裸体挠脚心vk| 国产精品久99| 狠狠色综合播放一区二区| 日本黄色一区二区| 日韩一区欧美小说| 中文字幕成人av| kk眼镜猥琐国模调教系列一区二区| 一本到高清视频免费精品| 久久综合久久综合久久综合| 亚洲高清在线精品| 97国产一区二区| 国产亚洲成年网址在线观看| 日韩高清不卡一区二区三区| 欧美性受xxxx| 亚洲精品视频在线看| 成人午夜av影视| 国产校园另类小说区| 久久精品国产秦先生| 91精品国产综合久久婷婷香蕉 | 成人小视频在线| 亚洲va欧美va人人爽| 国产91精品一区二区麻豆亚洲| 欧美久久久一区| 亚洲一区在线视频| 91福利资源站| 污片在线观看一区二区| 欧美在线观看18| 亚洲国产美女搞黄色| 欧美色视频在线| 日韩电影在线免费看| 91 com成人网| 九九久久精品视频| 精品99999| 国产成人精品综合在线观看| 久久精品一区二区三区av| 国产丶欧美丶日本不卡视频| 国产日韩一级二级三级| 高清成人在线观看| 日韩精品中文字幕一区二区三区| 夜夜嗨av一区二区三区| 欧美这里有精品| 日韩av成人高清| 精品毛片乱码1区2区3区| 国产尤物一区二区| 国产精品九色蝌蚪自拍| 欧美色老头old∨ideo| 奇米色一区二区| 久久久久9999亚洲精品| 91一区二区在线| 午夜在线成人av| 久久综合久久综合久久综合| 成人爱爱电影网址| 亚洲小说春色综合另类电影| 欧美一级高清片| 成人黄页毛片网站| 亚洲高清在线精品| 亚洲精品在线网站| 在线观看国产一区二区| 麻豆成人久久精品二区三区小说| 国产亚洲自拍一区| 色女孩综合影院| 精品无人区卡一卡二卡三乱码免费卡 | 欧美麻豆精品久久久久久| 奇米综合一区二区三区精品视频| 久久久三级国产网站| 91热门视频在线观看| 精品一区二区成人精品| 亚洲三级在线观看| 日韩精品一区二区三区在线观看| 成熟亚洲日本毛茸茸凸凹| 香蕉久久夜色精品国产使用方法| 国产亚洲综合在线| 91精品国产综合久久久久久久久久 | 99re这里只有精品视频首页| 日韩精品福利网| 日韩一区欧美一区| 欧美不卡123| 日本乱码高清不卡字幕| 日韩欧美久久一区| 成人av综合一区| 日本aⅴ精品一区二区三区| 中文字幕中文字幕在线一区 | 91美女精品福利| 国产精品中文欧美| 日韩精品电影在线| 一二三区精品视频| 亚洲欧洲综合另类在线| 久久久精品中文字幕麻豆发布| 欧美三级中文字幕| 色999日韩国产欧美一区二区| 国产成人精品免费在线| 精品一区二区在线视频| 日韩制服丝袜av| 亚洲精品老司机| 中文字幕亚洲精品在线观看| 久久精品在线免费观看| 久久婷婷国产综合精品青草| 欧美一二三四在线| 91精品国产综合久久福利| 在线观看视频91| 欧美影片第一页| 在线观看中文字幕不卡| 91福利在线观看| 在线一区二区三区四区五区 | 91尤物视频在线观看| aaa欧美日韩| 91免费视频观看| 成人aaaa免费全部观看| 成人精品免费视频| av午夜一区麻豆| 色素色在线综合| 国产美女精品人人做人人爽| 首页国产丝袜综合| 亚洲午夜精品久久久久久久久| 亚洲国产高清不卡| 国产精品色在线| 国产精品久久久久久亚洲伦| 欧美国产一区视频在线观看| 国产精品久久久久久久久久免费看| 欧美国产在线观看| 亚洲色图欧洲色图婷婷| 亚洲小说欧美激情另类| 日韩av电影天堂| 国产美女精品在线| 99国产精品久久久久久久久久| 99久久久久久99| 欧美人xxxx| 久久综合资源网| 中文字幕精品一区二区三区精品| 亚洲欧洲日韩在线| 亚洲午夜三级在线| 蜜臀av一级做a爰片久久| 国产在线一区二区综合免费视频| 久热成人在线视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 经典一区二区三区| 懂色av一区二区三区免费观看| 99久久免费国产| 91精品国产品国语在线不卡| 久久久久久久av麻豆果冻| 亚洲天堂久久久久久久| 午夜私人影院久久久久| 韩国欧美国产一区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美日韩视频专区在线播放| 久久亚洲精精品中文字幕早川悠里 | 在线看日韩精品电影| 日韩一级在线观看| 国产精品色哟哟网站| 日韩专区一卡二卡| 99视频精品免费视频| 91精品国产品国语在线不卡| 亚洲欧洲成人自拍| 久久精品国产一区二区三| fc2成人免费人成在线观看播放| 欧美日韩电影一区| 中文在线资源观看网站视频免费不卡| 成人国产一区二区三区精品| 波多野结衣在线aⅴ中文字幕不卡| 欧美电影一区二区| 欧美激情自拍偷拍| 免费成人你懂的| 91在线观看免费视频| 久久综合狠狠综合久久激情| 亚洲一区在线视频| 99热精品国产| 26uuu精品一区二区在线观看| 亚洲一区二区三区中文字幕| 国产馆精品极品| 欧美成人欧美edvon| 亚洲一区二区三区四区在线| 成人免费看视频| 久久尤物电影视频在线观看| 无吗不卡中文字幕| 欧美性大战久久久久久久蜜臀| 一区视频在线播放| 成人国产视频在线观看| 日韩免费视频一区| 视频一区二区欧美| 欧美性猛片xxxx免费看久爱| 久久久久高清精品| 视频一区二区中文字幕| 欧美日韩一级片在线观看| 国产精品久久久久久久久快鸭| 国产成人小视频| 久久久综合激的五月天| 精品一区二区三区久久| 久久综合久久综合久久综合| 久久av中文字幕片| 久久久久久久久久久久电影| 国模大尺度一区二区三区| 欧美成人女星排名| 精品一区二区三区免费毛片爱|