Merge pull request #974 from assimp/issue_901
closes https://github.com/assimp/assimp/issues/901pull/976/head
commit
e2a1a2f751
|
@ -55,6 +55,7 @@ DefaultIOStream::~DefaultIOStream()
|
||||||
{
|
{
|
||||||
if (mFile) {
|
if (mFile) {
|
||||||
::fclose(mFile);
|
::fclose(mFile);
|
||||||
|
mFile = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,9 +110,9 @@ size_t DefaultIOStream::FileSize() const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SIZE_MAX == cachedSize) {
|
if (SIZE_MAX == mCachedSize ) {
|
||||||
|
|
||||||
// Although fseek/ftell would allow us to reuse the exising file handle here,
|
// Although fseek/ftell would allow us to reuse the existing file handle here,
|
||||||
// it is generally unsafe because:
|
// it is generally unsafe because:
|
||||||
// - For binary streams, it is not technically well-defined
|
// - For binary streams, it is not technically well-defined
|
||||||
// - For text files the results are meaningless
|
// - For text files the results are meaningless
|
||||||
|
@ -124,16 +125,19 @@ size_t DefaultIOStream::FileSize() const
|
||||||
int err = _stat64( mFilename.c_str(), &fileStat );
|
int err = _stat64( mFilename.c_str(), &fileStat );
|
||||||
if (0 != err)
|
if (0 != err)
|
||||||
return 0;
|
return 0;
|
||||||
cachedSize = (size_t) (fileStat.st_size);
|
mCachedSize = (size_t) (fileStat.st_size);
|
||||||
#else
|
#elif defined __gnu_linux__ || defined __APPLE__ || defined __MACH__
|
||||||
struct stat fileStat;
|
struct stat fileStat;
|
||||||
int err = stat(mFilename.c_str(), &fileStat );
|
int err = stat(mFilename.c_str(), &fileStat );
|
||||||
if (0 != err)
|
if (0 != err)
|
||||||
return 0;
|
return 0;
|
||||||
cachedSize = (size_t) (fileStat.st_size);
|
const unsigned long long cachedSize = fileStat.st_size;
|
||||||
|
mCachedSize = static_cast< size_t >( cachedSize );
|
||||||
|
#else
|
||||||
|
# error "Unknown platform"
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return cachedSize;
|
return mCachedSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
|
@ -59,11 +59,11 @@ class ASSIMP_API DefaultIOStream : public IOStream
|
||||||
{
|
{
|
||||||
friend class DefaultIOSystem;
|
friend class DefaultIOSystem;
|
||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
#if __ANDROID_API__ > 9
|
# if __ANDROID_API__ > 9
|
||||||
#if defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
|
# if defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
|
||||||
friend class AndroidJNIIOSystem;
|
friend class AndroidJNIIOSystem;
|
||||||
#endif // defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
|
# endif // defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
|
||||||
#endif // __ANDROID_API__ > 9
|
# endif // __ANDROID_API__ > 9
|
||||||
#endif // __ANDROID__
|
#endif // __ANDROID__
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -111,7 +111,7 @@ private:
|
||||||
std::string mFilename;
|
std::string mFilename;
|
||||||
|
|
||||||
// Cached file size
|
// Cached file size
|
||||||
mutable size_t cachedSize;
|
mutable size_t mCachedSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ private:
|
||||||
inline DefaultIOStream::DefaultIOStream () :
|
inline DefaultIOStream::DefaultIOStream () :
|
||||||
mFile (NULL),
|
mFile (NULL),
|
||||||
mFilename (""),
|
mFilename (""),
|
||||||
cachedSize (SIZE_MAX)
|
mCachedSize(SIZE_MAX)
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ inline DefaultIOStream::DefaultIOStream (FILE* pFile,
|
||||||
const std::string &strFilename) :
|
const std::string &strFilename) :
|
||||||
mFile(pFile),
|
mFile(pFile),
|
||||||
mFilename(strFilename),
|
mFilename(strFilename),
|
||||||
cachedSize (SIZE_MAX)
|
mCachedSize(SIZE_MAX)
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,12 @@ class utDefaultIOStream : public ::testing::Test {
|
||||||
class TestDefaultIOStream : public DefaultIOStream {
|
class TestDefaultIOStream : public DefaultIOStream {
|
||||||
public:
|
public:
|
||||||
TestDefaultIOStream()
|
TestDefaultIOStream()
|
||||||
: DefaultIOStream() {
|
: DefaultIOStream() {
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
|
TestDefaultIOStream( FILE* pFile, const std::string &strFilename )
|
||||||
|
: DefaultIOStream( pFile, strFilename ) {
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +63,14 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F( utDefaultIOStream, FileSizeTest ) {
|
TEST_F( utDefaultIOStream, FileSizeTest ) {
|
||||||
TestDefaultIOStream myStream;
|
char buffer[ L_tmpnam ];
|
||||||
|
tmpnam( buffer );
|
||||||
|
std::FILE *fs( std::fopen( buffer, "w+" ) );
|
||||||
|
size_t written( std::fwrite( buffer, 1, sizeof( char ) * L_tmpnam, fs ) );
|
||||||
|
std::fflush( fs );
|
||||||
|
|
||||||
|
TestDefaultIOStream myStream( fs, buffer );
|
||||||
size_t size = myStream.FileSize();
|
size_t size = myStream.FileSize();
|
||||||
EXPECT_EQ( size, 0 );
|
EXPECT_EQ( size, sizeof( char ) * L_tmpnam );
|
||||||
|
remove( buffer );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue