Skip to content

Commit

Permalink
osdep/io: add android related bullshit
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
jeeb committed Sep 18, 2017
1 parent 8810c1f commit f4c80d4
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions osdep/io.h
Expand Up @@ -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
Expand Down

0 comments on commit f4c80d4

Please sign in to comment.