Skip to content

Commit

Permalink
rewrite addon source code
Browse files Browse the repository at this point in the history
  • Loading branch information
AlwinEsch committed Feb 26, 2020
1 parent e520294 commit 6c7a624
Show file tree
Hide file tree
Showing 11 changed files with 1,430 additions and 736 deletions.
17 changes: 11 additions & 6 deletions CMakeLists.txt
Expand Up @@ -4,27 +4,32 @@ project(vfs.rar)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})

find_package(Kodi REQUIRED)
find_package(p8-platform REQUIRED)
find_package(TinyXML REQUIRED)

include_directories(${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways
${p8-platform_INCLUDE_DIRS}
${TINYXML_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/lib/UnrarXLib)

add_subdirectory(lib/UnrarXLib)

set(RAR_SOURCES src/RarFile.cpp
set(RAR_SOURCES src/RarControl.cpp
src/RarFile.cpp
src/RarExtractThread.cpp
src/RarManager.cpp)

set(RAR_HEADERS src/RarExtractThread.h
set(RAR_HEADERS src/Helpers.h
src/RarControl.h
src/RarExtractThread.h
src/RarManager.h)

add_definitions(-D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64
-D__STDC_FORMAT_MACROS
-D_CRT_NONSTDC_NO_DEPRECATE)
-D_CRT_NONSTDC_NO_DEPRECATE
-DRARDLL
-DSILENT)

set(DEPLIBS unrarxlib ${p8-platform_LIBRARIES})
set(DEPLIBS unrarxlib ${TINYXML_LIBRARIES})

build_addon(vfs.rar RAR DEPLIBS)

Expand Down
24 changes: 24 additions & 0 deletions FindTinyXML.cmake
@@ -0,0 +1,24 @@
# - Find TinyXML
# Find the native TinyXML includes and library
#
# TINYXML_FOUND - True if TinyXML found.
# TINYXML_INCLUDE_DIRS - where to find tinyxml.h, etc.
# TINYXML_LIBRARIES - List of libraries when using TinyXML.
#

find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_TINYXML tinyxml QUIET)
endif()

find_path(TINYXML_INCLUDE_DIRS NAMES tinyxml.h
PATHS ${PC_TINYXML_INCLUDEDIR}
PATH_SUFFIXES tinyxml)
find_library(TINYXML_LIBRARIES NAMES tinyxml
PATHS ${PC_TINYXML_LIBDIR}
PATH_SUFFIXES tinyxml)

include("FindPackageHandleStandardArgs")
find_package_handle_standard_args(TinyXML REQUIRED_VARS TINYXML_INCLUDE_DIRS TINYXML_LIBRARIES)

mark_as_advanced(TINYXML_INCLUDE_DIRS TINYXML_LIBRARIES)
59 changes: 59 additions & 0 deletions src/Helpers.h
Expand Up @@ -28,6 +28,9 @@
#include <mutex>
#include <thread>

namespace
{

inline const char* kodiTranslateLogLevel(const AddonLog logLevel)
{
switch (logLevel)
Expand Down Expand Up @@ -92,6 +95,62 @@ class CTimeout
uint64_t m_iTarget;
};

inline std::string StringFormatV(const char* fmt, va_list args)
{
if (fmt == nullptr)
return "";

int size = 2048;
va_list argCopy;

char *cstr = reinterpret_cast<char*>(malloc(sizeof(char) * size));
if (cstr == nullptr)
return "";

while (1)
{
va_copy(argCopy, args);

int nActual = vsnprintf(cstr, size, fmt, argCopy);
va_end(argCopy);

if (nActual > -1 && nActual < size) // We got a valid result
{
std::string str(cstr, nActual);
free(cstr);
return str;
}
if (nActual > -1) // Exactly what we will need (glibc 2.1)
size = nActual + 1;
else // Let's try to double the size (glibc 2.0)
size *= 2;

char *new_cstr = reinterpret_cast<char*>(realloc(cstr, sizeof(char) * size));
if (new_cstr == nullptr)
{
free(cstr);
return "";
}

cstr = new_cstr;
}

free(cstr);
return "";
}

inline std::string StringFormat(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
std::string str = StringFormatV(fmt, args);
va_end(args);

return str;
}

} // namespace

namespace ThreadHelpers
{

Expand Down

0 comments on commit 6c7a624

Please sign in to comment.