summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2011-10-26 11:47:38 -0700
committerPixel <pixel@nobis-crew.org>2011-10-26 15:05:29 -0700
commite5804f2cb929083713c0082f39182a858c082587 (patch)
tree7e2e97ace60235b753925197a01ed7d7aa9c16c9
parent8b1e278ef364fff2aa7d6b805353a722db1b4b89 (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.h7
-rw-r--r--includes/Input.h2
-rw-r--r--src/Input.cc3
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);