=== file.c
==================================================================
--- file.c (revision 53980)
+++ file.c (local)
@@ -477,7 +477,7 @@
* NAME: file->fdopen()
* DESCRIPTION: open a file using an existing file descriptor
*/
-struct id3_file *id3_file_fdopen(int fd, enum id3_file_mode mode)
+struct id3_file *id3_file_fdopen(int fd, enum id3_file_mode mode, uint32_t seek)
{
# if 1 || defined(HAVE_UNISTD_H)
FILE *iofile;
@@ -486,6 +486,11 @@
iofile = fdopen(fd, (mode == ID3_FILE_MODE_READWRITE) ? "r+b" : "rb");
if (iofile == 0)
return 0;
+
+ // Must seek after fdopen, as PerlIO buffering can get in the way
+ if (seek) {
+ fseek(iofile, seek, SEEK_SET);
+ }
file = new_file(iofile, mode, 0);
if (file == 0) {
=== id3tag.h
==================================================================
--- id3tag.h (revision 53980)
+++ id3tag.h (local)
@@ -252,7 +252,7 @@
};
struct id3_file *id3_file_open(char const *, enum id3_file_mode);
-struct id3_file *id3_file_fdopen(int, enum id3_file_mode);
+struct id3_file *id3_file_fdopen(int, enum id3_file_mode, uint32_t seek);
int id3_file_close(struct id3_file *);
struct id3_tag *id3_file_tag(struct id3_file const *);