X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fphysfs%2Fphysfs_stream.cpp;h=28d92c567a632085a65a5bb7ee3beb8c9b879111;hb=43db9a6c44b6ee544e7694d1bb234ba559b0849c;hp=3a3c74b6397d049736b34a0e31e744cfac051467;hpb=a113d3bd1feddd510e3b2852b0d42522735eee40;p=supertux.git diff --git a/src/physfs/physfs_stream.cpp b/src/physfs/physfs_stream.cpp index 3a3c74b63..28d92c567 100644 --- a/src/physfs/physfs_stream.cpp +++ b/src/physfs/physfs_stream.cpp @@ -28,6 +28,11 @@ IFileStreambuf::IFileStreambuf(const std::string& filename) { + // check this as PHYSFS seems to be buggy and still returns a + // valid pointer in this case + if(filename == "") { + throw std::runtime_error("Couldn't open file: empty filename"); + } file = PHYSFS_openRead(filename.c_str()); if(file == 0) { std::stringstream msg; @@ -49,7 +54,7 @@ IFileStreambuf::underflow() return traits_type::eof(); } - PHYSFS_sint64 bytesread = (size_t) PHYSFS_read(file, buf, 1, sizeof(buf)); + PHYSFS_sint64 bytesread = PHYSFS_read(file, buf, 1, sizeof(buf)); if(bytesread <= 0) { return traits_type::eof(); } @@ -123,6 +128,8 @@ OFileStreambuf::~OFileStreambuf() int OFileStreambuf::overflow(int c) { + char c2 = (char)c; + if(pbase() == pptr()) return 0; @@ -132,7 +139,7 @@ OFileStreambuf::overflow(int c) return traits_type::eof(); if(c != traits_type::eof()) { - PHYSFS_sint64 res = PHYSFS_write(file, &c, 1, 1); + PHYSFS_sint64 res = PHYSFS_write(file, &c2, 1, 1); if(res <= 0) return traits_type::eof(); }