From e33cfc22ab9e40733049177bdbe7a77db51bee00 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 21 Nov 2016 13:34:39 -0800 Subject: kodi-17: Upgrade 17.0 release Signed-off-by: Khem Raj (cherry picked from commit bd28b29d9fb48ae50fd63fe9707cbf7cdefca7bf) Signed-off-by: Andreas Oberritter --- .../kodi/kodi-17/0008-Fix-file_Emu-on-musl.patch | 496 --------------------- 1 file changed, 496 deletions(-) delete mode 100644 meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-Fix-file_Emu-on-musl.patch (limited to 'meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-Fix-file_Emu-on-musl.patch') diff --git a/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-Fix-file_Emu-on-musl.patch b/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-Fix-file_Emu-on-musl.patch deleted file mode 100644 index 7598c7ac5f..0000000000 --- a/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-Fix-file_Emu-on-musl.patch +++ /dev/null @@ -1,496 +0,0 @@ -From 3a10d9479e7c9a77c478b8b428e4309ff22e8498 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sun, 6 Nov 2016 23:08:27 -0800 -Subject: [PATCH 8/8] Fix file_Emu on musl - -Signed-off-by: Khem Raj ---- - xbmc/cores/DllLoader/exports/emu_msvcrt.cpp | 28 ++-- - xbmc/cores/DllLoader/exports/emu_msvcrt.h | 2 +- - .../DllLoader/exports/util/EmuFileWrapper.cpp | 172 +++++++++------------ - xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h | 27 ++-- - xbmc/cores/DllLoader/exports/wrapper.c | 4 +- - 5 files changed, 99 insertions(+), 134 deletions(-) - -diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp -index ab14942..a39014a 100644 ---- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp -+++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp -@@ -51,6 +51,7 @@ - #include - #include - #include -+#include - #ifdef TARGET_POSIX - #include "PlatformDefs.h" // for __stat64 - #include "XFileUtils.h" -@@ -476,13 +477,10 @@ extern "C" - EmuFileObject* o = g_emuFileWrapper.GetFileObjectByDescriptor(fd); - if (o) - { -- if(!o->used) -- return NULL; -- - int nmode = convert_fmode(mode); - if( (o->mode & nmode) != nmode) - CLog::Log(LOGWARNING, "dll_fdopen - mode 0x%x differs from fd mode 0x%x", nmode, o->mode); -- return &o->file_emu; -+ return g_emuFileWrapper.GetStreamByFileObject(o); - } - else if (!IS_STD_DESCRIPTOR(fd)) - { -@@ -545,7 +543,7 @@ extern "C" - return -1; - } - object->mode = iMode; -- return g_emuFileWrapper.GetDescriptorByStream(&object->file_emu); -+ return g_emuFileWrapper.GetDescriptorByFileObject(object); - } - delete pFile; - return -1; -@@ -1214,8 +1212,8 @@ extern "C" - { - FILE* file = NULL; - #if defined(TARGET_LINUX) && !defined(TARGET_ANDROID) -- if (strcmp(filename, MOUNTED) == 0 -- || strcmp(filename, MNTTAB) == 0) -+ if (strcmp(filename, _PATH_MOUNTED) == 0 -+ || strcmp(filename, _PATH_MNTTAB) == 0) - { - CLog::Log(LOGINFO, "%s - something opened the mount file, let's hope it knows what it's doing", __FUNCTION__); - return fopen(filename, mode); -@@ -1622,7 +1620,7 @@ extern "C" - int ret; - - ret = dll_fgetpos64(stream, &tmpPos); --#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) - *pos = (fpos_t)tmpPos; - #else - pos->__pos = (off_t)tmpPos.__pos; -@@ -1635,8 +1633,9 @@ extern "C" - CFile* pFile = g_emuFileWrapper.GetFileXbmcByStream(stream); - if (pFile != NULL) - { --#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -- *pos = pFile->GetPosition(); -+#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+ uint64_t *ppos = (uint64_t *) pos; -+ *ppos = pFile->GetPosition(); - #else - pos->__pos = pFile->GetPosition(); - #endif -@@ -1657,8 +1656,9 @@ extern "C" - int fd = g_emuFileWrapper.GetDescriptorByStream(stream); - if (fd >= 0) - { --#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -- if (dll_lseeki64(fd, *pos, SEEK_SET) >= 0) -+#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+ const uint64_t *ppos = (const uint64_t *) pos; -+ if (dll_lseeki64(fd, *ppos, SEEK_SET) >= 0) - #else - if (dll_lseeki64(fd, (__off64_t)pos->__pos, SEEK_SET) >= 0) - #endif -@@ -1674,7 +1674,7 @@ extern "C" - { - // it might be something else than a file, or the file is not emulated - // let the operating system handle it --#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) - return fsetpos(stream, pos); - #else - return fsetpos64(stream, pos); -@@ -1690,7 +1690,7 @@ extern "C" - if (fd >= 0) - { - fpos64_t tmpPos; --#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) - tmpPos= *pos; - #else - tmpPos.__pos = (off64_t)(pos->__pos); -diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.h b/xbmc/cores/DllLoader/exports/emu_msvcrt.h -index 3294d9a..c7c483f 100644 ---- a/xbmc/cores/DllLoader/exports/emu_msvcrt.h -+++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.h -@@ -24,7 +24,7 @@ - #define _onexit_t void* - #endif - --#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) || !defined(__GLIBC__) - typedef off_t __off_t; - typedef int64_t off64_t; - typedef off64_t __off64_t; -diff --git a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp -index 8927d41..e9a2ab0 100644 ---- a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp -+++ b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp -@@ -52,16 +52,7 @@ constexpr bool isValidFilePtr(FILE* f) - } - CEmuFileWrapper::CEmuFileWrapper() - { -- // since we always use dlls we might just initialize it directly -- for (int i = 0; i < MAX_EMULATED_FILES; i++) -- { -- memset(&m_files[i], 0, sizeof(EmuFileObject)); -- m_files[i].used = false; --#if defined(TARGET_WINDOWS) && (_MSC_VER >= 1900) -- m_files[i].file_emu._Placeholder = new kodi_iobuf(); --#endif -- FileDescriptor(m_files[i].file_emu)->_file = -1; -- } -+ memset(m_files, 0, sizeof(m_files)); - } - - CEmuFileWrapper::~CEmuFileWrapper() -@@ -73,29 +64,7 @@ void CEmuFileWrapper::CleanUp() - { - CSingleLock lock(m_criticalSection); - for (int i = 0; i < MAX_EMULATED_FILES; i++) -- { -- if (m_files[i].used) -- { -- m_files[i].file_xbmc->Close(); -- delete m_files[i].file_xbmc; -- -- if (m_files[i].file_lock) -- { -- delete m_files[i].file_lock; -- m_files[i].file_lock = nullptr; -- } --#if !defined(TARGET_WINDOWS) -- //Don't memset on Windows as it overwrites our pointer -- memset(&m_files[i], 0, sizeof(EmuFileObject)); --#endif -- m_files[i].used = false; -- FileDescriptor(m_files[i].file_emu)->_file = -1; -- } --#if defined(TARGET_WINDOWS) && (_MSC_VER >= 1900) -- delete static_cast(m_files[i].file_emu._Placeholder); -- m_files[i].file_emu._Placeholder = nullptr; --#endif -- } -+ UnRegisterFileObject(&m_files[i], true); - } - - EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile) -@@ -106,13 +75,11 @@ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile) - - for (int i = 0; i < MAX_EMULATED_FILES; i++) - { -- if (!m_files[i].used) -+ if (!m_files[i].file_xbmc) - { - // found a free location - object = &m_files[i]; -- object->used = true; - object->file_xbmc = pFile; -- FileDescriptor(object->file_emu)->_file = (i + FILE_WRAPPER_OFFSET); - object->file_lock = new CCriticalSection(); - break; - } -@@ -121,82 +88,74 @@ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile) - return object; - } - --void CEmuFileWrapper::UnRegisterFileObjectByDescriptor(int fd) -+void CEmuFileWrapper::UnRegisterFileObject(EmuFileObject *object, bool free_file) -+ - { -- int i = fd - FILE_WRAPPER_OFFSET; -- if (! (i >= 0 && i < MAX_EMULATED_FILES)) -- return; -+ if (object && object->file_xbmc) -+ { -+ if (object->file_xbmc && free_file) -+ { -+ object->file_xbmc->Close(); -+ delete object->file_xbmc; -+ } -+ if (object->file_lock) -+ { -+ delete object->file_lock; -+ } - -- if (!m_files[i].used) -- return; -+ memset(object, 0, sizeof(*object)); -+ } -+} - -+void CEmuFileWrapper::UnRegisterFileObjectByDescriptor(int fd) -+{ - CSingleLock lock(m_criticalSection); -- -- // we assume the emulated function alreay deleted the CFile object -- if (m_files[i].file_lock) -- { -- delete m_files[i].file_lock; -- m_files[i].file_lock = nullptr; -- } --#if !defined(TARGET_WINDOWS) -- //Don't memset on Windows as it overwrites our pointer -- memset(&m_files[i], 0, sizeof(EmuFileObject)); --#endif -- m_files[i].used = false; -- FileDescriptor(m_files[i].file_emu)->_file = -1; -+ UnRegisterFileObject(GetFileObjectByDescriptor(fd), false); - } - - void CEmuFileWrapper::UnRegisterFileObjectByStream(FILE* stream) - { - if (isValidFilePtr(stream)) - { -- return UnRegisterFileObjectByDescriptor(FileDescriptor(*stream)->_file); -+ CSingleLock lock(m_criticalSection); -+ UnRegisterFileObject(GetFileObjectByStream(stream), false); - } - } - - void CEmuFileWrapper::LockFileObjectByDescriptor(int fd) - { -- int i = fd - FILE_WRAPPER_OFFSET; -- if (i >= 0 && i < MAX_EMULATED_FILES) -+ EmuFileObject* object = GetFileObjectByDescriptor(fd); -+ if (object && object->file_xbmc) - { -- if (m_files[i].used) -- { -- m_files[i].file_lock->lock(); -- } -+ object->file_lock->lock(); - } - } - - bool CEmuFileWrapper::TryLockFileObjectByDescriptor(int fd) - { -- int i = fd - FILE_WRAPPER_OFFSET; -- if (i >= 0 && i < MAX_EMULATED_FILES) -+ EmuFileObject* object = GetFileObjectByDescriptor(fd); -+ if (object && object->file_xbmc) - { -- if (m_files[i].used) -- { -- return m_files[i].file_lock->try_lock(); -- } -+ return object->file_lock->try_lock(); - } - return false; - } - - void CEmuFileWrapper::UnlockFileObjectByDescriptor(int fd) - { -- int i = fd - FILE_WRAPPER_OFFSET; -- if (i >= 0 && i < MAX_EMULATED_FILES) -+ EmuFileObject* object = GetFileObjectByDescriptor(fd); -+ if (object && object->file_xbmc) - { -- if (m_files[i].used) -- { -- m_files[i].file_lock->unlock(); -- } -+ object->file_lock->unlock(); - } - } - - EmuFileObject* CEmuFileWrapper::GetFileObjectByDescriptor(int fd) - { -- int i = fd - FILE_WRAPPER_OFFSET; -+ int i = fd - 0x7000000; - if (i >= 0 && i < MAX_EMULATED_FILES) - { -- if (m_files[i].used) -+ if (m_files[i].file_xbmc) - { - return &m_files[i]; - } -@@ -204,20 +163,39 @@ EmuFileObject* CEmuFileWrapper::GetFileObjectByDescriptor(int fd) - return nullptr; - } - -+int CEmuFileWrapper::GetDescriptorByFileObject(EmuFileObject *object) -+{ -+ int i = object - m_files; -+ if (i >= 0 && i < MAX_EMULATED_FILES) -+ { -+ return 0x7000000 + i; -+ } -+ -+ return -1; -+} -+ - EmuFileObject* CEmuFileWrapper::GetFileObjectByStream(FILE* stream) - { -- if (isValidFilePtr(stream)) -+ EmuFileObject *object = (EmuFileObject*) stream; -+ if (object >= &m_files[0] || object < &m_files[MAX_EMULATED_FILES]) - { -- return GetFileObjectByDescriptor(FileDescriptor(*stream)->_file); -+ if (object->file_xbmc) -+ { -+ return object; -+ } - } -+ return NULL; -+} - -- return nullptr; -+FILE* CEmuFileWrapper::GetStreamByFileObject(EmuFileObject *object) -+{ -+ return (FILE*) object; - } - - XFILE::CFile* CEmuFileWrapper::GetFileXbmcByDescriptor(int fd) - { - auto object = GetFileObjectByDescriptor(fd); -- if (object != nullptr && object->used) -+ if (object != nullptr) - { - return object->file_xbmc; - } -@@ -228,8 +206,9 @@ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByStream(FILE* stream) - { - if (isValidFilePtr(stream)) - { -- auto object = GetFileObjectByDescriptor(FileDescriptor(*stream)->_file); -- if (object != nullptr && object->used) -+ EmuFileObject* object = GetFileObjectByStream(stream); -+ if (object != NULL) -+ - { - return object->file_xbmc; - } -@@ -239,32 +218,21 @@ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByStream(FILE* stream) - - int CEmuFileWrapper::GetDescriptorByStream(FILE* stream) - { -- if (isValidFilePtr(stream)) -- { -- int i = FileDescriptor(*stream)->_file - FILE_WRAPPER_OFFSET; -- if (i >= 0 && i < MAX_EMULATED_FILES) -- { -- return i + FILE_WRAPPER_OFFSET; -- } -- } -- return -1; -+ return GetDescriptorByFileObject(GetFileObjectByStream(stream)); - } - - FILE* CEmuFileWrapper::GetStreamByDescriptor(int fd) - { -- auto object = GetFileObjectByDescriptor(fd); -- if (object != nullptr && object->used) -- { -- return &object->file_emu; -- } -- return nullptr; -+ return GetStreamByFileObject(GetFileObjectByDescriptor(fd)); -+} -+ -+bool CEmuFileWrapper::DescriptorIsEmulatedFile(int fd) -+{ -+ return GetFileObjectByDescriptor(fd) != NULL; - } - - bool CEmuFileWrapper::StreamIsEmulatedFile(FILE* stream) - { -- if (isValidFilePtr(stream)) -- { -- return DescriptorIsEmulatedFile(FileDescriptor(*stream)->_file); -- } -- return false; -+ return GetFileObjectByStream(stream) != NULL; - } -+ -diff --git a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h -index 786fa85..311a5cf 100644 ---- a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h -+++ b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h -@@ -25,14 +25,14 @@ - #include "system.h" - #include "threads/CriticalSection.h" - --#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__) --#define _file _fileno --#elif defined(__UCLIBC__) --#define _file __filedes --#endif -+//#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__) -+//#define _file _fileno -+//#elif defined(__UCLIBC__) -+//#define _file __filedes -+//#endif - - #define MAX_EMULATED_FILES 50 --#define FILE_WRAPPER_OFFSET 0x00000200 -+//#define FILE_WRAPPER_OFFSET 0x00000200 - - namespace XFILE - { -@@ -47,12 +47,9 @@ struct kodi_iobuf { - - typedef struct stEmuFileObject - { -- FILE file_emu; - XFILE::CFile* file_xbmc; - CCriticalSection *file_lock; - int mode; -- //Stick this last to avoid 3-7 bytes of padding -- bool used; - } EmuFileObject; - - class CEmuFileWrapper -@@ -67,22 +64,22 @@ public: - void CleanUp(); - - EmuFileObject* RegisterFileObject(XFILE::CFile* pFile); -+ void UnRegisterFileObject(EmuFileObject*, bool free_file); - void UnRegisterFileObjectByDescriptor(int fd); - void UnRegisterFileObjectByStream(FILE* stream); - void LockFileObjectByDescriptor(int fd); - bool TryLockFileObjectByDescriptor(int fd); - void UnlockFileObjectByDescriptor(int fd); - EmuFileObject* GetFileObjectByDescriptor(int fd); -+ int GetDescriptorByFileObject(EmuFileObject*); - EmuFileObject* GetFileObjectByStream(FILE* stream); -+ FILE* GetStreamByFileObject(EmuFileObject*); - XFILE::CFile* GetFileXbmcByDescriptor(int fd); - XFILE::CFile* GetFileXbmcByStream(FILE* stream); -- static int GetDescriptorByStream(FILE* stream); -+ int GetDescriptorByStream(FILE* stream); - FILE* GetStreamByDescriptor(int fd); -- static constexpr bool DescriptorIsEmulatedFile(int fd) -- { -- return fd >= FILE_WRAPPER_OFFSET && fd < FILE_WRAPPER_OFFSET + MAX_EMULATED_FILES; -- } -- static bool StreamIsEmulatedFile(FILE* stream); -+ bool DescriptorIsEmulatedFile(int fd); -+ bool StreamIsEmulatedFile(FILE* stream); - private: - EmuFileObject m_files[MAX_EMULATED_FILES]; - CCriticalSection m_criticalSection; -diff --git a/xbmc/cores/DllLoader/exports/wrapper.c b/xbmc/cores/DllLoader/exports/wrapper.c -index e363662..07825f3 100644 ---- a/xbmc/cores/DllLoader/exports/wrapper.c -+++ b/xbmc/cores/DllLoader/exports/wrapper.c -@@ -39,13 +39,13 @@ - #endif - #include - --#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) -+#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) || !defined(__GLIBC__) - typedef off_t __off_t; - typedef int64_t off64_t; - typedef off64_t __off64_t; - typedef fpos_t fpos64_t; - #define stat64 stat --#if defined(TARGET_DARWIN) || defined(TARGET_ANDROID) -+#if defined(TARGET_DARWIN) || defined(TARGET_ANDROID) || !defined(__GLIBC__) - #define _G_va_list va_list - #endif - #endif --- -2.10.2 - -- cgit 1.2.3-korg