view src/win32/7zip/7z/CPP/7zip/Archive/Tar/TarItem.h @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
line wrap: on
line source
1 // Archive/Tar/Item.h
3 #ifndef __ARCHIVE_TAR_ITEM_H
4 #define __ARCHIVE_TAR_ITEM_H
6 #include "Common/Types.h"
7 #include "Common/MyString.h"
9 #include "../Common/ItemNameUtils.h"
10 #include "TarHeader.h"
12 namespace NArchive {
13 namespace NTar {
15 struct CItem
16 {
17 AString Name;
18 UInt64 Size;
20 UInt32 Mode;
21 UInt32 UID;
22 UInt32 GID;
23 UInt32 MTime;
24 UInt32 DeviceMajor;
25 UInt32 DeviceMinor;
27 AString LinkName;
28 AString UserName;
29 AString GroupName;
31 char Magic[8];
32 char LinkFlag;
33 bool DeviceMajorDefined;
34 bool DeviceMinorDefined;
36 bool IsDir() const
37 {
38 switch(LinkFlag)
39 {
40 case NFileHeader::NLinkFlag::kDirectory:
41 case NFileHeader::NLinkFlag::kDumpDir:
42 return true;
43 case NFileHeader::NLinkFlag::kOldNormal:
44 case NFileHeader::NLinkFlag::kNormal:
45 return NItemName::HasTailSlash(Name, CP_OEMCP);
46 }
47 return false;
48 }
50 bool IsMagic() const
51 {
52 for (int i = 0; i < 5; i++)
53 if (Magic[i] != NFileHeader::NMagic::kUsTar[i])
54 return false;
55 return true;
56 }
58 UInt64 GetPackSize() const { return (Size + 0x1FF) & (~((UInt64)0x1FF)); }
59 };
61 struct CItemEx: public CItem
62 {
63 UInt64 HeaderPosition;
64 unsigned LongLinkSize;
65 UInt64 GetDataPosition() const { return HeaderPosition + LongLinkSize + NFileHeader::kRecordSize; }
66 UInt64 GetFullSize() const { return LongLinkSize + NFileHeader::kRecordSize + Size; }
67 };
69 }}
71 #endif