git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42497
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
public:
wxBackedInputStream(const wxBackingFile& backer);
public:
wxBackedInputStream(const wxBackingFile& backer);
+ // If the length of the backer's parent stream is unknown then GetLength()
+ // returns wxInvalidOffset until the parent has been read to the end.
wxFileOffset GetLength() const;
wxFileOffset GetLength() const;
+
+ // Returns the length, reading the parent stream to the end if necessary.
+ wxFileOffset FindLength() const;
+
bool IsSeekable() const { return true; }
protected:
bool IsSeekable() const { return true; }
protected:
+wxFileOffset wxBackedInputStream::GetLength() const
+{
+ return m_backer.m_impl->GetLength();
+}
+
+wxFileOffset wxBackedInputStream::FindLength() const
+{
+ wxFileOffset len = GetLength();
+
+ if (len == wxInvalidOffset && IsOk()) {
+ // read a byte at 7ff...ffe
+ wxFileOffset pos = 1;
+ pos <<= sizeof(pos) * 8 - 1;
+ pos = ~pos - 1;
+ char ch;
+ size_t size = 1;
+ m_backer.m_impl->ReadAt(pos, &ch, &size);
+ len = GetLength();
+ }
+
+ return len;
+}
+
size_t wxBackedInputStream::OnSysRead(void *buffer, size_t size)
{
if (!IsOk())
size_t wxBackedInputStream::OnSysRead(void *buffer, size_t size)
{
if (!IsOk())
-wxFileOffset wxBackedInputStream::GetLength() const
-{
- return m_backer.m_impl->GetLength();
-}
-
wxFileOffset wxBackedInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
switch (mode) {
wxFileOffset wxBackedInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
{
switch (mode) {