mirror of
https://github.com/taglib/taglib.git
synced 2025-06-04 01:28:21 -04:00
Fix uses of ulong where 32-bit integers are expected
This commit is contained in:
parent
914e5f9fd8
commit
cd082cd8e3
@ -553,7 +553,7 @@ bool ASF::File::save()
|
||||
data.append(d->objects[i]->render(this));
|
||||
}
|
||||
data = headerGuid + ByteVector::fromLongLong(data.size() + 30, false) + ByteVector::fromUInt(d->objects.size(), false) + ByteVector("\x01\x02", 2) + data;
|
||||
insert(data, 0, (TagLib::ulong)d->size);
|
||||
insert(data, 0, (uint)d->size);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ bool IT::File::save()
|
||||
StringList lines = d->tag.comment().split("\n");
|
||||
for(ushort i = 0; i < instrumentCount; ++ i) {
|
||||
seek(192L + length + ((long)i << 2));
|
||||
ulong instrumentOffset = 0;
|
||||
uint instrumentOffset = 0;
|
||||
if(!readU32L(instrumentOffset))
|
||||
return false;
|
||||
|
||||
@ -114,7 +114,7 @@ bool IT::File::save()
|
||||
|
||||
for(ushort i = 0; i < sampleCount; ++ i) {
|
||||
seek(192L + length + ((long)instrumentCount << 2) + ((long)i << 2));
|
||||
ulong sampleOffset = 0;
|
||||
uint sampleOffset = 0;
|
||||
if(!readU32L(sampleOffset))
|
||||
return false;
|
||||
|
||||
@ -141,13 +141,13 @@ bool IT::File::save()
|
||||
|
||||
ushort special = 0;
|
||||
ushort messageLength = 0;
|
||||
ulong messageOffset = 0;
|
||||
uint messageOffset = 0;
|
||||
|
||||
seek(46);
|
||||
if(!readU16L(special))
|
||||
return false;
|
||||
|
||||
ulong fileSize = static_cast<ulong>(File::length());
|
||||
uint fileSize = static_cast<uint>(File::length());
|
||||
if(special & Properties::MessageAttached) {
|
||||
seek(54);
|
||||
if(!readU16L(messageLength) || !readU32L(messageOffset))
|
||||
|
@ -33,14 +33,14 @@ Mod::FileBase::FileBase(IOStream *stream) : TagLib::File(stream)
|
||||
{
|
||||
}
|
||||
|
||||
void Mod::FileBase::writeString(const String &s, ulong size, char padding)
|
||||
void Mod::FileBase::writeString(const String &s, uint size, char padding)
|
||||
{
|
||||
ByteVector data(s.data(String::Latin1));
|
||||
data.resize(size, padding);
|
||||
writeBlock(data);
|
||||
}
|
||||
|
||||
bool Mod::FileBase::readString(String &s, ulong size)
|
||||
bool Mod::FileBase::readString(String &s, uint size)
|
||||
{
|
||||
ByteVector data(readBlock(size));
|
||||
if(data.size() < size) return false;
|
||||
@ -66,7 +66,7 @@ void Mod::FileBase::writeU16L(ushort number)
|
||||
writeBlock(ByteVector::fromShort(number, false));
|
||||
}
|
||||
|
||||
void Mod::FileBase::writeU32L(ulong number)
|
||||
void Mod::FileBase::writeU32L(uint number)
|
||||
{
|
||||
writeBlock(ByteVector::fromUInt(number, false));
|
||||
}
|
||||
@ -76,7 +76,7 @@ void Mod::FileBase::writeU16B(ushort number)
|
||||
writeBlock(ByteVector::fromShort(number, true));
|
||||
}
|
||||
|
||||
void Mod::FileBase::writeU32B(ulong number)
|
||||
void Mod::FileBase::writeU32B(uint number)
|
||||
{
|
||||
writeBlock(ByteVector::fromUInt(number, true));
|
||||
}
|
||||
@ -97,7 +97,7 @@ bool Mod::FileBase::readU16L(ushort &number)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Mod::FileBase::readU32L(ulong &number) {
|
||||
bool Mod::FileBase::readU32L(uint &number) {
|
||||
ByteVector data(readBlock(4));
|
||||
if(data.size() < 4) return false;
|
||||
number = data.toUInt(false);
|
||||
@ -112,7 +112,7 @@ bool Mod::FileBase::readU16B(ushort &number)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Mod::FileBase::readU32B(ulong &number) {
|
||||
bool Mod::FileBase::readU32B(uint &number) {
|
||||
ByteVector data(readBlock(4));
|
||||
if(data.size() < 4) return false;
|
||||
number = data.toUInt(true);
|
||||
|
@ -40,19 +40,19 @@ namespace TagLib {
|
||||
FileBase(FileName file);
|
||||
FileBase(IOStream *stream);
|
||||
|
||||
void writeString(const String &s, ulong size, char padding = 0);
|
||||
void writeString(const String &s, uint size, char padding = 0);
|
||||
void writeByte(uchar byte);
|
||||
void writeU16L(ushort number);
|
||||
void writeU32L(ulong number);
|
||||
void writeU32L(uint number);
|
||||
void writeU16B(ushort number);
|
||||
void writeU32B(ulong number);
|
||||
void writeU32B(uint number);
|
||||
|
||||
bool readString(String &s, ulong size);
|
||||
bool readString(String &s, uint size);
|
||||
bool readByte(uchar &byte);
|
||||
bool readU16L(ushort &number);
|
||||
bool readU32L(ulong &number);
|
||||
bool readU32L(uint &number);
|
||||
bool readU16B(ushort &number);
|
||||
bool readU32B(ulong &number);
|
||||
bool readU32B(uint &number);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -37,11 +37,11 @@
|
||||
setter(number); \
|
||||
}
|
||||
|
||||
#define READ_BYTE(setter) READ(setter,uchar,readByte)
|
||||
#define READ_BYTE(setter) READ(setter,uchar, readByte)
|
||||
#define READ_U16L(setter) READ(setter,ushort,readU16L)
|
||||
#define READ_U32L(setter) READ(setter,ulong,readU32L)
|
||||
#define READ_U32L(setter) READ(setter,uint, readU32L)
|
||||
#define READ_U16B(setter) READ(setter,ushort,readU16B)
|
||||
#define READ_U32B(setter) READ(setter,ulong,readU32B)
|
||||
#define READ_U32B(setter) READ(setter,uint, readU32B)
|
||||
|
||||
#define READ_STRING(setter,size) \
|
||||
{ \
|
||||
@ -54,11 +54,11 @@
|
||||
type name = 0; \
|
||||
READ_ASSERT(read(name));
|
||||
|
||||
#define READ_BYTE_AS(name) READ_AS(uchar,name,readByte)
|
||||
#define READ_BYTE_AS(name) READ_AS(uchar, name,readByte)
|
||||
#define READ_U16L_AS(name) READ_AS(ushort,name,readU16L)
|
||||
#define READ_U32L_AS(name) READ_AS(ulong,name,readU32L)
|
||||
#define READ_U32L_AS(name) READ_AS(uint, name,readU32L)
|
||||
#define READ_U16B_AS(name) READ_AS(ushort,name,readU16B)
|
||||
#define READ_U32B_AS(name) READ_AS(ulong,name,readU32B)
|
||||
#define READ_U32B_AS(name) READ_AS(uint, name,readU32B)
|
||||
|
||||
#define READ_STRING_AS(name,size) \
|
||||
String name; \
|
||||
|
@ -205,7 +205,7 @@ void MPC::Properties::readSV8(File *file)
|
||||
d->version = data[pos];
|
||||
pos += 1;
|
||||
d->sampleFrames = readSize(data.mid(pos), pos);
|
||||
ulong begSilence = readSize(data.mid(pos), pos);
|
||||
uint begSilence = readSize(data.mid(pos), pos);
|
||||
|
||||
std::bitset<16> flags(TAGLIB_CONSTRUCT_BITSET(data.mid(pos, 2).toUShort(true)));
|
||||
pos += 2;
|
||||
|
@ -37,6 +37,7 @@
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <climits>
|
||||
|
||||
#ifdef _WIN32
|
||||
# if !defined(NOMINMAX)
|
||||
@ -88,6 +89,30 @@
|
||||
*/
|
||||
#endif
|
||||
|
||||
// Check the widths of integral types.
|
||||
|
||||
#if UCHAR_MAX != 255U
|
||||
# error TagLib assumes that char is 8-bit wide.
|
||||
#endif
|
||||
|
||||
#if USHRT_MAX != 65535U
|
||||
# error TagLib assumes that short is 16-bit wide.
|
||||
#endif
|
||||
|
||||
#if UINT_MAX != 4294967295U
|
||||
# error TagLib assumes that int is 32-bit wide.
|
||||
#endif
|
||||
|
||||
#if !defined(ULLONG_MAX) && !defined(ULONGLONG_MAX) && !defined(ULONG_LONG_MAX)
|
||||
# error TagLib assumes that long long is 64-bit wide.
|
||||
#elif defined(ULLONG_MAX) && ULLONG_MAX != 18446744073709551615ULL
|
||||
# error TagLib assumes that long long is 64-bit wide.
|
||||
#elif defined(ULONGLONG_MAX) && ULONGLONG_MAX != 18446744073709551615ULL
|
||||
# error TagLib assumes that long long is 64-bit wide.
|
||||
#elif defined(ULONG_LONG_MAX) && ULONG_LONG_MAX != 18446744073709551615ULL
|
||||
# error TagLib assumes that long long is 64-bit wide.
|
||||
#endif
|
||||
|
||||
//! A namespace for all TagLib related classes and functions
|
||||
|
||||
/*!
|
||||
@ -106,6 +131,8 @@ namespace TagLib {
|
||||
typedef unsigned char uchar;
|
||||
typedef unsigned short ushort;
|
||||
typedef unsigned int uint;
|
||||
|
||||
// long/ulong can be either 32-bit or 64-bit wide.
|
||||
typedef unsigned long ulong;
|
||||
|
||||
// Offset or length type for I/O streams.
|
||||
|
@ -32,7 +32,6 @@ using namespace TagLib;
|
||||
using namespace XM;
|
||||
using TagLib::uint;
|
||||
using TagLib::ushort;
|
||||
using TagLib::ulong;
|
||||
|
||||
/*!
|
||||
* The Reader classes are helpers to make handling of the stripped XM
|
||||
@ -199,11 +198,11 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class U32Reader : public NumberReader<ulong>
|
||||
class U32Reader : public NumberReader<uint>
|
||||
{
|
||||
public:
|
||||
U32Reader(ulong &value, bool bigEndian = true) :
|
||||
NumberReader<ulong>(value, bigEndian)
|
||||
U32Reader(uint &value, bool bigEndian = true) :
|
||||
NumberReader<uint>(value, bigEndian)
|
||||
{
|
||||
}
|
||||
|
||||
@ -294,7 +293,7 @@ public:
|
||||
* Read a unsigned 32 Bit integer into \a number. The byte order
|
||||
* is controlled by \a bigEndian.
|
||||
*/
|
||||
StructReader &u32(ulong &number, bool bigEndian)
|
||||
StructReader &u32(uint &number, bool bigEndian)
|
||||
{
|
||||
m_readers.append(new U32Reader(number, bigEndian));
|
||||
return *this;
|
||||
@ -303,7 +302,7 @@ public:
|
||||
/*!
|
||||
* Read a unsigned 32 Bit little endian integer into \a number.
|
||||
*/
|
||||
StructReader &u32L(ulong &number)
|
||||
StructReader &u32L(uint &number)
|
||||
{
|
||||
return u32(number, false);
|
||||
}
|
||||
@ -311,7 +310,7 @@ public:
|
||||
/*!
|
||||
* Read a unsigned 32 Bit big endian integer into \a number.
|
||||
*/
|
||||
StructReader &u32B(ulong &number)
|
||||
StructReader &u32B(uint &number)
|
||||
{
|
||||
return u32(number, true);
|
||||
}
|
||||
@ -398,7 +397,7 @@ bool XM::File::save()
|
||||
seek(1, Current);
|
||||
writeString(d->tag.trackerName(), 20);
|
||||
seek(2, Current);
|
||||
ulong headerSize = 0;
|
||||
uint headerSize = 0;
|
||||
if(!readU32L(headerSize))
|
||||
return false;
|
||||
seek(2+2+2, Current);
|
||||
@ -412,7 +411,7 @@ bool XM::File::save()
|
||||
|
||||
// need to read patterns again in order to seek to the instruments:
|
||||
for(ushort i = 0; i < patternCount; ++ i) {
|
||||
ulong patternHeaderLength = 0;
|
||||
uint patternHeaderLength = 0;
|
||||
if(!readU32L(patternHeaderLength) || patternHeaderLength < 4)
|
||||
return false;
|
||||
|
||||
@ -421,7 +420,7 @@ bool XM::File::save()
|
||||
pattern.skip(3).u16L(dataSize);
|
||||
|
||||
uint count = pattern.read(*this, patternHeaderLength - 4U);
|
||||
if(count != std::min(patternHeaderLength - 4U, (ulong)pattern.size()))
|
||||
if(count != std::min(patternHeaderLength - 4U, pattern.size()))
|
||||
return false;
|
||||
|
||||
seek(patternHeaderLength - (4 + count) + dataSize, Current);
|
||||
@ -430,11 +429,11 @@ bool XM::File::save()
|
||||
StringList lines = d->tag.comment().split("\n");
|
||||
uint sampleNameIndex = instrumentCount;
|
||||
for(ushort i = 0; i < instrumentCount; ++ i) {
|
||||
ulong instrumentHeaderSize = 0;
|
||||
uint instrumentHeaderSize = 0;
|
||||
if(!readU32L(instrumentHeaderSize) || instrumentHeaderSize < 4)
|
||||
return false;
|
||||
|
||||
uint len = std::min(22UL, instrumentHeaderSize - 4U);
|
||||
uint len = std::min(22U, instrumentHeaderSize - 4U);
|
||||
if(i >= lines.size())
|
||||
writeString(String::null, len);
|
||||
else
|
||||
@ -448,7 +447,7 @@ bool XM::File::save()
|
||||
return false;
|
||||
|
||||
if(sampleCount > 0) {
|
||||
ulong sampleHeaderSize = 0;
|
||||
uint sampleHeaderSize = 0;
|
||||
if(instrumentHeaderSize < 33U || !readU32L(sampleHeaderSize))
|
||||
return false;
|
||||
// skip unhandeled header proportion:
|
||||
@ -456,14 +455,14 @@ bool XM::File::save()
|
||||
|
||||
for(ushort j = 0; j < sampleCount; ++ j) {
|
||||
if(sampleHeaderSize > 4U) {
|
||||
ulong sampleLength = 0;
|
||||
uint sampleLength = 0;
|
||||
if(!readU32L(sampleLength))
|
||||
return false;
|
||||
offset += sampleLength;
|
||||
|
||||
seek(std::min(sampleHeaderSize, 14UL), Current);
|
||||
seek(std::min(sampleHeaderSize, 14U), Current);
|
||||
if(sampleHeaderSize > 18U) {
|
||||
uint len = std::min(sampleHeaderSize - 18U, 22UL);
|
||||
uint len = std::min(sampleHeaderSize - 18U, 22U);
|
||||
if(sampleNameIndex >= lines.size())
|
||||
writeString(String::null, len);
|
||||
else
|
||||
@ -530,7 +529,7 @@ void XM::File::read(bool)
|
||||
.u16L(bpmSpeed);
|
||||
|
||||
uint count = header.read(*this, headerSize - 4U);
|
||||
uint size = std::min(headerSize - 4U, (ulong)header.size());
|
||||
uint size = std::min(headerSize - 4U, header.size());
|
||||
|
||||
READ_ASSERT(count == size);
|
||||
|
||||
@ -557,7 +556,7 @@ void XM::File::read(bool)
|
||||
pattern.byte(packingType).u16L(rowCount).u16L(dataSize);
|
||||
|
||||
uint count = pattern.read(*this, patternHeaderLength - 4U);
|
||||
READ_ASSERT(count == std::min(patternHeaderLength - 4U, (ulong)pattern.size()));
|
||||
READ_ASSERT(count == std::min(patternHeaderLength - 4U, pattern.size()));
|
||||
|
||||
seek(patternHeaderLength - (4 + count) + dataSize, Current);
|
||||
}
|
||||
@ -580,9 +579,9 @@ void XM::File::read(bool)
|
||||
|
||||
// 4 for instrumentHeaderSize
|
||||
uint count = 4 + instrument.read(*this, instrumentHeaderSize - 4U);
|
||||
READ_ASSERT(count == std::min(instrumentHeaderSize, (ulong)instrument.size() + 4));
|
||||
READ_ASSERT(count == std::min(instrumentHeaderSize, instrument.size() + 4));
|
||||
|
||||
ulong sampleHeaderSize = 0;
|
||||
uint sampleHeaderSize = 0;
|
||||
long offset = 0;
|
||||
if(sampleCount > 0) {
|
||||
sumSampleCount += sampleCount;
|
||||
@ -592,9 +591,9 @@ void XM::File::read(bool)
|
||||
seek(instrumentHeaderSize - count - 4, Current);
|
||||
|
||||
for(ushort j = 0; j < sampleCount; ++ j) {
|
||||
ulong sampleLength = 0;
|
||||
ulong loopStart = 0;
|
||||
ulong loopLength = 0;
|
||||
uint sampleLength = 0;
|
||||
uint loopStart = 0;
|
||||
uint loopLength = 0;
|
||||
uchar volume = 0;
|
||||
uchar finetune = 0;
|
||||
uchar sampleType = 0;
|
||||
@ -615,7 +614,7 @@ void XM::File::read(bool)
|
||||
.string(sampleName, 22);
|
||||
|
||||
uint count = sample.read(*this, sampleHeaderSize);
|
||||
READ_ASSERT(count == std::min(sampleHeaderSize, (ulong)sample.size()));
|
||||
READ_ASSERT(count == std::min(sampleHeaderSize, sample.size()));
|
||||
// skip unhandeled header proportion:
|
||||
seek(sampleHeaderSize - count, Current);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user