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:
Stephan Aßmus 2006-05-26 13:27:53 +00:00
parent 0cd4c8ae6c
commit 39c991c0f3
4 changed files with 32 additions and 2 deletions

View File

@ -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);

View 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();

View File

@ -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

View File

@ -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(){}