aboutsummaryrefslogtreecommitdiffstats
path: root/src/termios_wrapper.c
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-03-19 23:03:01 -0500
committerJesse Luehrs <doy@tozt.net>2013-03-19 23:03:01 -0500
commitd81b604ed963ac571bbeefa033b7744ad3f51d5e (patch)
tree8e0901e3974aec7400a0b46275277249fc2e4263 /src/termios_wrapper.c
parent1fa0019d580450ab106d2a1f3ed9c622218c0dbf (diff)
downloadrust-term-d81b604ed963ac571bbeefa033b7744ad3f51d5e.tar.gz
rust-term-d81b604ed963ac571bbeefa033b7744ad3f51d5e.zip
add a scope guard sort of thing to allow restoring terminal state
Diffstat (limited to 'src/termios_wrapper.c')
-rw-r--r--src/termios_wrapper.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/termios_wrapper.c b/src/termios_wrapper.c
index b23ae2d..77d589b 100644
--- a/src/termios_wrapper.c
+++ b/src/termios_wrapper.c
@@ -1,3 +1,4 @@
+#include <stdlib.h>
#include <termios.h>
/* very simplistic, ignores a lot of the settings that i don't understand,
@@ -63,3 +64,25 @@ int echo(int enabled)
return tcsetattr(0, TCSANOW, &t) == 0;
}
+
+struct termios *get()
+{
+ struct termios *t;
+
+ t = malloc(sizeof(struct termios));
+ if (tcgetattr(0, t) == -1) {
+ return NULL;
+ }
+
+ return t;
+}
+
+void set(struct termios *t)
+{
+ if (t == NULL) {
+ return;
+ }
+
+ tcsetattr(0, TCSANOW, t);
+ free(t);
+}