summaryrefslogtreecommitdiffstats
path: root/xbmc/DynamicDll.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
commitc04dcc2e7d834218ef2d4194331e383402495ae1 (patch)
tree7333e38d10d75386e60f336b80c2443c1166031d /xbmc/DynamicDll.cpp
parentInitial commit. (diff)
downloadkodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz
kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/DynamicDll.cpp')
-rw-r--r--xbmc/DynamicDll.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/xbmc/DynamicDll.cpp b/xbmc/DynamicDll.cpp
new file mode 100644
index 0000000..29538f9
--- /dev/null
+++ b/xbmc/DynamicDll.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "DynamicDll.h"
+
+#include "SectionLoader.h"
+#include "utils/FileUtils.h"
+#include "utils/log.h"
+
+DllDynamic::DllDynamic()
+{
+ m_dll=NULL;
+ m_DelayUnload=true;
+}
+
+DllDynamic::DllDynamic(const std::string& strDllName):
+ m_strDllName(strDllName)
+{
+ m_dll=NULL;
+ m_DelayUnload=true;
+}
+
+DllDynamic::~DllDynamic()
+{
+ Unload();
+}
+
+bool DllDynamic::Load()
+{
+ if (m_dll)
+ return true;
+
+ if (!(m_dll=CSectionLoader::LoadDLL(m_strDllName, m_DelayUnload, LoadSymbols())))
+ return false;
+
+ if (!ResolveExports())
+ {
+ CLog::Log(LOGERROR, "Unable to resolve exports from dll {}", m_strDllName);
+ Unload();
+ return false;
+ }
+
+ return true;
+}
+
+void DllDynamic::Unload()
+{
+ if(m_dll)
+ CSectionLoader::UnloadDLL(m_strDllName);
+ m_dll=NULL;
+}
+
+bool DllDynamic::CanLoad()
+{
+ return CFileUtils::Exists(m_strDllName);
+}
+
+bool DllDynamic::EnableDelayedUnload(bool bOnOff)
+{
+ if (m_dll)
+ return false;
+
+ m_DelayUnload=bOnOff;
+
+ return true;
+}
+
+bool DllDynamic::SetFile(const std::string& strDllName)
+{
+ if (m_dll)
+ return false;
+
+ m_strDllName=strDllName;
+ return true;
+}
+