aboutsummaryrefslogtreecommitdiff
path: root/CPP/7zip/Archive/Cab/CabItem.h
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/Archive/Cab/CabItem.h')
-rw-r--r--CPP/7zip/Archive/Cab/CabItem.h35
1 files changed, 19 insertions, 16 deletions
diff --git a/CPP/7zip/Archive/Cab/CabItem.h b/CPP/7zip/Archive/Cab/CabItem.h
index b7e07d1..8f24ed7 100644
--- a/CPP/7zip/Archive/Cab/CabItem.h
+++ b/CPP/7zip/Archive/Cab/CabItem.h
@@ -28,14 +28,17 @@ struct CItem
28 UInt32 Offset; 28 UInt32 Offset;
29 UInt32 Size; 29 UInt32 Size;
30 UInt32 Time; 30 UInt32 Time;
31 UInt32 FolderIndex; 31 unsigned FolderIndex;
32 UInt16 Flags; 32 UInt16 Flags;
33 UInt16 Attributes; 33 UInt16 Attributes;
34 34
35 UInt64 GetEndOffset() const { return (UInt64)Offset + Size; } 35 UInt64 GetEndOffset() const { return (UInt64)Offset + Size; }
36 UInt32 GetWinAttrib() const { return (UInt32)Attributes & ~(UInt32)NHeader::kFileNameIsUtf8_Mask; } 36 /* v26.03: we show all items as files, as original cab extracting software does.
37 Also we disable FILE_ATTRIBUTE_DIRECTORY in GetWinAttrib(), because some client
38 software of 7zip still can parse FILE_ATTRIBUTE_DIRECTORY flag from returned Attributes. */
39 UInt32 GetWinAttrib() const { return (UInt32)Attributes & ~((UInt32)NHeader::kFileNameIsUtf8_Mask | (UInt32)FILE_ATTRIBUTE_DIRECTORY); }
37 bool IsNameUTF() const { return (Attributes & NHeader::kFileNameIsUtf8_Mask) != 0; } 40 bool IsNameUTF() const { return (Attributes & NHeader::kFileNameIsUtf8_Mask) != 0; }
38 bool IsDir() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } 41 // bool IsDir() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; }
39 42
40 bool ContinuedFromPrev() const 43 bool ContinuedFromPrev() const
41 { 44 {
@@ -43,21 +46,21 @@ struct CItem
43 FolderIndex == NHeader::NFolderIndex::kContinuedFromPrev || 46 FolderIndex == NHeader::NFolderIndex::kContinuedFromPrev ||
44 FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext; 47 FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext;
45 } 48 }
46 49 // in: (numFolders > 0) is expected
47 bool ContinuedToNext() const 50 // out: (returned_value >= 0) is expected
48 {
49 return
50 FolderIndex == NHeader::NFolderIndex::kContinuedToNext ||
51 FolderIndex == NHeader::NFolderIndex::kContinuedPrevAndNext;
52 }
53
54 int GetFolderIndex(unsigned numFolders) const 51 int GetFolderIndex(unsigned numFolders) const
55 { 52 {
56 if (ContinuedFromPrev()) 53 const unsigned folderIndex = FolderIndex;
57 return 0; 54 switch (folderIndex)
58 if (ContinuedToNext()) 55 {
59 return (int)numFolders - 1; 56 case NHeader::NFolderIndex::kContinuedFromPrev:
60 return (int)FolderIndex; 57 case NHeader::NFolderIndex::kContinuedPrevAndNext:
58 return 0;
59 case NHeader::NFolderIndex::kContinuedToNext:
60 return (int)numFolders - 1;
61 default:
62 return (int)folderIndex;
63 }
61 } 64 }
62}; 65};
63 66