/*---------------------------------------------------------------------- | NPT_XbmcFile::Open +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFile::Open(NPT_File::OpenMode mode) { NPT_XbmcFileReference file; // check if we're already open if (!m_FileReference.IsNull()) { return NPT_ERROR_FILE_ALREADY_OPEN; } // store the mode m_Mode = mode; // check for special names const char* name = (const char*)m_Delegator.GetPath(); if (NPT_StringsEqual(name, NPT_FILE_STANDARD_INPUT)) { return NPT_ERROR_FILE_NOT_READABLE; } else if (NPT_StringsEqual(name, NPT_FILE_STANDARD_OUTPUT)) { return NPT_ERROR_FILE_NOT_WRITABLE; } else if (NPT_StringsEqual(name, NPT_FILE_STANDARD_ERROR)) { return NPT_ERROR_FILE_NOT_WRITABLE; } else { file = CFileFactory::CreateLoader(name); if (file.IsNull()) { return NPT_ERROR_NO_SUCH_FILE; } bool result; CURL* url = new CURL(name); /* path is not fully qualified so assume it's relative to home dir */ if (url->GetFileName().IsEmpty()) { delete url; CStdString homepath; CUtil::GetHomePath(homepath); url = new CURL(homepath + "/" + name); } // compute mode if (mode & NPT_FILE_OPEN_MODE_WRITE) { result = file->OpenForWrite(*url, (mode & NPT_FILE_OPEN_MODE_TRUNCATE)?true:false); } else { result = file->Open(*url); } delete url; if (!result) return NPT_ERROR_NO_SUCH_FILE; } // store reference m_FileReference = file; return NPT_SUCCESS; }
/*---------------------------------------------------------------------- | NPT_XbmcFile::Open +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFile::Open(NPT_File::OpenMode mode) { NPT_XbmcFileReference file; // check if we're already open if (!m_FileReference.IsNull()) { return NPT_ERROR_FILE_ALREADY_OPEN; } // store the mode m_Mode = mode; // check for special names const char* name = (const char*)m_Delegator.GetPath(); if (NPT_StringsEqual(name, NPT_FILE_STANDARD_INPUT)) { return NPT_ERROR_FILE_NOT_READABLE; } else if (NPT_StringsEqual(name, NPT_FILE_STANDARD_OUTPUT)) { return NPT_ERROR_FILE_NOT_WRITABLE; } else if (NPT_StringsEqual(name, NPT_FILE_STANDARD_ERROR)) { return NPT_ERROR_FILE_NOT_WRITABLE; } else { file = CFileFactory::CreateLoader(name); if (file.IsNull()) { return NPT_ERROR_NO_SUCH_FILE; } bool result; CURL* url = new CURL(name); // compute mode if (mode & NPT_FILE_OPEN_MODE_WRITE) { result = file->OpenForWrite(*url, (mode & NPT_FILE_OPEN_MODE_TRUNCATE)?true:false); } else { result = file->Open(*url); } delete url; if (!result) return NPT_ERROR_NO_SUCH_FILE; } // store reference m_FileReference = file; return NPT_SUCCESS; }
/*---------------------------------------------------------------------- | NPT_XbmcFileStream::Tell +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFileStream::Tell(NPT_Position& offset) { __int64 result = m_FileReference->GetPosition(); if (result >= 0) { offset = (NPT_Position)result; return NPT_SUCCESS; } else { return NPT_FAILURE; } }
/*---------------------------------------------------------------------- | NPT_XbmcFileStream::Seek +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFileStream::Seek(NPT_Position offset) { __int64 result; result = m_FileReference->Seek(offset, SEEK_SET) ; if (result >= 0) { return NPT_SUCCESS; } else { return NPT_FAILURE; } }
/*---------------------------------------------------------------------- | NPT_XbmcFile::GetSize +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFile::GetSize(NPT_LargeSize& size) { // default value size = 0; // check that the file is open if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN; // return the size size = m_Size; return NPT_SUCCESS; }
/*---------------------------------------------------------------------- | NPT_XbmcFile::GetOutputStream +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFile::GetOutputStream(NPT_OutputStreamReference& stream) { // default value stream = NULL; // check that the file is open if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN; // check that the mode is compatible if (!(m_Mode & NPT_FILE_OPEN_MODE_WRITE)) { return NPT_ERROR_FILE_NOT_WRITABLE; } // create a stream stream = new NPT_XbmcFileOutputStream(m_FileReference); return NPT_SUCCESS; }
/*---------------------------------------------------------------------- | NPT_XbmcFileStream::Flush +---------------------------------------------------------------------*/ NPT_Result NPT_XbmcFileStream::Flush() { m_FileReference->Flush(); return NPT_SUCCESS; }