2010-02-09 05:18:39 +01:00
|
|
|
// Copyright (c) 2008-2010 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones
|
|
|
|
// This file is part of the "cAudio Engine"
|
|
|
|
// For conditions of distribution and use, see copyright notice in cAudio.h
|
|
|
|
|
2010-02-10 22:57:09 +01:00
|
|
|
#include "../Headers/cFileSource.h"
|
2010-02-13 06:48:19 +01:00
|
|
|
#include "../Headers/cUtils.h"
|
2010-02-10 22:57:09 +01:00
|
|
|
|
2010-03-05 02:52:25 +01:00
|
|
|
#ifdef CAUDIO_COMPILE_WITH_FILE_SOURCE
|
|
|
|
|
|
|
|
#include <cstring>
|
|
|
|
|
2010-02-10 22:57:09 +01:00
|
|
|
namespace cAudio
|
|
|
|
{
|
|
|
|
|
2010-02-13 06:48:19 +01:00
|
|
|
cFileSource::cFileSource(const char* filename) : pFile(NULL), Valid(false), Filesize(0)
|
2010-02-10 22:57:09 +01:00
|
|
|
{
|
2010-02-13 06:48:19 +01:00
|
|
|
std::string safeFilename = safeCStr(filename);
|
|
|
|
if(safeFilename.length() != 0)
|
2010-02-10 22:57:09 +01:00
|
|
|
{
|
2010-02-13 06:48:19 +01:00
|
|
|
pFile = fopen(safeFilename.c_str(),"rb");
|
2010-02-10 22:57:09 +01:00
|
|
|
if(pFile)
|
|
|
|
Valid = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(Valid)
|
|
|
|
{
|
|
|
|
fseek(pFile, 0, SEEK_END);
|
|
|
|
Filesize = ftell(pFile);
|
|
|
|
fseek(pFile, 0, SEEK_SET);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
cFileSource::~cFileSource()
|
|
|
|
{
|
|
|
|
if(pFile)
|
|
|
|
fclose(pFile);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cFileSource::isValid()
|
|
|
|
{
|
|
|
|
return Valid;
|
|
|
|
}
|
|
|
|
|
|
|
|
int cFileSource::getCurrentPos()
|
|
|
|
{
|
|
|
|
return ftell(pFile);
|
|
|
|
}
|
|
|
|
|
|
|
|
int cFileSource::getSize()
|
|
|
|
{
|
|
|
|
return Filesize;
|
|
|
|
}
|
|
|
|
|
|
|
|
int cFileSource::read(void* output, int size)
|
|
|
|
{
|
|
|
|
return fread(output, sizeof(char), size, pFile);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cFileSource::seek(int amount, bool relative)
|
|
|
|
{
|
|
|
|
if(relative == true)
|
|
|
|
{
|
|
|
|
int oldamount = ftell(pFile);
|
|
|
|
fseek(pFile, amount, SEEK_CUR);
|
|
|
|
|
|
|
|
//check against the absolute position
|
|
|
|
if(oldamount+amount != ftell(pFile))
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
fseek(pFile, amount, SEEK_SET);
|
|
|
|
if(amount != ftell(pFile))
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
2010-03-05 02:52:25 +01:00
|
|
|
|
|
|
|
#endif
|