mirror of
https://github.com/mpv-player/mpv
synced 2024-11-14 22:48:35 +01:00
osdep/io: add android related bullshit
This fixes >2GiB files with at least API level 21. See: https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md for the gritty details. * Based on libavformat's things, except we do not care about API versions or NDKs without unistd.h, which contains all sorts of things that we utilize. * Redefines lseek to always point to the 64bit version. * Redefines fseeko to always point towards an inlined static implementation that utilizes the 64bit version of lseek underneath.
This commit is contained in:
parent
8810c1fc05
commit
f4c80d4402
27
osdep/io.h
27
osdep/io.h
@ -32,6 +32,33 @@
|
||||
#include <glob.h>
|
||||
#endif
|
||||
|
||||
#ifdef __ANDROID__
|
||||
# include <unistd.h>
|
||||
# include <stdio.h>
|
||||
|
||||
// replace lseek with the 64bit variant
|
||||
#ifdef lseek
|
||||
# undef lseek
|
||||
#endif
|
||||
#define lseek(f,p,w) lseek64((f), (p), (w))
|
||||
|
||||
// replace possible fseeko with a
|
||||
// lseek64 based solution.
|
||||
#ifdef fseeko
|
||||
# undef fseeko
|
||||
#endif
|
||||
static inline int mp_fseeko(FILE* fp, off64_t offset, int whence) {
|
||||
int ret = -1;
|
||||
if ((ret = fflush(fp)) != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return lseek64(fileno(fp), offset, whence) >= 0 ? 0 : -1;
|
||||
}
|
||||
#define fseeko(f,p,w) mp_fseeko((f), (p), (w))
|
||||
|
||||
#endif // __ANDROID__
|
||||
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user