Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/Archive/Rar/RarItem.cpp')
-rwxr-xr-xCPP/7zip/Archive/Rar/RarItem.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/CPP/7zip/Archive/Rar/RarItem.cpp b/CPP/7zip/Archive/Rar/RarItem.cpp
new file mode 100755
index 00000000..61a72557
--- /dev/null
+++ b/CPP/7zip/Archive/Rar/RarItem.cpp
@@ -0,0 +1,118 @@
+// RarItem.cpp
+
+#include "StdAfx.h"
+
+#include "RarItem.h"
+#include "RarHeader.h"
+
+namespace NArchive{
+namespace NRar{
+
+bool CItem::IsEncrypted() const
+ { return (Flags & NHeader::NFile::kEncrypted) != 0; }
+bool CItem::IsSolid() const
+ { return (Flags & NHeader::NFile::kSolid) != 0; }
+bool CItem::IsCommented() const
+ { return (Flags & NHeader::NFile::kComment) != 0; }
+bool CItem::IsSplitBefore() const
+ { return (Flags & NHeader::NFile::kSplitBefore) != 0; }
+bool CItem::IsSplitAfter() const
+ { return (Flags & NHeader::NFile::kSplitAfter) != 0; }
+bool CItem::HasSalt() const
+ { return (Flags & NHeader::NFile::kSalt) != 0; }
+bool CItem::HasExtTime() const
+ { return (Flags & NHeader::NFile::kExtTime) != 0; }
+bool CItem::HasUnicodeName() const
+ { return (Flags & NHeader::NFile::kUnicodeName) != 0; }
+bool CItem::IsOldVersion() const
+ { return (Flags & NHeader::NFile::kOldVersion) != 0; }
+
+bool CItem::IgnoreItem() const
+{
+ switch(HostOS)
+ {
+ case NHeader::NFile::kHostMSDOS:
+ case NHeader::NFile::kHostOS2:
+ case NHeader::NFile::kHostWin32:
+ return ((Attributes & NHeader::NFile::kLabelFileAttribute) != 0);
+ }
+ return false;
+}
+
+UInt32 CItem::GetDictSize() const
+{ return (Flags >> NHeader::NFile::kDictBitStart) & NHeader::NFile::kDictMask; }
+
+bool CItem::IsDirectory() const
+{
+ if (GetDictSize() == NHeader::NFile::kDictDirectoryValue)
+ return true;
+ switch(HostOS)
+ {
+ case NHeader::NFile::kHostMSDOS:
+ case NHeader::NFile::kHostOS2:
+ case NHeader::NFile::kHostWin32:
+ if ((Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
+ return true;
+ }
+ return false;
+}
+
+UInt32 CItem::GetWinAttributes() const
+{
+ UInt32 winAttributes;
+ switch(HostOS)
+ {
+ case NHeader::NFile::kHostMSDOS:
+ case NHeader::NFile::kHostOS2:
+ case NHeader::NFile::kHostWin32:
+ winAttributes = Attributes;
+ break;
+ default:
+ winAttributes = 0; // must be converted from unix value;;
+ }
+ if (IsDirectory()) // test it;
+ winAttributes |= NHeader::NFile::kWinFileDirectoryAttributeMask;
+ return winAttributes;
+}
+
+void CItem::ClearFlags()
+{ Flags = 0; }
+
+void CItem::SetFlagBits(int startBitNumber, int numBits, int value)
+{
+ UInt16 mask = (UInt16)(((1 << numBits) - 1) << startBitNumber);
+ Flags &= ~mask;
+ Flags |= value << startBitNumber;
+}
+
+void CItem::SetBitMask(int bitMask, bool enable)
+{
+ if(enable)
+ Flags |= bitMask;
+ else
+ Flags &= ~bitMask;
+}
+
+void CItem::SetDictSize(UInt32 size)
+{
+ SetFlagBits(NHeader::NFile::kDictBitStart, NHeader::NFile::kNumDictBits, (size & NHeader::NFile::kDictMask));
+}
+
+void CItem::SetAsDirectory(bool directory)
+{
+ if (directory)
+ SetDictSize(NHeader::NFile::kDictDirectoryValue);
+}
+
+void CItem::SetEncrypted(bool encrypted)
+ { SetBitMask(NHeader::NFile::kEncrypted, encrypted); }
+void CItem::SetSolid(bool solid)
+ { SetBitMask(NHeader::NFile::kSolid, solid); }
+void CItem::SetCommented(bool commented)
+ { SetBitMask(NHeader::NFile::kComment, commented); }
+void CItem::SetSplitBefore(bool splitBefore)
+ { SetBitMask(NHeader::NFile::kSplitBefore, splitBefore); }
+void CItem::SetSplitAfter(bool splitAfter)
+ { SetBitMask(NHeader::NFile::kSplitAfter, splitAfter); }
+
+}}