Index: /libmpc/branches/r2d/include/mpc/reader.h
===================================================================
--- /libmpc/branches/r2d/include/mpc/reader.h	(revision 263)
+++ /libmpc/branches/r2d/include/mpc/reader.h	(revision 264)
@@ -40,4 +40,5 @@
 
 #include <mpc/mpc_types.h>
+#include <stdio.h>
 
 #ifdef __cplusplus
@@ -80,4 +81,11 @@
 mpc_status mpc_reader_init_stdio(mpc_reader *p_reader, const char *filename);
 
+/// Initializes reader with default stdio file reader implementation.  Use
+/// this if you prefer to open the file yourself.
+///
+/// \param r p_reader handle to initialize
+/// \param p_file input file handle (already open)
+mpc_status mpc_reader_init_stdio_stream(mpc_reader * p_reader, FILE * p_file);
+
 /// Release reader with default stdio file reader implementation.
 ///
Index: /libmpc/branches/r2d/libmpcdec/mpc_reader.c
===================================================================
--- /libmpc/branches/r2d/libmpcdec/mpc_reader.c	(revision 263)
+++ /libmpc/branches/r2d/libmpcdec/mpc_reader.c	(revision 264)
@@ -88,5 +88,5 @@
 
 mpc_status
-mpc_reader_init_stdio(mpc_reader *p_reader, const char *filename)
+mpc_reader_init_stdio_stream(mpc_reader * p_reader, FILE * p_file)
 {
     mpc_reader tmp_reader; mpc_reader_stdio *p_stdio; int err;
@@ -99,6 +99,5 @@
 
     p_stdio->magic  = STDIO_MAGIC;
-    p_stdio->p_file = fopen(filename, "rb");
-    if(!p_stdio->p_file) goto clean;
+    p_stdio->p_file = p_file;
     p_stdio->is_seekable = MPC_TRUE;
     err = fseek(p_stdio->p_file, 0, SEEK_END);
@@ -126,4 +125,12 @@
 }
 
+mpc_status
+mpc_reader_init_stdio(mpc_reader *p_reader, const char *filename)
+{
+	FILE * stream = fopen(filename, "rb");
+	if (stream == NULL) return MPC_STATUS_FILE;
+	return mpc_reader_init_stdio_stream(p_reader,stream);
+}
+
 void
 mpc_reader_exit_stdio(mpc_reader *p_reader)
