version 1.1, 2012/02/21 16:23:02
|
version 1.1.1.2, 2012/05/29 12:26:49
|
Line 39
|
Line 39
|
#include <termios.h> |
#include <termios.h> |
|
|
#include "missing.h" |
#include "missing.h" |
|
#include "sudo_debug.h" |
|
|
#ifndef TCSASOFT |
#ifndef TCSASOFT |
# define TCSASOFT 0 |
# define TCSASOFT 0 |
Line 69 int term_kill;
|
Line 70 int term_kill;
|
int |
int |
term_restore(int fd, int flush) |
term_restore(int fd, int flush) |
{ |
{ |
|
debug_decl(term_restore, SUDO_DEBUG_UTIL) |
|
|
if (changed) { |
if (changed) { |
int flags = TCSASOFT; |
int flags = TCSASOFT; |
flags |= flush ? TCSAFLUSH : TCSADRAIN; |
flags |= flush ? TCSAFLUSH : TCSADRAIN; |
if (tcsetattr(fd, flags, &oterm) != 0) |
if (tcsetattr(fd, flags, &oterm) != 0) |
return 0; | debug_return_int(0); |
changed = 0; |
changed = 0; |
} |
} |
return 1; | debug_return_int(1); |
} |
} |
|
|
int |
int |
term_noecho(int fd) |
term_noecho(int fd) |
{ |
{ |
|
debug_decl(term_noecho, SUDO_DEBUG_UTIL) |
|
|
if (!changed && tcgetattr(fd, &oterm) != 0) |
if (!changed && tcgetattr(fd, &oterm) != 0) |
return 0; | debug_return_int(0); |
(void) memcpy(&term, &oterm, sizeof(term)); |
(void) memcpy(&term, &oterm, sizeof(term)); |
CLR(term.c_lflag, ECHO|ECHONL); |
CLR(term.c_lflag, ECHO|ECHONL); |
#ifdef VSTATUS |
#ifdef VSTATUS |
Line 91 term_noecho(int fd)
|
Line 96 term_noecho(int fd)
|
#endif |
#endif |
if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { |
if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { |
changed = 1; |
changed = 1; |
return 1; | debug_return_int(1); |
} |
} |
return 0; | debug_return_int(0); |
} |
} |
|
|
int |
int |
term_raw(int fd, int isig) |
term_raw(int fd, int isig) |
{ |
{ |
struct termios term; |
struct termios term; |
|
debug_decl(term_raw, SUDO_DEBUG_UTIL) |
|
|
if (!changed && tcgetattr(fd, &oterm) != 0) |
if (!changed && tcgetattr(fd, &oterm) != 0) |
return 0; |
return 0; |
Line 114 term_raw(int fd, int isig)
|
Line 120 term_raw(int fd, int isig)
|
SET(term.c_lflag, ISIG); |
SET(term.c_lflag, ISIG); |
if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { |
if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) { |
changed = 1; |
changed = 1; |
return 1; | debug_return_int(1); |
} |
} |
return 0; | debug_return_int(0); |
} |
} |
|
|
int |
int |
term_cbreak(int fd) |
term_cbreak(int fd) |
{ |
{ |
|
debug_decl(term_cbreak, SUDO_DEBUG_UTIL) |
|
|
if (!changed && tcgetattr(fd, &oterm) != 0) |
if (!changed && tcgetattr(fd, &oterm) != 0) |
return 0; |
return 0; |
(void) memcpy(&term, &oterm, sizeof(term)); |
(void) memcpy(&term, &oterm, sizeof(term)); |
Line 137 term_cbreak(int fd)
|
Line 145 term_cbreak(int fd)
|
term_erase = term.c_cc[VERASE]; |
term_erase = term.c_cc[VERASE]; |
term_kill = term.c_cc[VKILL]; |
term_kill = term.c_cc[VKILL]; |
changed = 1; |
changed = 1; |
return 1; | debug_return_int(1); |
} |
} |
return 0; | debug_return_int(0); |
} |
} |
|
|
int |
int |
term_copy(int src, int dst) |
term_copy(int src, int dst) |
{ |
{ |
struct termios tt; |
struct termios tt; |
|
debug_decl(term_copy, SUDO_DEBUG_UTIL) |
|
|
if (tcgetattr(src, &tt) != 0) |
if (tcgetattr(src, &tt) != 0) |
return 0; | debug_return_int(0); |
if (tcsetattr(dst, TCSANOW|TCSASOFT, &tt) != 0) |
if (tcsetattr(dst, TCSANOW|TCSASOFT, &tt) != 0) |
return 0; | debug_return_int(0); |
return 1; | debug_return_int(1); |
} |
} |