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

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

?? fat_out.c

?? 這套代碼已經成功一直到S3C44B0X開發板上
?? C
?? 第 1 頁 / 共 2 頁
字號:
  }
  todo = N * Size;  /* Number of bytes to be written */
  if (!todo) {
    FS__fat_free(buffer);
    return 0;
  }
  /* Alloc new clusters if required */
  bytesperclus = (FS_u32)FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].SecPerClus *
                 ((FS_u32)FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].BytesPerSec);
  /* Calculate number of clusters required */
  i = (pFile->filepos + todo) / bytesperclus;
  if ((pFile->filepos + todo) % bytesperclus) {
    i++;
  }
  /* Calculate clusters already allocated */
  j = pFile->size / bytesperclus;
  lexp = (pFile->size % bytesperclus);
  lexp = lexp || (pFile->size == 0);
  if (lexp) {
    j++;
  }
  i -= j;
  if (i > 0) {
    /* Alloc new clusters */
    last = pFile->EOFClust;
    if (last < 0) {
      /* Position of EOF is unknown, so we scan the whole file to find it */
      last = FS__fat_FAT_find_eof(pFile->dev_index, pFile->fileid_lo, pFile->fileid_hi, 0);
    }
    if (last < 0) {
      /* No EOF found */
      FS__fat_free(buffer);
      return 0;
    }
    while (i) {
      last = FS__fat_FAT_alloc(pFile->dev_index, pFile->fileid_lo, last);  /* Allocate new cluster */
      pFile->EOFClust = last;
      if (last < 0) {
        /* Cluster allocation failed */
        pFile->size += (N * Size - todo);
        pFile->error = FS_ERR_DISKFULL;
        FS__fat_free(buffer);
        return ((N * Size - todo) / Size);
      }
      i--;
    }
  }
  /* Get absolute postion of data area on the media */
  dstart    = (FS_u32)FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].RsvdSecCnt + 
              FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].NumFATs * fatsize;
  dsize     = ((FS_u32)((FS_u32)FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].RootEntCnt) * FS_FAT_DENTRY_SIZE) / FS_FAT_SEC_SIZE;
  datastart = dstart + dsize;
  /* Write data to clusters */
  prevclust = 0;
  while (todo) {  /* Write data loop */
    /* Translate file ppinter position to cluster position*/
    fileclustnum = pFile->filepos / bytesperclus;
    /* 
       Translate the file relative cluster position to an absolute cluster
       position on the media. To avoid scanning the whole FAT of the file,
       we remember the current cluster position in the FS_FILE data structure.
    */
    if (prevclust == 0) {
      diskclustnum = pFile->CurClust;
      if (diskclustnum == 0) {
        /* No known current cluster position, we have to scan from the file's start cluster */
        diskclustnum = FS__fat_diskclust(pFile->dev_index, pFile->fileid_lo, pFile->fileid_hi, fileclustnum);
      }
    } 
    else {
      /* Get next cluster of the file starting at the current cluster */
      diskclustnum = FS__fat_diskclust(pFile->dev_index, pFile->fileid_lo, prevclust, 1);
    }
    prevclust        = diskclustnum;
    pFile->CurClust  = diskclustnum;
    if (diskclustnum == 0) {
      /* Translation to absolute cluster failed */
      pFile->error = FS_ERR_WRITEERROR;
      FS__fat_free(buffer);
      return ((N * Size - todo) / Size);
    }
    diskclustnum -= 2;
    j = (pFile->filepos % bytesperclus) / FS_FAT_SEC_SIZE;
    while (1) {  /* Cluster loop */
      if (!todo) {
        break;  /* Nothing more to write */
      }
      if (j >= FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].SecPerClus) {
        break; /* End of cluster reached */
      }
      i = pFile->filepos % FS_FAT_SEC_SIZE;
      /* 
         We only have to read the sector from the media, if we do not
         modify the whole sector. That is the case if

         a) Writing starts not at the first byte of the sector
         b) Less data than the sector contains is written
      */
      lexp = (i != 0);
      lexp = lexp || (todo < FS_FAT_SEC_SIZE);
      if (lexp) {
        /* We have to read the old sector */
        err = FS__lb_read(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo,
                      datastart +
                      diskclustnum * FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].SecPerClus + j,
                      (void*)buffer);
        if (err < 0) {
          pFile->error = FS_ERR_WRITEERROR;
          FS__fat_free(buffer);
          return ((N * Size - todo) / Size);
        }
      }
      while (1) {  /* Sector loop */
        if (!todo) {
          break;  /* Nothing more to write */
        }
        if (i >= FS_FAT_SEC_SIZE) {
          break;  /* End of sector reached */
        }
        buffer[i] = *((FS_FARCHARPTR)(((FS_FARCHARPTR)pData) + N * Size - todo));
        i++;
        pFile->filepos++;
        if (pFile->filepos > pFile->size) {
          pFile->size = pFile->filepos;
        }
        todo--;
      }  /* Sector loop */
      /* Write the modified sector */
      err = FS__lb_write(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo,
                    datastart +
                    diskclustnum * FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].SecPerClus + j,
                    (void*)buffer);
      if (err < 0) {
        pFile->error = FS_ERR_WRITEERROR;
        FS__fat_free(buffer);
        return ((N * Size - todo) / Size);
      }
      j++;
    }  /* Cluster loop */
  } /* Write data loop */
  if (i >= FS_FAT_SEC_SIZE) {
    if (j >= FS__FAT_aBPBUnit[pFile->dev_index][pFile->fileid_lo].SecPerClus) {
      /* File pointer is already in the next cluster */
      pFile->CurClust = FS__fat_diskclust(pFile->dev_index, pFile->fileid_lo, prevclust, 1);
    }
  }
#if (FS_FAT_FWRITE_UPDATE_DIR)
  /* Modify directory entry */
  err = _FS_fat_read_dentry(pFile->dev_index, pFile->fileid_lo, pFile->fileid_hi, pFile->fileid_ex, &s, &dsec, buffer);
  if (err == 0) {
    pFile->error = FS_ERR_WRITEERROR;
    FS__fat_free(buffer);
    return ((N * Size - todo) / Size);
  }
  s.data[28] = (unsigned char)(pFile->size & 0xff);   /* FileSize */
  s.data[29] = (unsigned char)((pFile->size / 0x100UL) & 0xff);   
  s.data[30] = (unsigned char)((pFile->size / 0x10000UL) & 0xff);
  s.data[31] = (unsigned char)((pFile->size / 0x1000000UL) & 0xff);
  val = FS_X_OS_GetTime();
  s.data[22] = (unsigned char)(val & 0xff);
  s.data[23] = (unsigned char)((val / 0x100) & 0xff);
  val = FS_X_OS_GetDate();
  s.data[24] = (unsigned char)(val & 0xff);
  s.data[25] = (unsigned char)((val / 0x100) & 0xff);
  err = _FS_fat_write_dentry(pFile->dev_index, pFile->fileid_lo, pFile->fileid_hi, &s, dsec, buffer);
  if (err == 0) {
    pFile->error = FS_ERR_WRITEERROR;
  }
#endif /* FS_FAT_FWRITE_UPDATE_DIR */
  FS__fat_free(buffer);
  return ((N * Size - todo) / Size);
}


/*********************************************************************
*
*             FS__fat_fclose
*
  Description:
  FS internal function. Close a file referred by pFile.

  Parameters:
  pFile       - Pointer to a FS_FILE data structure. 
  
  Return value:
  None.
*/

void FS__fat_fclose(FS_FILE *pFile) {
#if (FS_FAT_FWRITE_UPDATE_DIR==0)
  FS__fat_dentry_type s;
  char *buffer;
  FS_u32 dsec;
  FS_u16 val;
#endif /* FS_FAT_FWRITE_UPDATE_DIR */
  int err;

  if (!pFile) {
      return;
  }
  /* Check if media is OK */
  err = FS__lb_status(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo);
  if (err == FS_LBL_MEDIACHANGED) {
    pFile->error = FS_ERR_DISKCHANGED;
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
    pFile->inuse = 0;
    return;
  }
  else if (err < 0) {
    pFile->error = FS_ERR_CLOSE;
    FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
    pFile->inuse = 0;
    return;
  }
#if (FS_FAT_FWRITE_UPDATE_DIR==0)
  /* Modify directory entry */
  buffer = FS__fat_malloc(FS_FAT_SEC_SIZE);
  if (!buffer) {
    pFile->inuse = 0;
    pFile->error = FS_ERR_CLOSE;
    return;
  }
  err = _FS_fat_read_dentry(pFile->dev_index, pFile->fileid_lo, pFile->fileid_hi, pFile->fileid_ex, &s, &dsec, buffer);
  if (err == 0) {
    pFile->inuse = 0;
    pFile->error = FS_ERR_CLOSE;
    FS__fat_free(buffer);
    return;
  }
  s.data[28] = (unsigned char)(pFile->size & 0xff);   /* FileSize */
  s.data[29] = (unsigned char)((pFile->size / 0x100UL) & 0xff);   
  s.data[30] = (unsigned char)((pFile->size / 0x10000UL) & 0xff);
  s.data[31] = (unsigned char)((pFile->size / 0x1000000UL) & 0xff);
  val = FS_X_OS_GetTime();
  s.data[22] = (unsigned char)(val & 0xff);
  s.data[23] = (unsigned char)((val / 0x100) & 0xff);
  val = FS_X_OS_GetDate();
  s.data[24] = (unsigned char)(val & 0xff);
  s.data[25] = (unsigned char)((val / 0x100) & 0xff);
  err = _FS_fat_write_dentry(pFile->dev_index, pFile->fileid_lo, pFile->fileid_hi, &s, dsec, buffer);
  if (err == 0) {
    pFile->error = FS_ERR_CLOSE;
  }
  FS__fat_free(buffer);
#endif /* FS_FAT_FWRITE_UPDATE_DIR */
  err = FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo, FS_CMD_FLUSH_CACHE, 2, (void*)0);
  if (err < 0) {
    pFile->error = FS_ERR_WRITEERROR;
  }
  pFile->inuse = 0;
  FS__lb_ioctl(FS__pDevInfo[pFile->dev_index].devdriver, pFile->fileid_lo, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电视剧免费观看| 国产成人aaa| 久久综合999| 欧美一个色资源| 欧美日韩成人高清| 97se亚洲国产综合自在线观| 国产精品一区在线| 激情av综合网| 国产一区二区三区不卡在线观看| 国内精品伊人久久久久av一坑| 欧美中文字幕不卡| 欧美日韩在线亚洲一区蜜芽| 555www色欧美视频| 欧美变态tickling挠脚心| 久久精品免费在线观看| 国产性做久久久久久| 日本中文一区二区三区| 免费视频最近日韩| 国产精品一区二区黑丝| 日韩一区二区不卡| 日产国产高清一区二区三区| 欧美日韩国产高清一区二区| 亚洲人成影院在线观看| 亚洲v日本v欧美v久久精品| 亚洲一区二区精品久久av| 亚洲成人中文在线| 91麻豆蜜桃一区二区三区| 欧美色男人天堂| 一区二区三区电影在线播| 奇米一区二区三区av| 欧美色图在线观看| 久久伊人蜜桃av一区二区| 免费三级欧美电影| 日韩美女视频在线| 美国一区二区三区在线播放| 国内外精品视频| 精品国产伦一区二区三区观看方式 | 欧美国产视频在线| 亚洲少妇中出一区| 日本亚洲三级在线| 日韩一区二区在线观看视频| 麻豆一区二区三| 久久综合视频网| 国产成人精品网址| 91精品欧美一区二区三区综合在| 午夜免费欧美电影| 99久久综合色| 日韩精品一区二区三区老鸭窝| 精品一二线国产| 欧美久久久久免费| 亚洲视频一二三区| 欧美日韩不卡在线| 国产精品一二三四| 自拍视频在线观看一区二区| 欧美日韩精品三区| 国模套图日韩精品一区二区| 中文一区一区三区高中清不卡| 色伊人久久综合中文字幕| 欧美一级片在线观看| 一区二区三区四区国产精品| 欧美肥胖老妇做爰| 国产伦精品一区二区三区免费迷| 国产精品久久网站| 国产美女一区二区三区| 18成人在线观看| 成人免费观看av| 国产亚洲综合性久久久影院| 色婷婷一区二区| 国产自产v一区二区三区c| 国产精品护士白丝一区av| 欧美日韩一区二区三区高清| 国产精一品亚洲二区在线视频| 亚洲欧美日韩国产成人精品影院| 777奇米四色成人影色区| 国产91高潮流白浆在线麻豆| 亚洲国产欧美一区二区三区丁香婷 | 欧美视频自拍偷拍| 国产精选一区二区三区| 亚洲成av人片| 中文字幕亚洲一区二区av在线 | 久久91精品国产91久久小草| 亚洲欧美日韩国产手机在线| 精品999久久久| 欧美日韩精品一区二区三区| av网站免费线看精品| 久久精品72免费观看| 日韩免费看的电影| 色屁屁一区二区| 成人免费视频一区| 青青草国产成人99久久| 一区二区三区在线观看欧美| 国产精品视频一二| 一本色道久久综合精品竹菊| 狠狠色丁香久久婷婷综合丁香| 午夜日韩在线电影| 亚洲欧美欧美一区二区三区| 久久免费偷拍视频| 成人午夜免费视频| 国模套图日韩精品一区二区| 秋霞国产午夜精品免费视频| 亚洲一区二区三区四区中文字幕| 国产精品嫩草久久久久| 国产视频一区二区在线观看| 精品入口麻豆88视频| 欧美日本乱大交xxxxx| 在线一区二区三区四区| 裸体一区二区三区| 三级欧美在线一区| 久久综合九色综合欧美亚洲| 日韩一级黄色大片| 日韩精品一区二区三区在线| 日韩视频中午一区| 欧美α欧美αv大片| 精品精品国产高清a毛片牛牛| 日韩欧美的一区| 2欧美一区二区三区在线观看视频| 日韩欧美国产综合在线一区二区三区| 日韩午夜在线影院| 久久久综合精品| 日韩国产欧美在线播放| 丝袜国产日韩另类美女| 欧美激情一区二区三区不卡| 国产精品视频你懂的| 亚洲在线观看免费视频| 精品国产精品一区二区夜夜嗨| 亚洲欧美日韩久久| 日韩欧美中文字幕制服| 99国产精品久久| 国产一区二区不卡| 日韩成人一区二区三区在线观看| 亚洲天堂久久久久久久| 久久久久久一二三区| 欧美人妇做爰xxxⅹ性高电影| 国产成人aaa| 国产一区二区日韩精品| 麻豆国产91在线播放| 日本不卡一区二区三区高清视频| 亚洲视频综合在线| 亚洲视频在线观看三级| 一区二区中文视频| 欧美高清在线视频| 久久久精品人体av艺术| 精品理论电影在线| 日韩欧美aaaaaa| 欧美mv日韩mv国产| 日韩午夜电影在线观看| 日韩欧美中文字幕一区| 91精品国产综合久久国产大片| 欧美三级在线播放| 欧美色图12p| 这里只有精品电影| 欧美福利一区二区| 欧美电影免费提供在线观看| 日韩一级大片在线| 日韩丝袜情趣美女图片| 精品日韩在线观看| 国产香蕉久久精品综合网| 国产亚洲精品中文字幕| 欧美国产在线观看| 亚洲欧洲一区二区在线播放| 亚洲美女视频在线| 夜夜操天天操亚洲| 午夜成人免费电影| 免费成人小视频| 国产麻豆精品视频| av电影在线观看完整版一区二区| 91免费视频网| 欧美日韩一区二区不卡| 日韩一区二区三区电影在线观看| 日韩免费看网站| 国产精品国产馆在线真实露脸| 中文字幕日韩一区| 香蕉av福利精品导航| 老司机精品视频在线| 懂色中文一区二区在线播放| 色综合久久久久综合99| 欧美巨大另类极品videosbest | 国产成人免费视频网站| 99久久99久久免费精品蜜臀| 日本高清不卡aⅴ免费网站| 欧美精品亚洲二区| 国产午夜精品一区二区| 一区二区欧美精品| 九九九精品视频| 99re成人精品视频| 欧美一区二区三区在线看| 久久午夜免费电影| 亚洲一区二区三区爽爽爽爽爽| 久久精品久久综合| 一本久久精品一区二区| 日韩视频免费观看高清在线视频| 国产三级三级三级精品8ⅰ区| 亚洲午夜久久久久久久久电影院 | 中文字幕中文字幕中文字幕亚洲无线| 一区二区高清免费观看影视大全| 激情小说欧美图片| 欧美图片一区二区三区| 日本一二三不卡| 免费观看成人av| 在线观看免费一区|