xrootd
Loading...
Searching...
No Matches
XrdZipZIP64EOCD.hh
Go to the documentation of this file.
1/*
2 * XrdZipZIP64EOCD.hh
3 *
4 * Created on: 9 Nov 2020
5 * Author: simonm
6 */
7
8#ifndef SRC_XRDZIP_XRDZIPZIP64EOCD_HH_
9#define SRC_XRDZIP_XRDZIPZIP64EOCD_HH_
10
11#include "XrdZip/XrdZipUtils.hh"
12#include "XrdZip/XrdZipLFH.hh"
13#include "XrdZip/XrdZipCDFH.hh"
14#include <string>
15#include <sstream>
16
17namespace XrdZip
18{
19 //---------------------------------------------------------------------------
22 //---------------------------------------------------------------------------
24 {
25 //-------------------------------------------------------------------------
27 //-------------------------------------------------------------------------
28 ZIP64_EOCD( const char* buffer ):
30 {
31 zip64EocdSize = to<uint64_t>(buffer + 4);
32 zipVersion = to<uint16_t>(buffer + 12);
33 minZipVersion = to<uint16_t>(buffer + 14);
34 nbDisk = to<uint32_t>(buffer + 16);
35 nbDiskCd = to<uint32_t>(buffer + 20);
36 nbCdRecD = to<uint64_t>(buffer + 24);
37 nbCdRec = to<uint64_t>(buffer + 32);
38 cdSize = to<uint64_t>(buffer + 40);
39 cdOffset = to<uint64_t>(buffer + 48);
40
42 }
43
44 //-------------------------------------------------------------------------
46 //-------------------------------------------------------------------------
47 ZIP64_EOCD( uint64_t cdoff, uint32_t cdcnt, uint32_t cdsize ) :
48 zipVersion( ( 3 << 8 ) | 63 ),
49 minZipVersion( 45 ),
50 nbDisk( 0 ),
51 nbDiskCd( 0 ),
53 {
54 nbCdRec = cdcnt;
55 nbCdRecD = cdcnt;
56 cdSize = cdsize;
57 cdOffset = cdoff;
58
61 }
62
63 //-------------------------------------------------------------------------
65 //-------------------------------------------------------------------------
66 void Serialize( buffer_t &buffer )
67 {
68 copy_bytes( zip64EocdSign, buffer );
69 copy_bytes( zip64EocdSize, buffer );
70 copy_bytes( zipVersion, buffer );
71 copy_bytes( minZipVersion, buffer );
72 copy_bytes( nbDisk, buffer );
73 copy_bytes( nbDiskCd, buffer );
74 copy_bytes( nbCdRecD, buffer );
75 copy_bytes( nbCdRec, buffer );
76 copy_bytes( cdSize, buffer );
77 copy_bytes( cdOffset, buffer );
78
79 std::copy( extensibleData.begin(), extensibleData.end(), std::back_inserter( buffer ) );
80 }
81
82 //-------------------------------------------------------------------------
84 //-------------------------------------------------------------------------
85 std::string ToString()
86 {
87 std::stringstream ss;
88 ss << "{zip64EocdSize=" << zip64EocdSize;
89 ss << ";zipVersion=" << zipVersion;
90 ss << ";minZipVersion=" << minZipVersion;
91 ss << ";nbDisk=" << nbDisk;
92 ss << ";nbDiskCd=" << nbDiskCd;
93 ss << ";nbCdRecD=" << nbCdRecD;
94 ss << ";nbCdRec=" << nbCdRec;
95 ss << ";cdSize=" << cdSize;
96 ss << ";cdOffset=" << cdOffset;
97 ss << ";extensibleData=" << extensibleData;
98 ss << ";extensibleDataLength" << extensibleDataLength << "}";
99 return ss.str();
100 }
101
102 uint64_t zip64EocdSize; //< size of zip64 end of central directory record
103 uint16_t zipVersion; //< version made by
104 uint16_t minZipVersion; //< version needed to extract
105 uint32_t nbDisk; //< number of this disk
106 uint32_t nbDiskCd; //< number of the disk with the start of the central directory
107 uint64_t nbCdRecD; //< total number of entries in the central directory on this disk
108 uint64_t nbCdRec; //< total number of entries in the central directory
109 uint64_t cdSize; //< size of the central directory
110 uint64_t cdOffset; //< offset of start of central directory
111 std::string extensibleData; //< zip64 extensible data sector
112 uint64_t extensibleDataLength; //< extensible data length
113 uint64_t zip64EocdTotalSize; //< size of the record
114
115 //-------------------------------------------------------------------------
116 // the End of Central Directory signature
117 //-------------------------------------------------------------------------
118 static const uint32_t zip64EocdSign = 0x06064b50;
119 static const uint16_t zip64EocdBaseSize = 56;
120 };
121}
122
123#endif /* SRC_XRDZIP_XRDZIPZIP64EOCD_HH_ */
Definition XrdZipCDFH.hh:42
std::vector< char > buffer_t
Definition XrdZipUtils.hh:56
static void copy_bytes(const INT value, buffer_t &buffer)
Definition XrdZipUtils.hh:62
Definition XrdZipZIP64EOCD.hh:24
uint64_t cdSize
Definition XrdZipZIP64EOCD.hh:109
uint64_t zip64EocdTotalSize
Definition XrdZipZIP64EOCD.hh:113
uint16_t zipVersion
Definition XrdZipZIP64EOCD.hh:103
void Serialize(buffer_t &buffer)
Serialize the object into a buffer.
Definition XrdZipZIP64EOCD.hh:66
static const uint32_t zip64EocdSign
Definition XrdZipZIP64EOCD.hh:118
uint64_t extensibleDataLength
Definition XrdZipZIP64EOCD.hh:112
std::string extensibleData
Definition XrdZipZIP64EOCD.hh:111
uint32_t nbDiskCd
Definition XrdZipZIP64EOCD.hh:106
ZIP64_EOCD(uint64_t cdoff, uint32_t cdcnt, uint32_t cdsize)
Constructor from last LFH + CDFH.
Definition XrdZipZIP64EOCD.hh:47
uint64_t zip64EocdSize
Definition XrdZipZIP64EOCD.hh:102
uint32_t nbDisk
Definition XrdZipZIP64EOCD.hh:105
ZIP64_EOCD(const char *buffer)
Constructor from a buffer.
Definition XrdZipZIP64EOCD.hh:28
uint64_t nbCdRec
Definition XrdZipZIP64EOCD.hh:108
uint16_t minZipVersion
Definition XrdZipZIP64EOCD.hh:104
std::string ToString()
Convert the ZIP64EOCD into a string for logging purposes.
Definition XrdZipZIP64EOCD.hh:85
uint64_t nbCdRecD
Definition XrdZipZIP64EOCD.hh:107
uint64_t cdOffset
Definition XrdZipZIP64EOCD.hh:110
static const uint16_t zip64EocdBaseSize
Definition XrdZipZIP64EOCD.hh:119