QTfrontend/util/FileEngine.cpp
changeset 8112 d85dc8a8f41c
parent 8098 4efee370e2de
child 8115 ac1007c6dea8
equal deleted inserted replaced
8110:9f5fe3fc9d16 8112:d85dc8a8f41c
     7 
     7 
     8 
     8 
     9 const QString FileEngineHandler::scheme = "physfs:/";
     9 const QString FileEngineHandler::scheme = "physfs:/";
    10 
    10 
    11 FileEngine::FileEngine(const QString& filename)
    11 FileEngine::FileEngine(const QString& filename)
    12 : _handler(NULL)
    12     : _handler(NULL)
    13 , _flags(0)
    13     , _flags(0)
       
    14     , m_bufferSet(false)
    14 {
    15 {
    15     setFileName(filename);
    16     setFileName(filename);
    16 }
    17 }
    17 
    18 
    18 FileEngine::~FileEngine()
    19 FileEngine::~FileEngine()
   220 qint64 FileEngine::read(char *data, qint64 maxlen)
   221 qint64 FileEngine::read(char *data, qint64 maxlen)
   221 {
   222 {
   222     return PHYSFS_readBytes(_handler, data, maxlen);
   223     return PHYSFS_readBytes(_handler, data, maxlen);
   223 }
   224 }
   224 
   225 
       
   226 qint64 FileEngine::readLine(char *data, qint64 maxlen)
       
   227 {
       
   228     if(!m_bufferSet)
       
   229     {
       
   230         PHYSFS_setBuffer(_handler, 4096);
       
   231         m_bufferSet = true;
       
   232     }
       
   233 
       
   234     qint64 bytesRead = 0;
       
   235     while(PHYSFS_readBytes(_handler, data, 1)
       
   236           && maxlen
       
   237           && (*data == '\n'))
       
   238     {
       
   239         ++data;
       
   240         --maxlen;
       
   241         ++bytesRead;
       
   242     }
       
   243 
       
   244     return bytesRead;
       
   245 }
       
   246 
   225 qint64 FileEngine::write(const char *data, qint64 len)
   247 qint64 FileEngine::write(const char *data, qint64 len)
   226 {
   248 {
   227     return PHYSFS_writeBytes(_handler, data, len);
   249     return PHYSFS_writeBytes(_handler, data, len);
   228 }
   250 }
   229 
   251 
   242     return PHYSFS_getLastError();
   264     return PHYSFS_getLastError();
   243 }
   265 }
   244 
   266 
   245 bool FileEngine::supportsExtension(Extension extension) const
   267 bool FileEngine::supportsExtension(Extension extension) const
   246 {
   268 {
   247     return extension == QAbstractFileEngine::AtEndExtension;
   269     return
   248 }
   270             (extension == QAbstractFileEngine::AtEndExtension)
   249 
   271             || (extension == QAbstractFileEngine::FastReadLineExtension)
       
   272             ;
       
   273 }
   250 
   274 
   251 
   275 
   252 FileEngineHandler::FileEngineHandler(char *argv0)
   276 FileEngineHandler::FileEngineHandler(char *argv0)
   253 {
   277 {
   254     PHYSFS_init(argv0);
   278     PHYSFS_init(argv0);