X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fphysfs%2Fphysfs_sdl.cpp;h=9fa1ccda95f2d989e688a268232ec949ee29acf8;hb=755ac9ae45065248ddf1343a82671f871b447577;hp=6317e6ef29838acd22836ad41afdf3deb08aae07;hpb=5b7f9214cb929399f1a855ef5807018a9447d510;p=supertux.git diff --git a/src/physfs/physfs_sdl.cpp b/src/physfs/physfs_sdl.cpp index 6317e6ef2..9fa1ccda9 100644 --- a/src/physfs/physfs_sdl.cpp +++ b/src/physfs/physfs_sdl.cpp @@ -1,20 +1,22 @@ -/* -Copyright (C) 2005 Matthias Braun +// $Id$ +// +// SuperTux +// Copyright (C) 2006 Matthias Braun +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ #include #include "physfs_sdl.hpp" @@ -26,6 +28,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include +#include "log.hpp" static int funcSeek(struct SDL_RWops* context, int offset, int whence) { @@ -47,7 +50,7 @@ static int funcSeek(struct SDL_RWops* context, int offset, int whence) break; } if(res == 0) { - std::cerr << "Error seeking in file: " << PHYSFS_getLastError() << "\n"; + log_warning << "Error seeking in file: " << PHYSFS_getLastError() << std::endl; return -1; } @@ -65,7 +68,7 @@ static int funcRead(struct SDL_RWops* context, void* ptr, int size, int maxnum) static int funcClose(struct SDL_RWops* context) { PHYSFS_file* file = (PHYSFS_file*) context->hidden.unknown.data1; - + PHYSFS_close(file); delete context; @@ -74,6 +77,12 @@ static int funcClose(struct SDL_RWops* context) SDL_RWops* get_physfs_SDLRWops(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"); + } + PHYSFS_file* file = (PHYSFS_file*) PHYSFS_openRead(filename.c_str()); if(!file) { std::stringstream msg; @@ -81,7 +90,7 @@ SDL_RWops* get_physfs_SDLRWops(const std::string& filename) << PHYSFS_getLastError(); throw std::runtime_error(msg.str()); } - + SDL_RWops* ops = new SDL_RWops(); ops->type = 0; ops->hidden.unknown.data1 = file;