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

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

?? hfshandler.cpp

?? 壓縮解壓工具7-zip源代碼
?? CPP
字號:
// HfsHandler.cpp

#include "StdAfx.h"

#include "Common/ComTry.h"
#include "Windows/PropVariant.h"
#include "../../Common/StreamUtils.h"
#include "HfsHandler.h"

namespace NArchive {
namespace NHfs {

STATPROPSTG kProps[] =
{
  { NULL, kpidPath, VT_BSTR},
  { NULL, kpidIsDir, VT_BOOL},
  { NULL, kpidSize, VT_UI8},
  { NULL, kpidPackSize, VT_UI8},
  { NULL, kpidCTime, VT_FILETIME},
  { NULL, kpidMTime, VT_FILETIME},
  { NULL, kpidATime, VT_FILETIME}
};

STATPROPSTG kArcProps[] =
{
  { NULL, kpidMethod, VT_BSTR},
  { NULL, kpidClusterSize, VT_UI4},
  { NULL, kpidFreeSpace, VT_UI8},
  { NULL, kpidCTime, VT_FILETIME},
  { NULL, kpidMTime, VT_FILETIME}
};

IMP_IInArchive_Props
IMP_IInArchive_ArcProps

static void HfsTimeToProp(UInt32 hfsTime, NWindows::NCOM::CPropVariant &prop)
{
  FILETIME ft;
  HfsTimeToFileTime(hfsTime, ft);
  prop = ft;
}

STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value)
{
  COM_TRY_BEGIN
  NWindows::NCOM::CPropVariant prop;
  switch(propID)
  {
    case kpidMethod: prop = _db.Header.IsHfsX() ? L"HFSX" : L"HFS+"; break;
    case kpidClusterSize: prop = (UInt32)1 << _db.Header.BlockSizeLog; break;
    case kpidFreeSpace: prop = (UInt64)_db.Header.NumFreeBlocks << _db.Header.BlockSizeLog; break;
    case kpidMTime: HfsTimeToProp(_db.Header.MTime, prop); break;
    case kpidCTime:
    {
      FILETIME localFt, ft;
      HfsTimeToFileTime(_db.Header.CTime, localFt);
      if (LocalFileTimeToFileTime(&localFt, &ft))
        prop = ft;
      break;
    }
  }
  prop.Detach(value);
  return S_OK;
  COM_TRY_END
}

STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)
{
  COM_TRY_BEGIN
  NWindows::NCOM::CPropVariant prop;
  const CItem &item = _db.Items[index];
  switch(propID)
  {
    case kpidPath: prop = _db.GetItemPath(index); break;
    case kpidIsDir: prop = item.IsDir(); break;

    case kpidCTime:  HfsTimeToProp(item.CTime, prop); break;
    case kpidMTime:  HfsTimeToProp(item.MTime, prop); break;
    case kpidATime:  HfsTimeToProp(item.ATime, prop); break;

    case kpidPackSize: if (!item.IsDir()) prop = (UInt64)item.NumBlocks << _db.Header.BlockSizeLog; break;
    case kpidSize:     if (!item.IsDir()) prop = item.Size; break;
  }
  prop.Detach(value);
  return S_OK;
  COM_TRY_END
}

class CProgressImp: public CProgressVirt
{
  CMyComPtr<IArchiveOpenCallback> _callback;
public:
  HRESULT SetTotal(UInt64 numFiles);
  HRESULT SetCompleted(UInt64 numFiles);
  CProgressImp(IArchiveOpenCallback *callback): _callback(callback) {}
};

HRESULT CProgressImp::SetTotal(UInt64 numFiles)
{
  if (_callback)
    return _callback->SetTotal(&numFiles, NULL);
  return S_OK;
}

HRESULT CProgressImp::SetCompleted(UInt64 numFiles)
{
  if (_callback)
    return _callback->SetCompleted(&numFiles, NULL);
  return S_OK;
}

STDMETHODIMP CHandler::Open(IInStream *inStream,
    const UInt64 * /* maxCheckStartPosition */,
    IArchiveOpenCallback *callback)
{
  COM_TRY_BEGIN
  Close();
  try
  {
    CProgressImp progressImp(callback);
    HRESULT res = _db.Open(inStream, &progressImp);
    if (res == E_ABORT)
      return res;
    if (res != S_OK)
      return S_FALSE;
    _stream = inStream;
  }
  catch(...) { return S_FALSE; }
  return S_OK;
  COM_TRY_END
}

STDMETHODIMP CHandler::Close()
{
  _stream.Release();
  _db.Clear();
  return S_OK;
}

STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
    Int32 _aTestMode, IArchiveExtractCallback *extractCallback)
{
  COM_TRY_BEGIN
  bool testMode = (_aTestMode != 0);
  bool allFilesMode = (numItems == UInt32(-1));
  if (allFilesMode)
    numItems = _db.Items.Size();
  if (numItems == 0)
    return S_OK;
  UInt32 i;
  UInt64 totalSize = 0;
  for (i = 0; i < numItems; i++)
  {
    const CItem &item = _db.Items[allFilesMode ? i : indices[i]];
    if (!item.IsDir())
      totalSize += item.Size;
  }
  RINOK(extractCallback->SetTotal(totalSize));

  UInt64 currentTotalSize = 0, currentItemSize = 0;
  
  CByteBuffer buf;
  const UInt32 kBufSize = (1 << 16);
  buf.SetCapacity(kBufSize);

  for (i = 0; i < numItems; i++, currentTotalSize += currentItemSize)
  {
    RINOK(extractCallback->SetCompleted(&currentTotalSize));
    Int32 index = allFilesMode ? i : indices[i];
    const CItem &item = _db.Items[index];
    currentItemSize = 0;
    if (!item.IsDir())
      currentItemSize = item.Size;

    CMyComPtr<ISequentialOutStream> realOutStream;
    Int32 askMode = testMode ?
        NArchive::NExtract::NAskMode::kTest :
        NArchive::NExtract::NAskMode::kExtract;
    RINOK(extractCallback->GetStream(index, &realOutStream, askMode));

    if (item.IsDir())
    {
      RINOK(extractCallback->PrepareOperation(askMode));
      RINOK(extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kOK));
      continue;
    }
    if (!testMode && (!realOutStream))
      continue;
    RINOK(extractCallback->PrepareOperation(askMode));
    UInt64 pos = 0;
    int res = NArchive::NExtract::NOperationResult::kOK;
    int i;
    for (i = 0; i < item.Extents.Size(); i++)
    {
      if (item.Size == pos)
        break;
      if (res != NArchive::NExtract::NOperationResult::kOK)
        break;
      const CExtent &e = item.Extents[i];
      RINOK(_stream->Seek((UInt64)e.Pos << _db.Header.BlockSizeLog, STREAM_SEEK_SET, NULL));
      UInt64 extentSize = (UInt64)e.NumBlocks << _db.Header.BlockSizeLog;
      for (;;)
      {
        if (extentSize == 0)
          break;
        UInt64 rem = item.Size - pos;
        if (rem == 0)
        {
          if (extentSize >= (UInt64)((UInt32)1 << _db.Header.BlockSizeLog))
            res = NArchive::NExtract::NOperationResult::kDataError;
          break;
        }
        UInt32 curSize = kBufSize;
        if (curSize > rem)
          curSize = (UInt32)rem;
        if (curSize > extentSize)
          curSize = (UInt32)extentSize;
        RINOK(ReadStream_FALSE(_stream, buf, curSize));
        if (realOutStream)
        {
          RINOK(WriteStream(realOutStream, buf, curSize));
        }
        pos += curSize;
        extentSize -= curSize;
        UInt64 processed = currentTotalSize + pos;
        RINOK(extractCallback->SetCompleted(&processed));
      }
    }
    if (i != item.Extents.Size() || item.Size != pos)
      res = NArchive::NExtract::NOperationResult::kDataError;
    realOutStream.Release();
    RINOK(extractCallback->SetOperationResult(res));
  }
  return S_OK;
  COM_TRY_END
}

STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
{
  *numItems = _db.Items.Size();
  return S_OK;
}

}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区精品在线观看| 成人动漫一区二区三区| 18成人在线观看| 国产欧美日韩视频一区二区 | 国产麻豆视频一区二区| 男男成人高潮片免费网站| 亚洲国产你懂的| 亚洲成人激情社区| 亚洲一区成人在线| 亚洲成年人影院| 麻豆精品视频在线| 国产精品自拍在线| av资源网一区| 欧美在线小视频| 91精品国产高清一区二区三区蜜臀 | 亚洲va韩国va欧美va精品| 亚洲国产一区视频| 美女一区二区三区在线观看| 国产一区二区三区久久久| 成人涩涩免费视频| 日本丰满少妇一区二区三区| 欧美色大人视频| 91麻豆精品国产综合久久久久久| 91精品国产91久久久久久一区二区| 91精品国产色综合久久不卡蜜臀 | 在线成人高清不卡| 久久久欧美精品sm网站| 最近中文字幕一区二区三区| 亚洲成人手机在线| 国产精品18久久久久| 99久久er热在这里只有精品66| 色女孩综合影院| 久久众筹精品私拍模特| 国产精品久久99| 秋霞电影网一区二区| 不卡在线观看av| 91精品国产综合久久精品| 欧美国产精品一区二区| 亚洲国产精品久久久久婷婷884 | 亚洲成精国产精品女| 黄色日韩三级电影| 欧美写真视频网站| 久久网这里都是精品| 亚洲午夜一区二区| 从欧美一区二区三区| 4438成人网| 亚洲女同ⅹxx女同tv| 韩日欧美一区二区三区| 欧美日韩一区二区三区四区 | 91影院在线观看| 欧美v亚洲v综合ⅴ国产v| 亚洲欧美视频一区| 高清不卡一区二区在线| 91麻豆精品国产综合久久久久久 | 午夜精品福利视频网站| 不卡一区在线观看| 欧美xxxx在线观看| 日日夜夜免费精品视频| 91麻豆自制传媒国产之光| 久久久久青草大香线综合精品| 亚洲成人免费视频| 91网站在线观看视频| 亚洲国产精品99久久久久久久久| 蜜臂av日日欢夜夜爽一区| 欧美在线不卡一区| 亚洲精品中文字幕在线观看| 国产成a人亚洲| 久久久综合激的五月天| 国产一区欧美一区| 日韩精品一区二区三区蜜臀| 日韩精品亚洲一区二区三区免费| 色偷偷久久人人79超碰人人澡| 18成人在线观看| 91丝袜美腿高跟国产极品老师| 国产精品视频第一区| 成人少妇影院yyyy| 国产精品美女久久久久aⅴ国产馆| 国产毛片一区二区| 国产日产欧美精品一区二区三区| 国产酒店精品激情| 国产亚洲欧洲997久久综合| 精品在线一区二区| 久久精品亚洲麻豆av一区二区 | 欧美另类变人与禽xxxxx| 亚洲成人资源在线| 91精品国产福利在线观看| 日韩精品福利网| 欧美成人性福生活免费看| 国产一区二区在线视频| 国产精品网站一区| 色综合色综合色综合| 亚洲国产精品久久久男人的天堂| 欧美人狂配大交3d怪物一区| 欧美a级一区二区| 久久久九九九九| 色综合久久中文综合久久牛| 亚洲午夜私人影院| 亚洲精品一区二区三区蜜桃下载| 国产成人精品一区二区三区四区| 亚洲视频免费观看| 欧美精品1区2区3区| 国产一区二区免费看| 国产精品国产三级国产aⅴ入口 | 911精品产国品一二三产区| 精品一区免费av| 国产精品家庭影院| 7777精品伊人久久久大香线蕉最新版| 另类小说色综合网站| 国产欧美一区二区在线| 欧美影视一区在线| 国产乱一区二区| 亚洲午夜电影在线| 国产欧美精品区一区二区三区| 91麻豆国产自产在线观看| 日本欧美肥老太交大片| 国产精品每日更新| 日韩亚洲欧美在线| 91麻豆视频网站| 久久99国产精品免费| 亚洲美女淫视频| 久久久久国产一区二区三区四区| 欧美艳星brazzers| 国产成人在线免费| 日韩av不卡一区二区| 亚洲人成网站影音先锋播放| 精品欧美乱码久久久久久1区2区| 一本一本大道香蕉久在线精品 | 欧美aa在线视频| 亚洲伦理在线免费看| 国产日韩影视精品| 884aa四虎影成人精品一区| 99re6这里只有精品视频在线观看| 免费在线一区观看| 亚洲一区二区黄色| 亚洲欧美另类综合偷拍| 久久这里只有精品6| 欧美久久一二三四区| 99re这里只有精品6| 国产精品一区2区| 精品在线你懂的| 日韩av午夜在线观看| 夜夜嗨av一区二区三区网页| 亚洲男同1069视频| 欧美国产视频在线| 国产亚洲午夜高清国产拍精品 | 久久久久99精品一区| 日韩欧美国产一区二区三区| 欧美在线观看禁18| 在线精品视频一区二区三四| 成人激情黄色小说| 国产精华液一区二区三区| 国产做a爰片久久毛片| 麻豆成人在线观看| 日本免费新一区视频| 日本va欧美va精品发布| 日韩精品一区第一页| 天涯成人国产亚洲精品一区av| 亚洲伊人伊色伊影伊综合网| 亚洲婷婷综合色高清在线| 亚洲图片欧美激情| 亚洲图片你懂的| 一二三四社区欧美黄| 亚洲第一综合色| 日本欧美肥老太交大片| 精品一区二区久久久| 国产在线不卡一卡二卡三卡四卡| 狠狠狠色丁香婷婷综合久久五月| 国产一区二区在线看| 成人影视亚洲图片在线| av不卡在线播放| 91电影在线观看| 91精品国产综合久久婷婷香蕉 | 国产精品国产自产拍高清av| 中文字幕在线观看一区| 一区二区三区国产精华| 午夜私人影院久久久久| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品自拍av| 一本一道久久a久久精品综合蜜臀| 色婷婷av一区二区三区软件| 欧美日本一区二区三区| 欧美xxxxx牲另类人与| 欧美国产一区二区在线观看| 亚洲视频免费在线观看| 日本亚洲一区二区| 成人不卡免费av| 欧美日韩国产高清一区二区 | 91国偷自产一区二区开放时间| 欧美日韩在线观看一区二区| 欧美精品一区二区不卡| 国产精品乱人伦一区二区| 午夜欧美电影在线观看| 成人免费视频视频| 在线电影欧美成精品| 亚洲国产精品激情在线观看| 天天操天天色综合| 成人avav影音| 日韩精品中文字幕一区| 亚洲自拍偷拍欧美| 成人污污视频在线观看|