summaryrefslogtreecommitdiff
path: root/src/user/lib/fwik/io/Term.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/lib/fwik/io/Term.cpp')
-rw-r--r--src/user/lib/fwik/io/Term.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/user/lib/fwik/io/Term.cpp b/src/user/lib/fwik/io/Term.cpp
index 1540b9a..f8f686e 100644
--- a/src/user/lib/fwik/io/Term.cpp
+++ b/src/user/lib/fwik/io/Term.cpp
@@ -6,25 +6,33 @@ Term::Term(const Node &n) : Node(n) {
Term::Term(FILE f) : Node(f) {
_init();
+ if (error E_INVALID_TYPE) libc::close(fd);
}
Term::Term(const char* filename, int mode) : Node(filename, mode) {
_init();
+ if (error == E_INVALID_TYPE) libc::close(fd);
}
void Term::_init() {
+ if (error < 0) return;
if (info.type & FT_TERMINAL) {
w = info.size >> 16;
h = info.size & 0xFFFF;
} else {
- valid = false;
+ error = E_INVALID_TYPE;
}
hist.str = 0;
hist.max = 12;
}
Term::~Term() {
- //TODO : free readline history
+ if (hist.str != 0) {
+ for (int i = 0; i < hist.max; i++) {
+ if (hist.str[i] != 0) free(hist.str[i]);
+ }
+ free(hist.str);
+ }
}
void Term::print(const char *s) {