X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fphysfs%2Fphysfs_stream.cpp;h=28d92c567a632085a65a5bb7ee3beb8c9b879111;hb=755ac9ae45065248ddf1343a82671f871b447577;hp=70175ed07fc582288cd4bc6a9f08f764c7fa46fd;hpb=cc5c936c476312c5b18d55dd58c19fa362b264d6;p=supertux.git diff --git a/src/physfs/physfs_stream.cpp b/src/physfs/physfs_stream.cpp index 70175ed07..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; @@ -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(); }