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

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

?? cabin.cpp

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

#include "StdAfx.h"

#include "CabIn.h"

#include "../Common/FindSignature.h"

namespace NArchive {
namespace NCab {

Byte CInArchive::ReadByte()
{
  Byte b;
  if (!inBuffer.ReadByte(b))
    throw CInArchiveException(CInArchiveException::kUnsupported);
  return b;
}

UInt16 CInArchive::ReadUInt16()
{
  UInt16 value = 0;
  for (int i = 0; i < 2; i++)
  {
    Byte b = ReadByte();
    value |= (UInt16(b) << (8 * i));
  }
  return value;
}

UInt32 CInArchive::ReadUInt32()
{
  UInt32 value = 0;
  for (int i = 0; i < 4; i++)
  {
    Byte b = ReadByte();
    value |= (UInt32(b) << (8 * i));
  }
  return value;
}

AString CInArchive::SafeReadName()
{
  AString name;
  for (;;)
  {
    Byte b = ReadByte();
    if (b == 0)
      return name;
    name += (char)b;
  }
}

void CInArchive::ReadOtherArchive(COtherArchive &oa)
{
  oa.FileName = SafeReadName();
  oa.DiskName = SafeReadName();
}

void CInArchive::Skeep(size_t size)
{
  while (size-- != 0)
    ReadByte();
}

HRESULT CInArchive::Open2(IInStream *stream,
    const UInt64 *searchHeaderSizeLimit,
    CDatabase &database)
{
  database.Clear();
  RINOK(stream->Seek(0, STREAM_SEEK_SET, &database.StartPosition));

  RINOK(FindSignatureInStream(stream, NHeader::kMarker, NHeader::kMarkerSize,
      searchHeaderSizeLimit, database.StartPosition));

  RINOK(stream->Seek(database.StartPosition + NHeader::kMarkerSize, STREAM_SEEK_SET, NULL));
  if (!inBuffer.Create(1 << 17))
    return E_OUTOFMEMORY;
  inBuffer.SetStream(stream);
  inBuffer.Init();

  CInArchiveInfo &ai = database.ArchiveInfo;

  ai.Size = ReadUInt32();
  if (ReadUInt32() != 0)
    return S_FALSE;
  ai.FileHeadersOffset = ReadUInt32();
  if (ReadUInt32() != 0)
    return S_FALSE;

  ai.VersionMinor = ReadByte();
  ai.VersionMajor = ReadByte();
  ai.NumFolders = ReadUInt16();
  ai.NumFiles = ReadUInt16();
  ai.Flags = ReadUInt16();
  if (ai.Flags > 7)
    return S_FALSE;
  ai.SetID = ReadUInt16();
  ai.CabinetNumber = ReadUInt16();

  if (ai.ReserveBlockPresent())
  {
    ai.PerCabinetAreaSize = ReadUInt16();
    ai.PerFolderAreaSize = ReadByte();
    ai.PerDataBlockAreaSize = ReadByte();

    Skeep(ai.PerCabinetAreaSize);
  }

  {
    if (ai.IsTherePrev())
      ReadOtherArchive(ai.PreviousArchive);
    if (ai.IsThereNext())
      ReadOtherArchive(ai.NextArchive);
  }
  
  int i;
  for (i = 0; i < ai.NumFolders; i++)
  {
    CFolder folder;

    folder.DataStart = ReadUInt32();
    folder.NumDataBlocks = ReadUInt16();
    folder.CompressionTypeMajor = ReadByte();
    folder.CompressionTypeMinor = ReadByte();

    Skeep(ai.PerFolderAreaSize);
    database.Folders.Add(folder);
  }
  
  RINOK(stream->Seek(database.StartPosition + ai.FileHeadersOffset, STREAM_SEEK_SET, NULL));

  inBuffer.SetStream(stream);
  inBuffer.Init();
  for (i = 0; i < ai.NumFiles; i++)
  {
    CItem item;
    item.Size = ReadUInt32();
    item.Offset = ReadUInt32();
    item.FolderIndex = ReadUInt16();
    UInt16 pureDate = ReadUInt16();
    UInt16 pureTime = ReadUInt16();
    item.Time = ((UInt32(pureDate) << 16)) | pureTime;
    item.Attributes = ReadUInt16();
    item.Name = SafeReadName();
    int folderIndex = item.GetFolderIndex(database.Folders.Size());
    if (folderIndex >= database.Folders.Size())
      return S_FALSE;
    database.Items.Add(item);
  }
  return S_OK;
}

#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; }

HRESULT CInArchive::Open(
    const UInt64 *searchHeaderSizeLimit,
    CDatabaseEx &database)
{
  return Open2(database.Stream, searchHeaderSizeLimit, database);
}


static int CompareMvItems2(const CMvItem *p1, const CMvItem *p2)
{
  RINOZ(MyCompare(p1->VolumeIndex, p2->VolumeIndex));
  return MyCompare(p1->ItemIndex, p2->ItemIndex);
}

static int CompareMvItems(const CMvItem *p1, const CMvItem *p2, void *param)
{
  const CMvDatabaseEx &mvDb = *(const CMvDatabaseEx *)param;
  const CDatabaseEx &db1 = mvDb.Volumes[p1->VolumeIndex];
  const CDatabaseEx &db2 = mvDb.Volumes[p2->VolumeIndex];
  const CItem &item1 = db1.Items[p1->ItemIndex];
  const CItem &item2 = db2.Items[p2->ItemIndex];;
  bool isDir1 = item1.IsDir();
  bool isDir2 = item2.IsDir();
  if (isDir1 && !isDir2)
    return -1;
  if (isDir2 && !isDir1)
    return 1;
  int f1 = mvDb.GetFolderIndex(p1);
  int f2 = mvDb.GetFolderIndex(p2);
  RINOZ(MyCompare(f1, f2));
  RINOZ(MyCompare(item1.Offset, item2.Offset));
  RINOZ(MyCompare(item1.Size, item2.Size));
  return CompareMvItems2(p1, p2);
}

bool CMvDatabaseEx::AreItemsEqual(int i1, int i2)
{
  const CMvItem *p1 = &Items[i1];
  const CMvItem *p2 = &Items[i2];
  const CDatabaseEx &db1 = Volumes[p1->VolumeIndex];
  const CDatabaseEx &db2 = Volumes[p2->VolumeIndex];
  const CItem &item1 = db1.Items[p1->ItemIndex];
  const CItem &item2 = db2.Items[p2->ItemIndex];;
  return GetFolderIndex(p1) == GetFolderIndex(p2) &&
    item1.Offset == item2.Offset &&
    item1.Size == item2.Size &&
    item1.Name == item2.Name;
}

void CMvDatabaseEx::FillSortAndShrink()
{
  Items.Clear();
  StartFolderOfVol.Clear();
  FolderStartFileIndex.Clear();
  int offset = 0;
  for (int v = 0; v < Volumes.Size(); v++)
  {
    const CDatabaseEx &db = Volumes[v];
    int curOffset = offset;
    if (db.IsTherePrevFolder())
      curOffset--;
    StartFolderOfVol.Add(curOffset);
    offset += db.GetNumberOfNewFolders();

    CMvItem mvItem;
    mvItem.VolumeIndex = v;
    for (int i = 0 ; i < db.Items.Size(); i++)
    {
      mvItem.ItemIndex = i;
      Items.Add(mvItem);
    }
  }

  Items.Sort(CompareMvItems, (void *)this);
  int j = 1;
  int i;
  for (i = 1; i < Items.Size(); i++)
    if (!AreItemsEqual(i, i -1))
      Items[j++] = Items[i];
  Items.DeleteFrom(j);

  for (i = 0; i < Items.Size(); i++)
  {
    const CMvItem &mvItem = Items[i];
    int folderIndex = GetFolderIndex(&mvItem);
    if (folderIndex >= FolderStartFileIndex.Size())
      FolderStartFileIndex.Add(i);
  }
}

bool CMvDatabaseEx::Check()
{
  for (int v = 1; v < Volumes.Size(); v++)
  {
    const CDatabaseEx &db1 = Volumes[v];
    if (db1.IsTherePrevFolder())
    {
      const CDatabaseEx &db0 = Volumes[v - 1];
      if (db0.Folders.IsEmpty() || db1.Folders.IsEmpty())
        return false;
      const CFolder &f0 = db0.Folders.Back();
      const CFolder &f1 = db1.Folders.Front();
      if (f0.CompressionTypeMajor != f1.CompressionTypeMajor ||
          f0.CompressionTypeMinor != f1.CompressionTypeMinor)
        return false;
    }
  }
  UInt64 maxPos = 0;
  int prevFolder = -2;
  for (int i = 0; i < Items.Size(); i++)
  {
    const CMvItem &mvItem = Items[i];
    int fIndex = GetFolderIndex(&mvItem);
    if (fIndex >= FolderStartFileIndex.Size())
      return false;
    const CItem &item = Volumes[mvItem.VolumeIndex].Items[mvItem.ItemIndex];
    if (item.IsDir())
      continue;
    int folderIndex = GetFolderIndex(&mvItem);
    if (folderIndex != prevFolder)
    {
      prevFolder = folderIndex;
      maxPos = 0;
      continue;
    }
    if (item.Offset < maxPos)
      return false;
    maxPos = item.GetEndOffset();
    if (maxPos < item.Offset)
      return false;
  }
  return true;
}

}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人av免费| 亚洲免费观看高清完整| 偷拍亚洲欧洲综合| 欧美男人的天堂一二区| 日韩精品国产精品| 久久综合精品国产一区二区三区| 久久综合综合久久综合| 精品国产乱码久久久久久蜜臀| 国产一区在线不卡| 国产精品少妇自拍| 日本高清不卡一区| 亚洲成人自拍网| 久久久久久黄色| 色综合网色综合| 日韩精品欧美精品| 国产三级三级三级精品8ⅰ区| 99视频一区二区| 日韩黄色免费电影| 久久久777精品电影网影网| 色哟哟在线观看一区二区三区| 亚洲v精品v日韩v欧美v专区| 久久综合狠狠综合久久激情| 一本一本大道香蕉久在线精品| 日本aⅴ亚洲精品中文乱码| 中文一区在线播放 | 国产永久精品大片wwwapp| 国产日韩视频一区二区三区| 色婷婷av一区二区三区大白胸| 日本系列欧美系列| 中文字幕在线观看不卡视频| 91精品国产品国语在线不卡| thepron国产精品| 久久精品国产色蜜蜜麻豆| 亚洲视频电影在线| 精品捆绑美女sm三区| 色婷婷精品久久二区二区蜜臂av| 狠狠色2019综合网| 亚洲图片欧美一区| 国产精品美女久久久久高潮| 91精品国产综合久久精品| av一区二区三区在线| 精品在线亚洲视频| 亚洲午夜免费视频| 中文字幕一区二区在线观看| 日韩精品中文字幕一区| 色狠狠一区二区| 国产 日韩 欧美大片| 免费成人美女在线观看.| 一区二区三区日韩精品视频| 久久精品视频在线看| 欧美精品 国产精品| www.日韩在线| 国产高清久久久久| 久久成人麻豆午夜电影| 午夜久久电影网| 一区二区三区.www| 亚洲乱码精品一二三四区日韩在线 | 亚洲国产日日夜夜| 一区视频在线播放| 欧美高清在线精品一区| 精品国产乱码久久久久久老虎| 欧美日产在线观看| 欧美在线观看禁18| 色欧美88888久久久久久影院| 成人综合激情网| 国产成人免费9x9x人网站视频| 精彩视频一区二区| 免费在线观看一区二区三区| 青青草视频一区| 免费在线视频一区| 麻豆91精品91久久久的内涵| 亚洲高清视频中文字幕| 亚洲成人av电影在线| 五月婷婷综合激情| 五月天婷婷综合| 午夜精品久久久久久久久久久| 亚洲国产视频网站| 图片区小说区区亚洲影院| 亚洲成人你懂的| 图片区小说区国产精品视频| 日本欧美一区二区三区乱码| 天天综合网 天天综合色| 日本不卡高清视频| 精品在线免费观看| 国产91丝袜在线18| www.亚洲免费av| 欧美视频一区在线观看| 欧美日韩高清在线| 日韩精品在线一区二区| 精品久久久久久久一区二区蜜臀| 久久亚洲综合色一区二区三区| 久久亚洲一级片| 日韩美女精品在线| 亚洲一区二区在线免费看| 日韩精品一区第一页| 精品午夜一区二区三区在线观看| 国产福利一区在线| aaa欧美日韩| 欧美精品乱码久久久久久按摩| 日韩一级完整毛片| 欧美国产亚洲另类动漫| 亚洲女爱视频在线| 丝袜亚洲另类丝袜在线| 国产裸体歌舞团一区二区| 成人黄色软件下载| 欧美日韩一区二区在线观看| 777精品伊人久久久久大香线蕉| 久久欧美一区二区| 亚洲靠逼com| 久久电影国产免费久久电影| 成人av网站大全| 欧美图片一区二区三区| 精品电影一区二区| 亚洲欧洲制服丝袜| 国内欧美视频一区二区| 在线亚洲免费视频| 国产亚洲人成网站| 亚洲第四色夜色| 成人精品免费网站| 正在播放亚洲一区| 中文字幕一区二区三区视频 | 国产精品国产自产拍高清av王其 | 91精品综合久久久久久| 国产精品成人免费精品自在线观看| 亚洲自拍偷拍九九九| 国产精品一区一区| 欧美日韩国产欧美日美国产精品| 精品国产乱码久久久久久影片| 亚洲精品一二三四区| 国产乱码精品一区二区三区忘忧草| 欧美在线一区二区| 欧美激情艳妇裸体舞| 另类小说视频一区二区| 欧美在线你懂得| 国产精品伦理一区二区| 狠狠色丁香久久婷婷综合丁香| 欧美日韩欧美一区二区| 国产精品不卡一区| 国产一区二区毛片| 日韩午夜在线影院| 午夜电影一区二区| 91福利在线看| 亚洲免费伊人电影| 国v精品久久久网| 精品久久久三级丝袜| 免费看精品久久片| 欧美精品久久99| 亚洲成a人在线观看| 91成人在线精品| 亚洲丝袜精品丝袜在线| 成人精品视频.| 国产欧美1区2区3区| 国产资源精品在线观看| 欧美一级xxx| 天堂久久久久va久久久久| 欧美自拍丝袜亚洲| 亚洲精品美国一| 91香蕉视频在线| 亚洲人xxxx| 91黄色激情网站| 一区二区三区在线观看动漫| 91天堂素人约啪| 亚洲人123区| 在线观看国产日韩| 亚洲一区免费在线观看| 色狠狠色噜噜噜综合网| 一区二区三区在线观看国产| 在线亚洲免费视频| 亚洲国产视频a| 在线电影欧美成精品| 午夜影院在线观看欧美| 欧美精品少妇一区二区三区| 亚洲一本大道在线| 欧美一级片在线观看| 免费在线观看一区二区三区| 日韩欧美一区二区免费| 国产一二精品视频| 中文字幕乱码一区二区免费| www.久久精品| 亚洲成人综合视频| 日韩视频永久免费| 激情欧美一区二区三区在线观看| 久久嫩草精品久久久精品一| 成人免费的视频| 一区二区在线观看视频| 在线观看免费成人| 日韩电影免费在线看| 久久亚洲精精品中文字幕早川悠里| 国产xxx精品视频大全| 亚洲日本va午夜在线电影| 欧美三级欧美一级| 精品一区二区影视| 国产精品久久久久久久久快鸭| 色综合久久久久| 久久精品国产999大香线蕉| 中文字幕免费不卡在线| 欧美日韩精品欧美日韩精品一综合| 青青国产91久久久久久| 国产精品久久久久桃色tv| 欧美色手机在线观看|