diff options
Diffstat (limited to 'CPP/7zip/Archive/Cab/CabItem.h')
| -rw-r--r-- | CPP/7zip/Archive/Cab/CabItem.h | 35 |
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 | ||
