mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-01-31 18:07:14 +01:00
4a6bfc086c
Switched to POCO library for unified platform/library interface. Deprecated the external module API. It was creating more problems than solving. Removed most built-in libraries in favor of system libraries for easier maintenance. Cleaned and secured code with help from static analyzers.
249 lines
4.6 KiB
C++
249 lines
4.6 KiB
C++
//
|
|
// ZipDataInfo.h
|
|
//
|
|
// Library: Zip
|
|
// Package: Zip
|
|
// Module: ZipDataInfo
|
|
//
|
|
// Definition of the ZipDataInfo class.
|
|
//
|
|
// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
//
|
|
|
|
|
|
#ifndef Zip_ZipDataInfo_INCLUDED
|
|
#define Zip_ZipDataInfo_INCLUDED
|
|
|
|
|
|
#include "Poco/Zip/Zip.h"
|
|
#include "Poco/Zip/ZipCommon.h"
|
|
#include "Poco/Zip/ZipUtil.h"
|
|
|
|
|
|
namespace Poco {
|
|
namespace Zip {
|
|
|
|
|
|
class Zip_API ZipDataInfo
|
|
/// A ZipDataInfo stores a Zip data descriptor
|
|
{
|
|
public:
|
|
static const char HEADER[ZipCommon::HEADER_SIZE];
|
|
|
|
ZipDataInfo();
|
|
/// Creates a header with all fields (except the header field) set to 0
|
|
|
|
ZipDataInfo(std::istream& in, bool assumeHeaderRead);
|
|
/// Creates the ZipDataInfo.
|
|
|
|
~ZipDataInfo();
|
|
/// Destroys the ZipDataInfo.
|
|
|
|
bool isValid() const;
|
|
|
|
Poco::UInt32 getCRC32() const;
|
|
|
|
void setCRC32(Poco::UInt32 crc);
|
|
|
|
Poco::UInt32 getCompressedSize() const;
|
|
|
|
void setCompressedSize(Poco::UInt32 size);
|
|
|
|
Poco::UInt32 getUncompressedSize() const;
|
|
|
|
void setUncompressedSize(Poco::UInt32 size);
|
|
|
|
static Poco::UInt32 getFullHeaderSize();
|
|
|
|
const char* getRawHeader() const;
|
|
|
|
private:
|
|
enum
|
|
{
|
|
HEADER_POS = 0,
|
|
CRC32_POS = HEADER_POS + ZipCommon::HEADER_SIZE,
|
|
CRC32_SIZE = 4,
|
|
COMPRESSED_POS = CRC32_POS + CRC32_SIZE,
|
|
COMPRESSED_SIZE = 4,
|
|
UNCOMPRESSED_POS = COMPRESSED_POS + COMPRESSED_SIZE,
|
|
UNCOMPRESSED_SIZE = 4,
|
|
FULLHEADER_SIZE = UNCOMPRESSED_POS + UNCOMPRESSED_SIZE
|
|
};
|
|
|
|
char _rawInfo[FULLHEADER_SIZE];
|
|
bool _valid;
|
|
};
|
|
|
|
|
|
class Zip_API ZipDataInfo64
|
|
/// A ZipDataInfo64 stores a Zip data descriptor for a Zip64 file
|
|
{
|
|
public:
|
|
static const char HEADER[ZipCommon::HEADER_SIZE];
|
|
|
|
ZipDataInfo64();
|
|
/// Creates a header with all fields (except the header field) set to 0
|
|
|
|
ZipDataInfo64(std::istream& in, bool assumeHeaderRead);
|
|
/// Creates the ZipDataInfo64.
|
|
|
|
~ZipDataInfo64();
|
|
/// Destroys the ZipDataInfo64.
|
|
|
|
bool isValid() const;
|
|
|
|
Poco::UInt32 getCRC32() const;
|
|
|
|
void setCRC32(Poco::UInt32 crc);
|
|
|
|
Poco::UInt64 getCompressedSize() const;
|
|
|
|
void setCompressedSize(Poco::UInt64 size);
|
|
|
|
Poco::UInt64 getUncompressedSize() const;
|
|
|
|
void setUncompressedSize(Poco::UInt64 size);
|
|
|
|
static Poco::UInt32 getFullHeaderSize();
|
|
|
|
const char* getRawHeader() const;
|
|
|
|
private:
|
|
enum
|
|
{
|
|
HEADER_POS = 0,
|
|
CRC32_POS = HEADER_POS + ZipCommon::HEADER_SIZE,
|
|
CRC32_SIZE = 4,
|
|
COMPRESSED_POS = CRC32_POS + CRC32_SIZE,
|
|
COMPRESSED_SIZE = 8,
|
|
UNCOMPRESSED_POS = COMPRESSED_POS + COMPRESSED_SIZE,
|
|
UNCOMPRESSED_SIZE = 8,
|
|
FULLHEADER_SIZE = UNCOMPRESSED_POS + UNCOMPRESSED_SIZE
|
|
};
|
|
|
|
char _rawInfo[FULLHEADER_SIZE];
|
|
bool _valid;
|
|
};
|
|
|
|
|
|
//
|
|
// inlines
|
|
//
|
|
|
|
|
|
inline const char* ZipDataInfo::getRawHeader() const
|
|
{
|
|
return _rawInfo;
|
|
}
|
|
|
|
|
|
inline bool ZipDataInfo::isValid() const
|
|
{
|
|
return _valid;
|
|
}
|
|
|
|
|
|
inline Poco::UInt32 ZipDataInfo::getCRC32() const
|
|
{
|
|
return ZipUtil::get32BitValue(_rawInfo, CRC32_POS);
|
|
}
|
|
|
|
|
|
inline void ZipDataInfo::setCRC32(Poco::UInt32 crc)
|
|
{
|
|
return ZipUtil::set32BitValue(crc, _rawInfo, CRC32_POS);
|
|
}
|
|
|
|
|
|
inline Poco::UInt32 ZipDataInfo::getCompressedSize() const
|
|
{
|
|
return ZipUtil::get32BitValue(_rawInfo, COMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline void ZipDataInfo::setCompressedSize(Poco::UInt32 size)
|
|
{
|
|
return ZipUtil::set32BitValue(size, _rawInfo, COMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline Poco::UInt32 ZipDataInfo::getUncompressedSize() const
|
|
{
|
|
return ZipUtil::get32BitValue(_rawInfo, UNCOMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline void ZipDataInfo::setUncompressedSize(Poco::UInt32 size)
|
|
{
|
|
return ZipUtil::set32BitValue(size, _rawInfo, UNCOMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline Poco::UInt32 ZipDataInfo::getFullHeaderSize()
|
|
{
|
|
return FULLHEADER_SIZE;
|
|
}
|
|
|
|
|
|
inline const char* ZipDataInfo64::getRawHeader() const
|
|
{
|
|
return _rawInfo;
|
|
}
|
|
|
|
|
|
inline bool ZipDataInfo64::isValid() const
|
|
{
|
|
return _valid;
|
|
}
|
|
|
|
|
|
inline Poco::UInt32 ZipDataInfo64::getCRC32() const
|
|
{
|
|
return ZipUtil::get32BitValue(_rawInfo, CRC32_POS);
|
|
}
|
|
|
|
|
|
inline void ZipDataInfo64::setCRC32(Poco::UInt32 crc)
|
|
{
|
|
return ZipUtil::set32BitValue(crc, _rawInfo, CRC32_POS);
|
|
}
|
|
|
|
|
|
inline Poco::UInt64 ZipDataInfo64::getCompressedSize() const
|
|
{
|
|
return ZipUtil::get64BitValue(_rawInfo, COMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline void ZipDataInfo64::setCompressedSize(Poco::UInt64 size)
|
|
{
|
|
return ZipUtil::set64BitValue(size, _rawInfo, COMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline Poco::UInt64 ZipDataInfo64::getUncompressedSize() const
|
|
{
|
|
return ZipUtil::get64BitValue(_rawInfo, UNCOMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline void ZipDataInfo64::setUncompressedSize(Poco::UInt64 size)
|
|
{
|
|
return ZipUtil::set64BitValue(size, _rawInfo, UNCOMPRESSED_POS);
|
|
}
|
|
|
|
|
|
inline Poco::UInt32 ZipDataInfo64::getFullHeaderSize()
|
|
{
|
|
return FULLHEADER_SIZE;
|
|
}
|
|
|
|
|
|
} } // namespace Poco::Zip
|
|
|
|
|
|
#endif // Zip_ZipDataInfo_INCLUDED
|