1
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:
Jan Ekström 2017-09-18 20:25:34 +03:00
parent 8810c1fc05
commit f4c80d4402

View File

@ -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