summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/physfscheckutils.cpp108
-rw-r--r--src/utils/physfscheckutils.h38
-rw-r--r--src/utils/physfsmemoryobject.h2
-rw-r--r--src/utils/virtfsrwops.cpp93
-rw-r--r--src/utils/virtfsrwops.h12
5 files changed, 103 insertions, 150 deletions
diff --git a/src/utils/physfscheckutils.cpp b/src/utils/physfscheckutils.cpp
deleted file mode 100644
index 3c0382f0c..000000000
--- a/src/utils/physfscheckutils.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * 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
- * 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include "utils/physfscheckutils.h"
-
-#ifdef DEBUG_PHYSFS
-
-#include "logger.h"
-
-#include "utils/stringutils.h"
-
-#include "utils/physfsmemoryobject.h"
-#include "utils/virtfsrwops.h"
-
-#include <map>
-
-#include "debug.h"
-
-namespace
-{
- std::map<void*, PHYSFSMemoryObject*> mRWops;
-} // namespace
-
-static SDL_RWops *addRWops(SDL_RWops *restrict const rwops,
- const char *restrict const name,
- const char *restrict const file,
- const unsigned line)
-{
- if (!rwops)
- return nullptr;
-
- mRWops[rwops] = new PHYSFSMemoryObject(name, file, line);
- return rwops;
-}
-
-static void deleteRWops(SDL_RWops *const rwops)
-{
- if (!rwops)
- return;
-
- std::map<void*, PHYSFSMemoryObject*>::iterator it = mRWops.find(rwops);
- if (it == mRWops.end())
- {
- logger->log("bad RWops delete: %p", static_cast<void*>(rwops));
- }
- else
- {
- PHYSFSMemoryObject *const obj = (*it).second;
- if (obj)
- {
- mRWops.erase(rwops);
- delete obj;
- }
- }
-}
-
-SDL_RWops *FakePHYSFSRWOPS_openRead(const char *restrict const name,
- const char *restrict const file,
- const unsigned line)
-{
- return addRWops(VirtFs::RWopsOpenRead(name), name, file, line);
-}
-
-void FakePhysFSClose(SDL_RWops *const rwops)
-{
- deleteRWops(rwops);
-}
-
-void reportPhysfsLeaks()
-{
- if (!mRWops.empty())
- {
- logger->log("RWops leaks detected");
- std::map<void*, PHYSFSMemoryObject*>::iterator it = mRWops.begin();
- const std::map<void*, PHYSFSMemoryObject*>::iterator
- it_end = mRWops.end();
- for (; it != it_end; ++it)
- {
- PHYSFSMemoryObject *obj = (*it).second;
- if (obj)
- {
- logger->log("file: %s at %s", obj->mName.c_str(),
- obj->mAddFile.c_str());
- delete obj;
- }
- }
- mRWops.clear();
- }
-}
-
-#endif // DEBUG_PHYSFS
diff --git a/src/utils/physfscheckutils.h b/src/utils/physfscheckutils.h
deleted file mode 100644
index 7b51504eb..000000000
--- a/src/utils/physfscheckutils.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * 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
- * 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef UTILS_PHYSFSCHECKUTILS_H
-#define UTILS_PHYSFSCHECKUTILS_H
-
-#include "localconsts.h"
-#ifdef DEBUG_PHYSFS
-
-#include <SDL.h>
-
-SDL_RWops *FakePHYSFSRWOPS_openRead(const char *restrict const name,
- const char *restrict const file,
- const unsigned line);
-
-void FakePhysFSClose(SDL_RWops *const rwops);
-
-void reportPhysfsLeaks();
-
-#endif // DEBUG_PHYSFS
-#endif // UTILS_PHYSFSCHECKUTILS_H
diff --git a/src/utils/physfsmemoryobject.h b/src/utils/physfsmemoryobject.h
index 62668b511..ec8ecad1f 100644
--- a/src/utils/physfsmemoryobject.h
+++ b/src/utils/physfsmemoryobject.h
@@ -23,7 +23,7 @@
#ifdef DEBUG_PHYSFS
-#include <string>
+#include "utils/stringutils.h"
#include "localconsts.h"
diff --git a/src/utils/virtfsrwops.cpp b/src/utils/virtfsrwops.cpp
index adcfa2784..347d26916 100644
--- a/src/utils/virtfsrwops.cpp
+++ b/src/utils/virtfsrwops.cpp
@@ -27,7 +27,9 @@
#include "logger.h"
#include "utils/fuzzer.h"
-#include "utils/physfscheckutils.h"
+#include "utils/physfsmemoryobject.h"
+
+#include <map>
#include "debug.h"
@@ -43,6 +45,68 @@
static int openedRWops = 0;
#endif // DUMP_LEAKED_RESOURCES
+#ifdef DEBUG_PHYSFS
+namespace
+{
+ std::map<void*, PHYSFSMemoryObject*> mRWops;
+} // namespace
+
+static SDL_RWops *addDebugRWops(SDL_RWops *restrict const rwops,
+ const char *restrict const name,
+ const char *restrict const file,
+ const unsigned line)
+{
+ if (!rwops)
+ return nullptr;
+
+ mRWops[rwops] = new PHYSFSMemoryObject(name, file, line);
+ return rwops;
+}
+
+static void deleteDebugRWops(SDL_RWops *const rwops)
+{
+ if (!rwops)
+ return;
+
+ std::map<void*, PHYSFSMemoryObject*>::iterator it = mRWops.find(rwops);
+ if (it == mRWops.end())
+ {
+ logger->log("bad RWops delete: %p", static_cast<void*>(rwops));
+ }
+ else
+ {
+ PHYSFSMemoryObject *const obj = (*it).second;
+ if (obj)
+ {
+ mRWops.erase(rwops);
+ delete obj;
+ }
+ }
+}
+
+void VirtFs::reportLeaks()
+{
+ if (!mRWops.empty())
+ {
+ logger->log("RWops leaks detected");
+ std::map<void*, PHYSFSMemoryObject*>::iterator it = mRWops.begin();
+ const std::map<void*, PHYSFSMemoryObject*>::iterator
+ it_end = mRWops.end();
+ for (; it != it_end; ++it)
+ {
+ PHYSFSMemoryObject *obj = (*it).second;
+ if (obj)
+ {
+ logger->log("file: %s at %s", obj->mName.c_str(),
+ obj->mAddFile.c_str());
+ delete obj;
+ }
+ }
+ mRWops.clear();
+ }
+}
+#endif // DEBUG_PHYSFS
+
static PHYSFSINT physfsrwops_seek(SDL_RWops *const rw,
const PHYSFSINT offset,
const int whence)
@@ -188,7 +252,7 @@ static int physfsrwops_close(SDL_RWops *const rw)
openedRWops --;
#endif // DUMP_LEAKED_RESOURCES
#ifdef DEBUG_PHYSFS
- FakePhysFSClose(rw);
+ deleteDebugRWops(rw);
#endif // DEBUG_PHYSFS
return 0;
@@ -262,7 +326,14 @@ static bool checkFilePath(const char *const fname)
}
#endif // __APPLE__
+#ifdef DEBUG_PHYSFS
+#undef RWopsOpenRead
+SDL_RWops *VirtFs::RWopsOpenRead(const char *const fname,
+ const char *restrict const file,
+ const unsigned line)
+#else // DEBUG_PHYSFS
SDL_RWops *VirtFs::RWopsOpenRead(const char *const fname)
+#endif // DEBUG_PHYSFS
{
BLOCK_START("RWopsopenRead")
#ifdef __APPLE__
@@ -274,12 +345,30 @@ SDL_RWops *VirtFs::RWopsOpenRead(const char *const fname)
return nullptr;
#endif // USE_FUZZER
#ifdef USE_PROFILER
+
+#ifdef DEBUG_PHYSFS
+ SDL_RWops *const ret = addDebugRWops(
+ create_rwops(VirtFs::openRead(fname)),
+ fname,
+ file,
+ line);
+#else // DEBUG_PHYSFS
SDL_RWops *const ret = create_rwops(VirtFs::openRead(fname));
+#endif // DEBUG_PHYSFS
+
BLOCK_END("RWopsopenRead")
return ret;
#else // USE_PROFILER
+#ifdef DEBUG_PHYSFS
+ return addDebugRWops(
+ create_rwops(VirtFs::openRead(fname)),
+ fname,
+ file,
+ line);
+#else // DEBUG_PHYSFS
return create_rwops(VirtFs::openRead(fname));
+#endif // DEBUG_PHYSFS
#endif // USE_PROFILER
} /* RWopsopenRead */
diff --git a/src/utils/virtfsrwops.h b/src/utils/virtfsrwops.h
index 83aa79996..e9d68f044 100644
--- a/src/utils/virtfsrwops.h
+++ b/src/utils/virtfsrwops.h
@@ -33,13 +33,23 @@
namespace VirtFs
{
- SDL_RWops *RWopsOpenRead(const char *const fname) A_WARN_UNUSED;
+#ifdef DEBUG_PHYSFS
+ SDL_RWops *RWopsOpenRead(const char *const fname,
+ const char *restrict const file,
+ const unsigned line);
+#else // DEBUG_PHYSFS
+ SDL_RWops *RWopsOpenRead(const char *const fname);
+#endif // DEBUG_PHYSFS
+
SDL_RWops *RWopsOpenWrite(const char *const fname) A_WARN_UNUSED;
SDL_RWops *RWopsOpenAppend(const char *const fname) A_WARN_UNUSED;
SDL_RWops *MakeRWops(PHYSFS_file *const handle) A_WARN_UNUSED;
#ifdef DUMP_LEAKED_RESOURCES
void reportRWops();
#endif // DUMP_LEAKED_RESOURCES
+#ifdef DEBUG_PHYSFS
+ void reportLeaks();
+#endif // DEBUG_PHYSFS
} // namespace VirtFs
#endif // UTILS_PHYSFSRWOPS_H