Przeglądaj źródła

Merge branch 'master' into android-port

Daniele Bartolini 13 lat temu
rodzic
commit
cd4f3e13ab
4 zmienionych plików z 80 dodań i 28 usunięć
  1. 2 2
      src/CMakeLists.txt
  2. 23 23
      src/core/streams/FileStream.cpp
  3. 45 2
      src/os/linux/File.cpp
  4. 10 1
      src/os/linux/File.h

+ 2 - 2
src/CMakeLists.txt

@@ -134,14 +134,12 @@ set (MATH_HEADERS
 )
 
 set (STREAMS_SRC
-	core/streams/File.cpp
 	core/streams/FileStream.cpp
 	core/streams/MemoryStream.cpp
 	core/streams/Stream.cpp
 )
 
 set (STREAMS_HEADERS
-	core/streams/File.h
 	core/streams/FileStream.h
 	core/streams/MemoryStream.h
 	core/streams/NullStream.h
@@ -226,9 +224,11 @@ set (LINUX_SRC
 	os/linux/Input.cpp
 	os/linux/LinuxTCPSocket.cpp
 	os/linux/LinuxUDPSocket.cpp	
+	os/linux/File.cpp
 )
 
 set (LINUX_HEADERS
+	os/linux/File.h
 #	os/linux/EGLRenderWindow.h
 )
 

+ 23 - 23
src/core/streams/FileStream.cpp

@@ -60,8 +60,7 @@ void FileStream::seek(size_t position)
 {
 	check_valid();
 
-	//flush(); <<<---?
-	fseek(m_file->get_handle(), position, SEEK_SET);
+	m_file->seek(position, SEEK_SET);
 }
 
 //-----------------------------------------------------------------------------
@@ -69,7 +68,7 @@ void FileStream::seek_to_end()
 {
 	check_valid();
 
-	fseek(m_file->get_handle(), 0, SEEK_END);
+	m_file->seek(0, SEEK_END);
 }
 
 //-----------------------------------------------------------------------------
@@ -77,7 +76,7 @@ void FileStream::skip(size_t bytes)
 {
 	check_valid();
 
-	fseek(m_file->get_handle(), bytes, SEEK_CUR);
+	m_file->seek(bytes, SEEK_CUR);
 }
 
 //-----------------------------------------------------------------------------
@@ -88,14 +87,14 @@ uint8_t FileStream::read_byte()
 	if (!m_last_was_read)
 	{
 		m_last_was_read = true;
-		fseek(m_file->get_handle(), 0, SEEK_CUR);
+		m_file->seek(0, SEEK_CUR);
 	}
 
 	uint8_t buffer;
-
-	if (fread(&buffer, 1, 1, m_file->get_handle()) != 1)
+	
+	if (m_file->read(&buffer, 1, 1) != 1)
 	{
-		Log::E("Could not read from file.");
+		Log::E("Could not read from file");
 	}
 
 	return buffer;
@@ -109,10 +108,10 @@ void FileStream::read(void* buffer, size_t size)
 	if (!m_last_was_read)
 	{
 		m_last_was_read = true;
-		fseek(m_file->get_handle(), 0, SEEK_CUR);
+		m_file->seek(0, SEEK_CUR);
 	}
 
-	if (fread(buffer, size, 1, m_file->get_handle()) != 1)
+	if (m_file->read(buffer, size, 1) != 1)
 	{
 		Log::E("Could not read from file.");
 	}
@@ -138,11 +137,12 @@ bool FileStream::copy_to(Stream* stream, size_t size)
 	{
 		int32_t readBytes;
 		int32_t expectedReadBytes = math::min(size - totReadBytes, chunksize);
-		readBytes = fread(buff, 1, expectedReadBytes, m_file->get_handle());
+
+		readBytes = m_file->read(buff, 1, expectedReadBytes);
 
 		if (readBytes < expectedReadBytes)
 		{
-			if (feof(m_file->get_handle()))
+			if (m_file->eof())
 			{
 				if (readBytes != 0)
 				{
@@ -190,10 +190,10 @@ void FileStream::write_byte(uint8_t val)
 	if (m_last_was_read)
 	{
 		m_last_was_read = false;
-		fseek(m_file->get_handle(), 0, SEEK_CUR);
+		m_file->seek(0, SEEK_CUR);
 	}
 
-	if (fputc(val, m_file->get_handle()) == EOF)
+	if (m_file->write(&val, 1, 1) != 1)
 	{
 		Log::E("Could not write to file.");
 	}
@@ -207,10 +207,10 @@ void FileStream::write(const void* buffer, size_t size)
 	if (m_last_was_read)
 	{
 		m_last_was_read = false;
-		fseek(m_file->get_handle(), 0, SEEK_CUR);
+		m_file->seek(0, SEEK_CUR);
 	}
 
-	if (fwrite(buffer, size, 1, m_file->get_handle()) != 1)
+	if (m_file->write(buffer, size, 1) != 1)
 	{
 		Log::E("Could not write to file.");
 	}
@@ -220,24 +220,24 @@ void FileStream::write(const void* buffer, size_t size)
 void FileStream::flush()
 {
 	check_valid();
-	fflush(m_file->get_handle());
+	
+	// FIXME implement flush in File
 }
 
 //-----------------------------------------------------------------------------
 size_t FileStream::position() const
 {
 	check_valid();
-	return ftell(m_file->get_handle());
+
+	return m_file->tell();
 }
 
 //-----------------------------------------------------------------------------
 size_t FileStream::size() const
 {
-	size_t pos = position();
-	fseek(m_file->get_handle(), 0, SEEK_END);
-	size_t size = position();
-	fseek(m_file->get_handle(), pos, SEEK_SET);
-	return size;
+	check_valid();
+	
+	return m_file->size();
 }
 
 //-----------------------------------------------------------------------------

+ 45 - 2
src/core/streams/File.cpp → src/os/linux/File.cpp

@@ -26,20 +26,21 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "File.h"
 #include "Log.h"
 #include "MathUtils.h"
+#include <cassert>
 
 namespace crown
 {
 
 //-----------------------------------------------------------------------------
 File::File() :
-	m_file_handle(0), m_mode(FOM_READ)
+	m_file_handle(NULL), m_mode(FOM_READ)
 {
 }
 
 //-----------------------------------------------------------------------------
 File::~File()
 {
-	if (m_file_handle != 0)
+	if (m_file_handle != NULL)
 	{
 		fclose(m_file_handle);
 	}
@@ -89,6 +90,48 @@ File* File::open(const char* path, FileOpenMode mode)
 	return f;
 }
 
+//-----------------------------------------------------------------------------
+size_t File::read(void* ptr, size_t size, size_t nmemb)
+{
+	assert(m_file_handle != NULL);
+	assert(ptr != NULL);
+
+	return fread(ptr, size, nmemb, m_file_handle);
+}
+
+//-----------------------------------------------------------------------------
+size_t File::write(const void* ptr, size_t size, size_t nmemb)
+{
+	assert(m_file_handle != NULL);
+	assert(ptr != NULL);
+
+	return fwrite(ptr, size, nmemb, m_file_handle);
+}
+
+//-----------------------------------------------------------------------------
+int File::seek(int32_t offset, int whence)
+{
+	assert(m_file_handle != NULL);
+
+	return fseek(m_file_handle, offset, whence);
+}
+
+//-----------------------------------------------------------------------------
+int32_t File::tell()
+{
+	assert(m_file_handle != NULL);
+	
+	return ftell(m_file_handle);
+}
+
+//-----------------------------------------------------------------------------
+int File::eof()
+{
+	assert(m_file_handle != NULL);
+	
+	return feof(m_file_handle);
+}
+
 //-----------------------------------------------------------------------------
 size_t File::size()
 {

+ 10 - 1
src/core/streams/File.h → src/os/linux/File.h

@@ -48,12 +48,21 @@ class File
 
 public:
 
-	virtual				~File();
+						~File();
 
 	bool				is_valid();
 
 	FileOpenMode		mode();
+
 	FILE*				get_handle();
+
+	size_t				read(void* ptr, size_t size, size_t nmemb);
+	size_t				write(const void* ptr, size_t size, size_t nmemb);
+	int					seek(int32_t offset, int whence);
+	int32_t				tell();
+
+	int					eof();
+
 	size_t				size();
 
 	static File*		open(const char* path, FileOpenMode mode);