X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=door_daemon%2Fdoor_daemon.c;h=f8a3982fa4810d2418909152f2cf848d7e31b3ec;hb=7612b7e04f96294ee6a91dd3c48cd2a9edcca87d;hp=36707f97225c8560d6c55d56ca4d609e0042f2c1;hpb=e446f6ea40974e23144698a25cee065db6215be4;p=svn42.git diff --git a/door_daemon/door_daemon.c b/door_daemon/door_daemon.c index 36707f9..f8a3982 100644 --- a/door_daemon/door_daemon.c +++ b/door_daemon/door_daemon.c @@ -20,6 +20,9 @@ #include "datatypes.h" +#include +#include + #include #include #include @@ -330,6 +333,37 @@ int main_loop(int door_fd, int cmd_listen_fd) return return_value; } +int setup_tty(int fd) +{ + struct termios tmio; + + int ret = tcgetattr(fd, &tmio); + if(ret) { + log_printf(ERROR, "Error on tcgetattr(): %s", strerror(errno)); + return ret; + } + + ret = cfsetospeed(&tmio, B9600); + if(ret) { + log_printf(ERROR, "Error on cfsetospeed(): %s", strerror(errno)); + return ret; + } + + ret = cfsetispeed(&tmio, B9600); + if(ret) { + log_printf(ERROR, "Error on cfsetispeed(): %s", strerror(errno)); + return ret; + } + + ret = tcsetattr(fd, TCSANOW, &tmio); + if(ret) { + log_printf(ERROR, "Error on tcsetattr(): %s", strerror(errno)); + return ret; + } + + return 0; +} + int main(int argc, char* argv[]) { log_init(); @@ -417,13 +451,21 @@ int main(int argc, char* argv[]) fclose(pid_file); } - int door_fd = open(opt.door_dev_, O_RDWR); + int door_fd = open(opt.door_dev_, O_RDWR | O_NOCTTY); if(door_fd < 0) { log_printf(ERROR, "unable to open %s: %s", opt.door_dev_, strerror(errno)); options_clear(&opt); log_close(); exit(-1); } + ret = setup_tty(door_fd); + if(ret) { + close(door_fd); + options_clear(&opt); + log_close(); + exit(-1); + } + int cmd_listen_fd = init_command_socket(opt.command_sock_); if(cmd_listen_fd < 0) {