Added BPositionIO::GetSize() and implemented it by means of Seek() and
Position(). This used up a virtual slot of BPositionIO. GetSize() needed to be implemented in BFile, which uses the BStatable version as before. This should hopefully be binary compatible. The only problem could be in source compatibility when there are classes inheriting from BPositionIO implementing their own GetSize(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17593 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
0cd4c8ae6c
commit
39c991c0f3
@ -57,6 +57,7 @@ public:
|
||||
virtual off_t Position() const;
|
||||
|
||||
virtual status_t SetSize(off_t size);
|
||||
virtual status_t GetSize(off_t* size) const;
|
||||
|
||||
BFile &operator=(const BFile &file);
|
||||
|
||||
|
@ -80,9 +80,9 @@ public:
|
||||
virtual off_t Position() const = 0;
|
||||
|
||||
virtual status_t SetSize(off_t size);
|
||||
virtual status_t GetSize(off_t* size) const;
|
||||
|
||||
private:
|
||||
virtual void _ReservedPositionIO1();
|
||||
virtual void _ReservedPositionIO2();
|
||||
virtual void _ReservedPositionIO3();
|
||||
virtual void _ReservedPositionIO4();
|
||||
|
@ -460,6 +460,13 @@ BFile::SetSize(off_t size)
|
||||
return set_stat(statData, B_STAT_SIZE);
|
||||
}
|
||||
|
||||
// GetSize TODO: doxygen comment
|
||||
status_t
|
||||
BFile::GetSize(off_t* size) const
|
||||
{
|
||||
return BStatable::GetSize(size);
|
||||
}
|
||||
|
||||
// =
|
||||
//! Assigns another BFile to this BFile.
|
||||
/*! If the other BFile is uninitialized, this one will be too. Otherwise it
|
||||
|
@ -129,9 +129,31 @@ BPositionIO::SetSize(off_t size)
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
// GetSize
|
||||
status_t
|
||||
BPositionIO::GetSize(off_t* size) const
|
||||
{
|
||||
if (!size)
|
||||
return B_BAD_VALUE;
|
||||
|
||||
off_t currentPos = Position();
|
||||
if (currentPos < 0)
|
||||
return (status_t)currentPos;
|
||||
|
||||
*size = const_cast<BPositionIO*>(this)->Seek(0, SEEK_END);
|
||||
if (*size < 0)
|
||||
return (status_t)*size;
|
||||
|
||||
off_t pos = const_cast<BPositionIO*>(this)->Seek(currentPos, SEEK_SET);
|
||||
|
||||
if (pos != currentPos)
|
||||
return pos < 0 ? (status_t)pos : B_ERROR;
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
// FBC
|
||||
void BPositionIO::_ReservedPositionIO1(){}
|
||||
void BPositionIO::_ReservedPositionIO2(){}
|
||||
void BPositionIO::_ReservedPositionIO3(){}
|
||||
void BPositionIO::_ReservedPositionIO4(){}
|
||||
|
Loading…
x
Reference in New Issue
Block a user