corona  1.0.2
DefaultFileSystem.cpp
Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include "Utility.h"
00003 
00004 
00005 namespace corona {
00006 
00007   class CFile : public DLLImplementation<File> {
00008   public:
00009     CFile(FILE* file) {
00010       m_file = file;
00011     }
00012 
00013     ~CFile() {
00014       fclose(m_file);
00015     }
00016 
00017     int COR_CALL read(void* buffer, int size) {
00018       return fread(buffer, 1, size, m_file);
00019     }
00020 
00021     int COR_CALL write(const void* buffer, int size) {
00022       return fwrite(buffer, 1, size, m_file);
00023     }
00024 
00025     bool COR_CALL seek(int position, SeekMode mode) {
00026       int m;
00027       switch (mode) {
00028         case BEGIN:   m = SEEK_SET; break;
00029         case CURRENT: m = SEEK_CUR; break;
00030         case END:     m = SEEK_END; break;
00031         default: return false;
00032       }
00033       return fseek(m_file, position, m) == 0;
00034     }
00035 
00036     int COR_CALL tell() {
00037       return ftell(m_file);
00038     }
00039 
00040   private:
00041     FILE* m_file;
00042   };
00043 
00044   namespace hidden {
00045 
00046     COR_EXPORT(File*) CorOpenFile(const char* filename, bool writeable) {
00047       FILE* file = fopen(filename, (writeable ? "wb" : "rb"));
00048       return (file ? new CFile(file) : 0);
00049     }
00050     
00051   }
00052 
00053 }