diff options
author | Miguel Borges de Freitas <enen92@users.noreply.github.com> | 2022-06-20 20:26:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-20 20:26:38 +0100 |
commit | dd0d15da84620cb314bc308ff56f06364c4945c6 (patch) | |
tree | 4f38b873bf23fcdb6279720673997f3df8773288 | |
parent | 952f943678c9dd508c013a29e3ae6e2dcf5c5429 (diff) | |
parent | ef7742a26f73fed846652acd8fd0fa785a4635e7 (diff) |
Merge pull request #21586 from enen92/dvdcrashandroid
[discs] Fix crash on android when playing dvd folder structures from vfs
-rw-r--r-- | xbmc/cores/DllLoader/exports/emu_msvcrt.cpp | 15 | ||||
-rw-r--r-- | xbmc/cores/DllLoader/exports/wrapper.c | 9 |
2 files changed, 23 insertions, 1 deletions
diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp index 7f1caee6aa..3f555db7b2 100644 --- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp +++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp @@ -2029,7 +2029,7 @@ extern "C" if (!fp) return nullptr; -#if defined(TARGET_LINUX) +#if defined(TARGET_LINUX) && !defined(TARGET_ANDROID) struct mntent* mountPoint = getmntent(fp); if (mountPoint) return mountPoint; @@ -2047,6 +2047,19 @@ extern "C" #endif } + struct mntent* dll_getmntent_r(FILE* fp, struct mntent* result, char* buffer, int bufsize) + { + if (!fp || !result || !buffer) + return nullptr; + +#if defined(TARGET_LINUX) && !defined(TARGET_ANDROID) + struct mntent* mountPoint = getmntent_r(fp, result, buffer, bufsize); + if (mountPoint) + return mountPoint; +#endif + return nullptr; + } + // this needs to be wrapped, since dll's have their own file // descriptor list, but we always use app's list with our wrappers int __cdecl dll_open_osfhandle(intptr_t _OSFileHandle, int _Flags) diff --git a/xbmc/cores/DllLoader/exports/wrapper.c b/xbmc/cores/DllLoader/exports/wrapper.c index 33ab3437c1..aafa48a627 100644 --- a/xbmc/cores/DllLoader/exports/wrapper.c +++ b/xbmc/cores/DllLoader/exports/wrapper.c @@ -95,6 +95,7 @@ FILE* dll_popen(const char *command, const char *mode); void* dll_dlopen(const char *filename, int flag); int dll_setvbuf(FILE *stream, char *buf, int type, size_t size); struct mntent *dll_getmntent(FILE *fp); +struct mntent* dll_getmntent_r(FILE* fp, struct mntent* result, char* buffer, int bufsize); void *__wrap_dlopen(const char *filename, int flag) { @@ -445,6 +446,14 @@ struct mntent *__wrap_getmntent(FILE *fp) return NULL; } +struct mntent* __wrap_getmntent_r(FILE* fp, struct mntent* result, char* buffer, int bufsize) +{ +#ifdef TARGET_POSIX + return dll_getmntent_r(fp, result, buffer, bufsize); +#endif + return NULL; +} + // GCC 4.3 in Ubuntu 8.10 defines _FORTIFY_SOURCE=2 which means, that fread, read etc // are actually #defines which are inlined when compiled with -O. Those defines // actually call __*chk (for example, __fread_chk). We need to bypass this whole |