diff options
author | lordjaxom <lordjaxom> | 2004-12-30 22:43:55 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2004-12-30 22:43:55 +0000 |
commit | 302fa2e67276bd0674e81e2a9a01b9e91dd45d8c (patch) | |
tree | a454884a16e0ffa48b5ce3e4ce1a66eb874a9de0 /tools/file.c | |
download | vdr-plugin-streamdev-302fa2e67276bd0674e81e2a9a01b9e91dd45d8c.tar.gz vdr-plugin-streamdev-302fa2e67276bd0674e81e2a9a01b9e91dd45d8c.tar.bz2 |
Initial revision
Diffstat (limited to 'tools/file.c')
-rw-r--r-- | tools/file.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/file.c b/tools/file.c new file mode 100644 index 0000000..2283500 --- /dev/null +++ b/tools/file.c @@ -0,0 +1,95 @@ +#include "tools/file.h" + +#include <sys/stat.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> + +cTBFile::cTBFile(void) { +} + +cTBFile::~cTBFile() { + Close(); +} + +bool cTBFile::Open(const cTBString &Filename, int Mode, mode_t Attribs) { + int filed; + + if (IsOpen()) Close(); + + if ((filed = ::open(Filename, Mode, Attribs)) == -1) + return false; + + if (!cTBSource::Open(filed)) + return false; + + m_Filename = Filename; + m_Anonymous = false; + return true; +} + +bool cTBFile::Open(uint Fileno) { + if (IsOpen()) Close(); + + if (!cTBSource::Open(Fileno)) + return false; + + m_Filename.Format("<&%d>", Fileno); + m_Anonymous = true; + return true; +} + +bool cTBFile::Close(void) { + bool ret = true; + + if (!IsOpen()) + ERRNUL(EBADF); + + if (::close(*this) == -1) + ret = false; + + if (!cTBSource::Close()) + ret = false; + + m_Filename.Clear(); + return ret; +} + +bool cTBFile::Unlink(void) const { + if (m_Filename.IsNull()) + ERRNUL(ENOENT); + + if (!IsOpen()) + ERRNUL(EBADF); + + if (m_Anonymous) + ERRNUL(EINVAL); + + return cTBFile::Unlink(m_Filename); +} + +bool cTBFile::Unlink(const cTBString &Filename) { + return (::unlink(Filename) != -1); +} + +ssize_t cTBFile::Size(void) const { + struct stat buf; + + if (!IsOpen()) + ERRSYS(EBADF); + + if (fstat(*this, &buf) == -1) + return -1; + + return buf.st_size; +} + +ssize_t cTBFile::Size(const cTBString &Filename) { + struct stat buf; + + if (stat(Filename, &buf) == -1) + return -1; + + return buf.st_size; +} |