=== 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 *);