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

📄 beosea.cpp

📁 source code for unrar3.3.4,uppack the .rar files,for multi-os
💻 CPP
字号:
void ExtractBeEA(Archive &Arc,char *FileName){  if (Arc.HeaderCRC!=Arc.EAHead.HeadCRC)  {    Log(Arc.FileName,St(MEABroken),FileName);    ErrHandler.SetErrorCode(CRC_ERROR);    return;  }  if (Arc.EAHead.Method<0x31 || Arc.EAHead.Method>0x35 || Arc.EAHead.UnpVer>PACK_VER)  {    Log(Arc.FileName,St(MEAUnknHeader),FileName);    return;  }  ComprDataIO DataIO;  Unpack Unpack(&DataIO);  Unpack.Init();  Array<byte> UnpData(Arc.EAHead.UnpSize);  DataIO.SetUnpackToMemory(&UnpData[0],Arc.EAHead.UnpSize);  DataIO.SetPackedSizeToRead(Arc.EAHead.DataSize);  DataIO.EnableShowProgress(false);  DataIO.SetFiles(&Arc,NULL);  Unpack.SetDestSize(Arc.EAHead.UnpSize);  Unpack.DoUnpack(Arc.EAHead.UnpVer,false);  if (Arc.EAHead.EACRC!=~DataIO.UnpFileCRC)  {    Log(Arc.FileName,St(MEABroken),FileName);    ErrHandler.SetErrorCode(CRC_ERROR);    return;  }  int fd = open(FileName,O_WRONLY);  if (fd==-1)  {    Log(Arc.FileName,St(MCannotSetEA),FileName);    ErrHandler.SetErrorCode(WARNING);    return;  }  int AttrPos=0;  while (AttrPos<Arc.EAHead.UnpSize)  {    unsigned char *CurItem=&UnpData[AttrPos];    int NameSize=CurItem[0]+((int)CurItem[1]<<8);    int Type=CurItem[2]+((int)CurItem[3]<<8)+((int)CurItem[4]<<16)+((int)CurItem[5]<<24);    int Size=CurItem[6]+((int)CurItem[7]<<8)+((int)CurItem[8]<<16)+((int)CurItem[9]<<24);    char Name[1024];    if (NameSize>=sizeof(Name))    {      Log(Arc.FileName,St(MCannotSetEA),FileName);      ErrHandler.SetErrorCode(WARNING);      break;    }    memcpy(Name,CurItem+10,NameSize);    Name[NameSize]=0;    if (fs_write_attr(fd,Name,Type,0,CurItem+10+NameSize,Size)==-1)    {      Log(Arc.FileName,St(MCannotSetEA),FileName);      ErrHandler.SetErrorCode(WARNING);      break;    }    AttrPos+=10+NameSize+Size;  }  close(fd);  mprintf(St(MShowEA));}void ExtractBeEANew(Archive &Arc,char *FileName){  Array<byte> SubData;  if (!Arc.ReadSubData(&SubData,NULL))    return;  int fd = open(FileName,O_WRONLY);  if (fd==-1)  {    Log(Arc.FileName,St(MCannotSetEA),FileName);    ErrHandler.SetErrorCode(WARNING);    return;  }  int AttrPos=0;  while (AttrPos<Arc.EAHead.UnpSize)  {    unsigned char *CurItem=&SubData[AttrPos];    int NameSize=CurItem[0]+((int)CurItem[1]<<8);    int Type=CurItem[2]+((int)CurItem[3]<<8)+((int)CurItem[4]<<16)+((int)CurItem[5]<<24);    int Size=CurItem[6]+((int)CurItem[7]<<8)+((int)CurItem[8]<<16)+((int)CurItem[9]<<24);    char Name[1024];    if (NameSize>=sizeof(Name))    {      Log(Arc.FileName,St(MCannotSetEA),FileName);      ErrHandler.SetErrorCode(WARNING);      break;    }    memcpy(Name,CurItem+10,NameSize);    Name[NameSize]=0;    if (fs_write_attr(fd,Name,Type,0,CurItem+10+NameSize,Size)==-1)    {      Log(Arc.FileName,St(MCannotSetEA),FileName);      ErrHandler.SetErrorCode(WARNING);      break;    }    AttrPos+=10+NameSize+Size;  }  close(fd);  mprintf(St(MShowEA));}

⌨️ 快捷键说明

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