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

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

?? fat_open.c

?? ucos在vc下的移植,并建立了文件系統
?? 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资源网站| 国产一区 二区| 久久精品99国产精品| 日韩精品色哟哟| 亚洲综合色成人| 一区二区三区鲁丝不卡| 亚洲欧美日韩国产综合| 1000精品久久久久久久久| 国产精品萝li| 中文字幕亚洲一区二区va在线| 国产精品麻豆一区二区| 国产人成亚洲第一网站在线播放 | 亚洲欧洲在线观看av| 久久综合色8888| 久久综合九色综合97婷婷女人| 久久一区二区视频| 日韩免费性生活视频播放| 精品91自产拍在线观看一区| 国产欧美一区二区精品婷婷| 国产精品久久久久久久第一福利| 一区二区不卡在线播放| 婷婷激情综合网| 青青草国产成人av片免费| 久久99国产精品成人| 国产乱色国产精品免费视频| 成人免费看黄yyy456| 色成人在线视频| 555www色欧美视频| 欧美精品高清视频| 欧美顶级少妇做爰| 日韩一区二区三区视频在线观看| 久久色.com| 亚洲视频在线观看一区| 亚洲一级在线观看| 视频一区中文字幕国产| 久久99日本精品| jiyouzz国产精品久久| 色婷婷精品久久二区二区蜜臀av| 7777精品久久久大香线蕉| 日韩精品综合一本久道在线视频| 国产精品三级电影| 日韩伦理av电影| 日韩不卡一区二区| 国内不卡的二区三区中文字幕| 91农村精品一区二区在线| 欧美精品tushy高清| 中文字幕乱码一区二区免费| 石原莉奈在线亚洲二区| 福利电影一区二区三区| 欧美日韩国产一级片| 国产精品毛片高清在线完整版| 久久99久久精品欧美| 91丨porny丨户外露出| 精品久久久久久久久久久久包黑料| 樱花影视一区二区| 麻豆高清免费国产一区| 91久久奴性调教| 国产精品入口麻豆原神| 日本91福利区| 91国在线观看| 国产欧美日韩在线观看| 美女在线视频一区| 一本色道综合亚洲| 久久尤物电影视频在线观看| 日韩高清不卡在线| av一区二区三区四区| 久久人人爽爽爽人久久久| 日韩不卡手机在线v区| 一本大道av伊人久久综合| 国产精品三级久久久久三级| 国产精品一区二区视频| 欧美电影免费观看高清完整版在线| 亚洲影院理伦片| 99精品欧美一区二区三区小说 | 石原莉奈一区二区三区在线观看| 在线看日本不卡| 国产精品久久久久久久久久久免费看| 国产91露脸合集magnet| 久久精品视频一区| 日韩黄色免费电影| 色素色在线综合| 亚洲免费在线播放| 成人激情动漫在线观看| 国产精品全国免费观看高清| 成a人片亚洲日本久久| 国产精品视频九色porn| 成人av在线观| 亚洲人成在线观看一区二区| 在线观看亚洲一区| 最好看的中文字幕久久| 99re在线视频这里只有精品| 亚洲综合色在线| 在线成人午夜影院| 五月天中文字幕一区二区| 欧美一区二区二区| 午夜电影久久久| 精品乱人伦小说| 国产东北露脸精品视频| 国产精品国产三级国产aⅴ中文| 欧美日韩极品在线观看一区| 精品在线观看视频| 日韩欧美视频在线| 国产主播一区二区三区| 国产精品五月天| 91久久精品国产91性色tv| 亚洲成人精品影院| 欧美日韩不卡在线| 日日欢夜夜爽一区| 日韩一区二区精品| 激情综合网激情| 综合欧美亚洲日本| 欧美伊人久久久久久久久影院| 精品一区二区三区视频在线观看| 综合亚洲深深色噜噜狠狠网站| 欧美久久久久久久久| 国产二区国产一区在线观看| 亚洲成av人综合在线观看| 精品久久一区二区三区| 色婷婷激情一区二区三区| 国内精品伊人久久久久av影院| 一区二区三区四区蜜桃| 精品三级av在线| 91美女片黄在线观看| 极品少妇一区二区| 国产精品全国免费观看高清| 精品日韩在线一区| 成人av资源下载| 美日韩一区二区| 亚洲黄色性网站| 国产欧美日韩在线看| 欧美一级片在线| 色八戒一区二区三区| 粉嫩嫩av羞羞动漫久久久| 日本成人在线视频网站| 一区二区免费看| 中文字幕免费在线观看视频一区| 欧美大肚乱孕交hd孕妇| 在线视频你懂得一区二区三区| 99久久国产综合精品色伊| 精品一区二区在线视频| 一区二区三区欧美视频| 国产丝袜欧美中文另类| 精品日韩在线观看| 欧美在线小视频| 色综合久久精品| 99精品视频在线观看| 成人性生交大片免费看中文| 懂色av中文一区二区三区| 激情成人午夜视频| 亚洲高清免费视频| 国产精品网站在线观看| 久久综合九色欧美综合狠狠| 久久日韩精品一区二区五区| 久久综合成人精品亚洲另类欧美| 久久免费视频一区| 欧美日韩大陆在线| www.久久久久久久久| 99视频热这里只有精品免费| 99国产精品久久久久久久久久| 成人av综合一区| 99国产欧美久久久精品| av在线播放成人| 在线观看亚洲精品| www.视频一区| 在线一区二区视频| www.亚洲色图| 91美女视频网站| 欧美日韩亚洲国产综合| 欧美日韩精品欧美日韩精品一综合| 9191国产精品| 欧美大黄免费观看| 精品盗摄一区二区三区| 久久久久久一级片| 久久久久久久久久美女| 国产情人综合久久777777| 中文字幕高清不卡| 欧美高清一级片在线观看| 亚洲欧洲性图库| 日韩福利视频网| 国产一区二区三区免费看| 国产不卡在线一区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 高清国产午夜精品久久久久久| 99这里只有久久精品视频| 欧美综合天天夜夜久久| 欧美一区二区视频观看视频| 久久久午夜电影| 一区二区三区在线观看动漫| 老司机精品视频导航| a亚洲天堂av| 91.成人天堂一区| 国产女人aaa级久久久级 | 成人免费va视频| 欧美丝袜丝交足nylons| 精品日韩在线观看| 国产精品三级av在线播放| 亚洲午夜一区二区三区| 国产在线看一区|