diff options
author | Pixel <pixel@nobis-crew.org> | 2011-10-26 11:47:38 -0700 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2011-10-26 15:05:29 -0700 |
commit | e5804f2cb929083713c0082f39182a858c082587 (patch) | |
tree | 7e2e97ace60235b753925197a01ed7d7aa9c16c9 | |
parent | 8b1e278ef364fff2aa7d6b805353a722db1b4b89 (diff) |
Protecting the IO class a bit more, and adding the raw filename paradigm for at least the Input class.
-rw-r--r-- | includes/Handle.h | 7 | ||||
-rw-r--r-- | includes/Input.h | 2 | ||||
-rw-r--r-- | src/Input.cc | 3 |
3 files changed, 8 insertions, 4 deletions
diff --git a/includes/Handle.h b/includes/Handle.h index 96f1736..321d8db 100644 --- a/includes/Handle.h +++ b/includes/Handle.h @@ -63,7 +63,7 @@ class IOBase { IOBase() : m_h(NULL) { } ~IOBase() { if (m_h) m_h->delRef(); } protected: - void setHandle(Handle * h) { m_h = h; m_h->addRef(); } + void setHandle(Handle * h) { m_h = h; if (m_h) m_h->addRef(); } Handle * m_h; template<class T> friend class IO; @@ -74,11 +74,12 @@ class IO : public IOBase { public: IO() { } IO(T * h) { setHandle(h); } - IO(const IO<T> & io) { setHandle(io.m_h); } + IO(const IO<T> & io) { if (io.m_h) setHandle(io.m_h); } template<class U> - IO(const IO<U> & io) { setHandle(io.m_h); } + IO(const IO<U> & io) { if (io.m_h) setHandle(io.m_h); } IO<T> & operator=(const IO<T> & io) { if (m_h) m_h->delRef(); setHandle(io.m_h); return *this; } T * operator->() { Assert(m_h); return dynamic_cast<T *>(m_h); } + bool isNull() { return dynamic_cast<T *>(m_h); } }; class SeekableHandle : public Handle { diff --git a/includes/Input.h b/includes/Input.h index 518db39..9d45baa 100644 --- a/includes/Input.h +++ b/includes/Input.h @@ -14,9 +14,11 @@ class Input : public SeekableHandle { virtual const char * getName(); virtual off_t getSize(); virtual time_t getMTime(); + const char * getFName() { return m_fname.to_charp(); } private: int m_fd; String m_name; + String m_fname; off_t m_size; time_t m_mtime; }; diff --git a/src/Input.cc b/src/Input.cc index 8f16321..73a2a0a 100644 --- a/src/Input.cc +++ b/src/Input.cc @@ -9,7 +9,7 @@ #include "Printer.h" #ifdef _WIN32 -const char * strerror_r(int errorno, char * buf, size_t bufsize) { +static const char * strerror_r(int errorno, char * buf, size_t bufsize) { #ifdef _MSVC strerror_s(buf, bufsize, errorno); return buf; @@ -49,6 +49,7 @@ static int eioStatsDone(eio_req * req) { Balau::Input::Input(const char * fname) throw (GeneralException) : m_fd(-1), m_size(-1), m_mtime(-1) { m_name.set("Input(%s)", fname); + m_fname = fname; Printer::elog(E_INPUT, "Opening file %s", fname); |