summaryrefslogtreecommitdiff
path: root/generic/Input.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'generic/Input.cpp')
-rw-r--r--generic/Input.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/generic/Input.cpp b/generic/Input.cpp
new file mode 100644
index 0000000..7106c8d
--- /dev/null
+++ b/generic/Input.cpp
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "Input.h"
+#include "Exceptions.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#else
+#define _(x) x
+#endif
+
+Input::Input(String no) throw (GeneralException) :
+ Handle(no.strlen() ? open(no.to_charp(), O_RDONLY) : dup(0)),
+ n(no) {
+ if (GetHandle() < 0) {
+ throw IOGeneral(String(_("Error opening file ")) + no + _(" for reading: ") + strerror(errno));
+ }
+
+ size = lseek(GetHandle(), 0, SEEK_END);
+ lseek(GetHandle(), 0, SEEK_SET);
+
+ struct stat s;
+
+ fstat(GetHandle(), &s);
+
+ date_modif = s.st_mtime;
+}
+
+Input::Input(const Input & i) : Handle(i), n(i.n), size(i.size), date_modif(i.date_modif) {
+}
+
+bool Input::CanWrite() {
+ return 0;
+}
+
+bool Input::CanRead() {
+ return 1;
+}
+
+String Input::GetName() {
+ return n;
+}
+
+ssize_t Input::GetSize() {
+ return size;
+}
+
+time_t Input::GetModif() {
+ return date_modif;
+}
+
+Stdin_t::Stdin_t() : Handle(dup(0)) { }
+
+bool Stdin_t::CanWrite() {
+ return 0;
+}
+
+bool Stdin_t::CanRead() {
+ return 1;
+}
+
+String Stdin_t::GetName() {
+ return "Stdin";
+}
+
+Stdin_t Stdin;