summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/Input.h1
-rw-r--r--lib/Handle.cc4
-rw-r--r--lib/Input.cc14
3 files changed, 14 insertions, 5 deletions
diff --git a/include/Input.h b/include/Input.h
index 19d8f7d..0b074b2 100644
--- a/include/Input.h
+++ b/include/Input.h
@@ -36,6 +36,7 @@ class Input : public Handle {
off_t size;
time_t date_modif;
openresults_t results;
+ bool fromarchive;
private:
static int wrapopen(const String &, openresults_t *);
diff --git a/lib/Handle.cc b/lib/Handle.cc
index 912e779..2233722 100644
--- a/lib/Handle.cc
+++ b/lib/Handle.cc
@@ -95,6 +95,10 @@ ssize_t Handle::write(const void *cbuf, size_t count) throw (GeneralException) {
ssize_t Handle::read(void *buf, size_t count) throw (GeneralException) {
ssize_t r;
+
+#ifdef DEBUG
+ std::cerr << "read: reading " << count << " bytes from handle " << GetHandle() << std::endl;
+#endif
errno = 0;
while ((r = uread(buf, count)) < 0) {
diff --git a/lib/Input.cc b/lib/Input.cc
index 7427c38..e9b859a 100644
--- a/lib/Input.cc
+++ b/lib/Input.cc
@@ -20,12 +20,12 @@
#define S_ISREG(x) 1
#endif
-#define DEBUG
-
#define BUILTIN_SIG 0x5141504e
+static Input::openresults_t gresults;
+
Input::Input(const String & no) throw (GeneralException) :
- Handle(no.strlen() ? wrapopen(no, &results) : dup(0)),
+ Handle(no.strlen() ? wrapopen(no, &gresults) : dup(0)),
n(no) {
#ifdef DEBUG
@@ -36,6 +36,9 @@ Input::Input(const String & no) throw (GeneralException) :
throw IOGeneral(String(_("Error opening file ")) + no + _(" for reading: ") + strerror(errno));
}
+ results = gresults;
+
+ fromarchive = false;
if (results.name == "") {
struct stat s;
fstat(GetHandle(), &s);
@@ -51,6 +54,7 @@ Input::Input(const String & no) throw (GeneralException) :
read(&size, 4);
date_modif = 0;
SetZ();
+ fromarchive = true;
}
}
@@ -86,7 +90,7 @@ time_t Input::GetModif() const {
}
off_t Input::seek(off_t offset, int whence) throw (GeneralException) {
- if (results.name == "") {
+ if (!fromarchive) {
if ((itell = lseek(GetHandle(), offset, whence)) < 0) {
throw IOGeneral(String(_("Error seeking file ")) + GetName() + _(": ") + strerror(errno));
}
@@ -119,7 +123,7 @@ int Input::wrapopen(const String & fname, openresults_t * results) {
}
void Input::SetZ(int l) throw(GeneralException) {
- if (results.name == "")
+ if (!fromarchive)
Handle::SetZ(l);
}