⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arccmt.cpp

📁 source code for unrar3.3.4,uppack the .rar files,for multi-os
💻 CPP
字号:
bool Archive::GetComment(Array<byte> &CmtData){  if (!MainComment)    return(false);  SaveFilePos SavePos(*this);  ushort CmtLength;#ifndef SFX_MODULE  if (OldFormat)  {    Seek(SFXSize+SIZEOF_OLDMHD,SEEK_SET);    CmtLength=GetByte()+(GetByte()<<8);  }  else#endif  {    if (NewMhd.Flags & MHD_COMMENT)    {      Seek(SFXSize+SIZEOF_MARKHEAD+SIZEOF_NEWMHD,SEEK_SET);      ReadHeader();    }    else    {      Seek(SFXSize+SIZEOF_MARKHEAD+NewMhd.HeadSize,SEEK_SET);      return(SearchSubBlock(SUBHEAD_TYPE_CMT)!=0 && ReadCommentData(CmtData)!=0);    }#ifndef SFX_MODULE    if (CommHead.HeadCRC!=HeaderCRC)    {      Log(FileName,St(MLogCommHead));      Alarm();      return(false);    }    CmtLength=CommHead.HeadSize-SIZEOF_COMMHEAD;#endif  }#ifndef SFX_MODULE  if (OldFormat && (OldMhd.Flags & MHD_PACK_COMMENT) || !OldFormat && CommHead.Method!=0x30)  {    if (!OldFormat && (CommHead.UnpVer < 15 || CommHead.UnpVer > UNP_VER || CommHead.Method > 0x35))      return(false);    ComprDataIO DataIO;    Unpack Unpack(&DataIO);    Unpack.Init();    DataIO.SetTestMode(true);    uint UnpCmtLength;    if (OldFormat)    {      UnpCmtLength=GetByte()+(GetByte()<<8);      CmtLength-=2;      DataIO.SetCmt13Encryption();    }    else      UnpCmtLength=CommHead.UnpSize;    DataIO.SetFiles(this,NULL);    DataIO.EnableShowProgress(false);    DataIO.SetPackedSizeToRead(CmtLength);    Unpack.SetDestSize(UnpCmtLength);    Unpack.DoUnpack(CommHead.UnpVer,false);    if (!OldFormat && ((~DataIO.UnpFileCRC)&0xffff)!=CommHead.CommCRC)    {      Log(FileName,St(MLogCommBrk));      Alarm();      return(false);    }    else    {      unsigned char *UnpData;      uint UnpDataSize;      DataIO.GetUnpackedData(&UnpData,&UnpDataSize);      CmtData.Alloc(UnpDataSize);      memcpy(&CmtData[0],UnpData,UnpDataSize);    }  }  else  {    CmtData.Alloc(CmtLength);        Read(&CmtData[0],CmtLength);    if (!OldFormat && CommHead.CommCRC!=(~CRC(0xffffffff,&CmtData[0],CmtLength)&0xffff))    {      Log(FileName,St(MLogCommBrk));      Alarm();      CmtData.Reset();      return(false);    }  }#endif#if defined(_WIN_32) && !defined(_WIN_CE)  if (CmtData.Size()>0)    OemToCharBuff((char*)&CmtData[0],(char*)&CmtData[0],CmtData.Size());#endif  return(CmtData.Size()>0);}int Archive::ReadCommentData(Array<byte> &CmtData){  bool Unicode=SubHead.SubFlags & SUBHEAD_FLAGS_CMT_UNICODE;  if (!ReadSubData(&CmtData,NULL))    return(0);  int CmtSize=CmtData.Size();  if (Unicode)  {    CmtSize/=2;    Array<wchar> CmtDataW(CmtSize+1);    RawToWide(&CmtData[0],&CmtDataW[0],CmtSize);    CmtDataW[CmtSize]=0;    CmtData.Alloc(CmtSize*2);    WideToChar(&CmtDataW[0],(char *)&CmtData[0]);    CmtSize=strlen((char *)&CmtData[0]);    CmtData.Alloc(CmtSize);  }  return(CmtSize);}void Archive::ViewComment(){#ifndef GUI  if (Cmd->DisableComment)    return;  Array<byte> CmtBuf;  if (GetComment(CmtBuf))  {    int CmtSize=CmtBuf.Size();    char *ChPtr=(char *)memchr(&CmtBuf[0],0x1A,CmtSize);    if (ChPtr!=NULL)      CmtSize=ChPtr-(char *)&CmtBuf[0];    mprintf("\n");    OutComment((char *)&CmtBuf[0],CmtSize);  }#endif}#ifndef SFX_MODULEvoid Archive::ViewFileComment(){  if (!(NewLhd.Flags & LHD_COMMENT) || Cmd->DisableComment)    return;#ifndef GUI  mprintf(St(MFileComment));#endif  Array<char> CmtBuf(0x8000);  SaveFilePos SavePos(*this);  if (OldFormat)  {    uint CmtLength=GetByte()+(GetByte()<<8);    Read(&CmtBuf[0],CmtLength);    OutComment(&CmtBuf[0],CmtLength);#ifndef GUI    mprintf("\n");#endif  }  else  {    if (ReadHeader()<7 || CommHead.HeadType!=COMM_HEAD)      return;    if (CommHead.HeadCRC!=HeaderCRC)    {#ifndef GUI      Log(FileName,St(MLogCommHead));#endif      return;    }    if (CommHead.UnpVer < 15 || CommHead.UnpVer > UNP_VER || CommHead.Method > 0x30)      return;    Read(&CmtBuf[0],CommHead.UnpSize);    if (CommHead.CommCRC!=CRC(0xffffffff,&CmtBuf[0],CommHead.UnpSize))    {      Log(FileName,St(MLogBrokFCmt));    }    else    {      OutComment(&CmtBuf[0],CommHead.UnpSize);#ifndef GUI      mprintf("\n");#endif    }  }}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -