diff src/console/Vfs_File.cxx @ 316:fb513e10174e trunk

[svn] - merge libconsole-blargg into mainline libconsole: + obsoletes plugins-ugly:sapplug
author nenolod
date Thu, 30 Nov 2006 19:54:33 -0800
parents 3da1b8942b8b
children 986f098da058
line wrap: on
line diff
--- a/src/console/Vfs_File.cxx	Wed Nov 29 14:42:11 2006 -0800
+++ b/src/console/Vfs_File.cxx	Thu Nov 30 19:54:33 2006 -0800
@@ -1,15 +1,19 @@
-
 #include "Vfs_File.h"
 
-#include "audacious/vfs.h"
-
-Vfs_File_Reader::Vfs_File_Reader() : file_( NULL ) { }
+Vfs_File_Reader::Vfs_File_Reader() : file_( 0 ), owned_file_( 0 ) { }
 
 Vfs_File_Reader::~Vfs_File_Reader() { close(); }
 
+void Vfs_File_Reader::reset( VFSFile* f )
+{
+	close();
+	file_ = f;
+}
+
 Vfs_File_Reader::error_t Vfs_File_Reader::open( const char* path )
 {
-	file_ = vfs_fopen( path, "rb" );
+	close();
+	file_ = owned_file_ = vfs_fopen( path, "rb" );
 	if ( !file_ )
 		return "Couldn't open file";
 	return 0;
@@ -18,37 +22,37 @@
 long Vfs_File_Reader::size() const
 {
 	long pos = tell();
-	vfs_fseek( (VFSFile*) file_, 0, SEEK_END );
+	vfs_fseek( file_, 0, SEEK_END );
 	long result = tell();
-	vfs_fseek( (VFSFile*) file_, pos, SEEK_SET );
+	vfs_fseek( file_, pos, SEEK_SET );
 	return result;
 }
 
 long Vfs_File_Reader::read_avail( void* p, long s )
 {
-	return (long) vfs_fread( p, 1, s, (VFSFile*) file_ );
+	return (long) vfs_fread( p, 1, s, file_ );
 }
 
 long Vfs_File_Reader::tell() const
 {
-	return vfs_ftell( (VFSFile*) file_ );
+	return vfs_ftell( file_ );
 }
 
 Vfs_File_Reader::error_t Vfs_File_Reader::seek( long n )
 {
 	if ( n == 0 ) // optimization
-		vfs_rewind( (VFSFile*) file_ );
-	else if ( vfs_fseek( (VFSFile*) file_, n, SEEK_SET ) != 0 )
+		vfs_rewind( file_ );
+	else if ( vfs_fseek( file_, n, SEEK_SET ) != 0 )
 		return "Error seeking in file";
 	return 0;
 }
 
 void Vfs_File_Reader::close()
 {
-	if ( file_ )
+	file_ = 0;
+	if ( owned_file_ )
 	{
-		vfs_fclose( (VFSFile*) file_ );
-		file_ = 0;
+		vfs_fclose( owned_file_ );
+		owned_file_ = 0;
 	}
 }
-