blob: 61a72557ab20e3a8e0743d1b4286ec3ee5c06dda (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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); }
}}
|