mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-27 06:41:37 +00:00
Add exception handling to various uses of DataStream::read
This commit is contained in:
parent
2abc033655
commit
fec8cf91f5
3 changed files with 47 additions and 12 deletions
|
@ -24,16 +24,30 @@ void FFmpeg_Decoder::fail(const std::string &msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
int FFmpeg_Decoder::readPacket(void *user_data, uint8_t *buf, int buf_size)
|
int FFmpeg_Decoder::readPacket(void *user_data, uint8_t *buf, int buf_size)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
Ogre::DataStreamPtr stream = static_cast<FFmpeg_Decoder*>(user_data)->mDataStream;
|
Ogre::DataStreamPtr stream = static_cast<FFmpeg_Decoder*>(user_data)->mDataStream;
|
||||||
return stream->read(buf, buf_size);
|
return stream->read(buf, buf_size);
|
||||||
}
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int FFmpeg_Decoder::writePacket(void *user_data, uint8_t *buf, int buf_size)
|
int FFmpeg_Decoder::writePacket(void *user_data, uint8_t *buf, int buf_size)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
Ogre::DataStreamPtr stream = static_cast<FFmpeg_Decoder*>(user_data)->mDataStream;
|
Ogre::DataStreamPtr stream = static_cast<FFmpeg_Decoder*>(user_data)->mDataStream;
|
||||||
return stream->write(buf, buf_size);
|
return stream->write(buf, buf_size);
|
||||||
}
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int64_t FFmpeg_Decoder::seek(void *user_data, int64_t offset, int whence)
|
int64_t FFmpeg_Decoder::seek(void *user_data, int64_t offset, int whence)
|
||||||
{
|
{
|
||||||
|
|
|
@ -123,7 +123,7 @@ std::string ESMReader::getHString()
|
||||||
// Skip the following zero byte
|
// Skip the following zero byte
|
||||||
mCtx.leftRec--;
|
mCtx.leftRec--;
|
||||||
char c;
|
char c;
|
||||||
mEsm->read(&c, 1);
|
getExact(&c, 1);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ void ESMReader::getSubName()
|
||||||
}
|
}
|
||||||
|
|
||||||
// reading the subrecord data anyway.
|
// reading the subrecord data anyway.
|
||||||
mEsm->read(mCtx.subName.name, 4);
|
getExact(mCtx.subName.name, 4);
|
||||||
mCtx.leftRec -= 4;
|
mCtx.leftRec -= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ bool ESMReader::isEmptyOrGetName()
|
||||||
{
|
{
|
||||||
if (mCtx.leftRec)
|
if (mCtx.leftRec)
|
||||||
{
|
{
|
||||||
mEsm->read(mCtx.subName.name, 4);
|
getExact(mCtx.subName.name, 4);
|
||||||
mCtx.leftRec -= 4;
|
mCtx.leftRec -= 4;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -293,11 +293,18 @@ void ESMReader::getRecHeader(uint32_t &flags)
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
void ESMReader::getExact(void*x, int size)
|
void ESMReader::getExact(void*x, int size)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
int t = mEsm->read(x, size);
|
int t = mEsm->read(x, size);
|
||||||
if (t != size)
|
if (t != size)
|
||||||
fail("Read error");
|
fail("Read error");
|
||||||
}
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
fail(std::string("Read error: ") + e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string ESMReader::getString(int size)
|
std::string ESMReader::getString(int size)
|
||||||
{
|
{
|
||||||
|
|
14
extern/ogre-ffmpeg-videoplayer/videostate.cpp
vendored
14
extern/ogre-ffmpeg-videoplayer/videostate.cpp
vendored
|
@ -175,14 +175,28 @@ void PacketQueue::clear()
|
||||||
int VideoState::OgreResource_Read(void *user_data, uint8_t *buf, int buf_size)
|
int VideoState::OgreResource_Read(void *user_data, uint8_t *buf, int buf_size)
|
||||||
{
|
{
|
||||||
Ogre::DataStreamPtr stream = static_cast<VideoState*>(user_data)->stream;
|
Ogre::DataStreamPtr stream = static_cast<VideoState*>(user_data)->stream;
|
||||||
|
try
|
||||||
|
{
|
||||||
return stream->read(buf, buf_size);
|
return stream->read(buf, buf_size);
|
||||||
}
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int VideoState::OgreResource_Write(void *user_data, uint8_t *buf, int buf_size)
|
int VideoState::OgreResource_Write(void *user_data, uint8_t *buf, int buf_size)
|
||||||
{
|
{
|
||||||
Ogre::DataStreamPtr stream = static_cast<VideoState*>(user_data)->stream;
|
Ogre::DataStreamPtr stream = static_cast<VideoState*>(user_data)->stream;
|
||||||
|
try
|
||||||
|
{
|
||||||
return stream->write(buf, buf_size);
|
return stream->write(buf, buf_size);
|
||||||
}
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int64_t VideoState::OgreResource_Seek(void *user_data, int64_t offset, int whence)
|
int64_t VideoState::OgreResource_Seek(void *user_data, int64_t offset, int whence)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue