Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
132
Src/Wasabi/api/filereader/local/fileread.cpp
Normal file
132
Src/Wasabi/api/filereader/local/fileread.cpp
Normal file
|
@ -0,0 +1,132 @@
|
|||
#include <precomp.h>
|
||||
#include "fileread.h"
|
||||
#include <api/service/svc_enum.h>
|
||||
|
||||
void *FileReaders::open(const wchar_t *filename, const wchar_t *mode) {
|
||||
int m=0;
|
||||
|
||||
const wchar_t *p=mode;
|
||||
wchar_t c;
|
||||
while(c=*(p++))
|
||||
{
|
||||
switch(c)
|
||||
{
|
||||
case 'r': m=SvcFileReader::READ; break;
|
||||
case 'w': m=SvcFileReader::WRITE; break;
|
||||
case 'a': m=SvcFileReader::APPEND; break;
|
||||
case '+': m|=SvcFileReader::PLUS; break;
|
||||
case 'b': m|=SvcFileReader::BINARY; break;
|
||||
case 't': m|=SvcFileReader::TEXT; break;
|
||||
}
|
||||
}
|
||||
|
||||
return FileReaderEnum(filename, m).getFirst();
|
||||
}
|
||||
|
||||
void FileReaders::close(void *handle)
|
||||
{
|
||||
svc_fileReader *fr=(svc_fileReader *)handle;
|
||||
fr->close();
|
||||
SvcEnum::release(fr);
|
||||
}
|
||||
|
||||
size_t FileReaders::read(void *buffer, size_t size, void *handle)
|
||||
{
|
||||
svc_fileReader *fr=(svc_fileReader *)handle;
|
||||
return fr->read((int8_t *)buffer,size);
|
||||
}
|
||||
|
||||
size_t FileReaders::write(const void *buffer, size_t size, void *handle)
|
||||
{
|
||||
svc_fileReader *fr=(svc_fileReader *)handle;
|
||||
return fr->write((int8_t *)buffer,size);
|
||||
}
|
||||
|
||||
int FileReaders::seek(int64_t offset, int origin, void *handle)
|
||||
{
|
||||
svc_fileReader *fr=(svc_fileReader *)handle;
|
||||
if(!fr->canSeek()) return -1;
|
||||
if(origin==SEEK_SET) return fr->seek(offset);
|
||||
if(origin==SEEK_CUR) return fr->seek(fr->getPos()+offset);
|
||||
return fr->seek(fr->getLength()-offset);
|
||||
}
|
||||
|
||||
uint64_t FileReaders::tell(void *handle)
|
||||
{
|
||||
svc_fileReader *fr=(svc_fileReader *)handle;
|
||||
return fr->getPos();
|
||||
}
|
||||
|
||||
uint64_t FileReaders::getFileSize(void *handle)
|
||||
{
|
||||
svc_fileReader *fr=(svc_fileReader *)handle;
|
||||
return fr->getLength();
|
||||
}
|
||||
|
||||
int FileReaders::exists(const wchar_t *filename) {
|
||||
// Note that we do not do a system lock on the service since we can just
|
||||
// release it directly via the factory
|
||||
waService *s;
|
||||
for(int i=0;s=WASABI_API_SVC->service_enumService(WaSvc::FILEREADER,i);i++) {
|
||||
svc_fileReader *fr=(svc_fileReader *)s->getInterface(FALSE);
|
||||
if(fr->isMine(filename) == 1 || fr->open(filename)) {
|
||||
int ret=fr->exists(filename);
|
||||
fr->close();
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
return ret;
|
||||
}
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FileReaders::remove(const wchar_t *filename) {
|
||||
// Note that we do not do a system lock on the service since we can just
|
||||
// release it directly via the factory
|
||||
waService *s;
|
||||
for(int i=0;s=WASABI_API_SVC->service_enumService(WaSvc::FILEREADER,i);i++) {
|
||||
svc_fileReader *fr=(svc_fileReader *)s->getInterface(FALSE);
|
||||
if (fr->isMine(filename) == 1 || fr->open(filename)) {
|
||||
fr->close();
|
||||
int ret = fr->remove(filename);
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
return ret;
|
||||
}
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FileReaders::removeUndoable(const wchar_t *filename) {
|
||||
// Note that we do not do a system lock on the service since we can just
|
||||
// release it directly via the factory
|
||||
waService *s;
|
||||
for(int i=0;s=WASABI_API_SVC->service_enumService(WaSvc::FILEREADER,i);i++) {
|
||||
svc_fileReader *fr=(svc_fileReader *)s->getInterface(FALSE);
|
||||
if(fr->isMine(filename) == 1 || fr->open(filename)) {
|
||||
fr->close();
|
||||
int ret = fr->removeUndoable(filename);
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
return ret;
|
||||
}
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FileReaders::move(const wchar_t *filename, const wchar_t *destfilename) {
|
||||
// Note that we do not do a system lock on the service since we can just
|
||||
// release it directly via the factory
|
||||
waService *s;
|
||||
for(int i=0;s=WASABI_API_SVC->service_enumService(WaSvc::FILEREADER,i);i++) {
|
||||
svc_fileReader *fr=(svc_fileReader *)s->getInterface(FALSE);
|
||||
if(fr->isMine(filename) == 1 || fr->open(filename)) {
|
||||
fr->close();
|
||||
int ret = fr->move(filename,destfilename);
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
return ret;
|
||||
}
|
||||
s->releaseInterface(fr); fr = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue