Tags: patch
Dwayne Litzenberger wrote:
> Oh, it uses a different tty? I think there might be an ioctl that sshpass
> needs to handle, then.
>
>
Does the following patch solve the problem?
Shachar
Index: main.c
===================================================================
--- main.c (revision 28)
+++ main.c (working copy)
@@ -147,10 +147,17 @@
int handleoutput( int fd );
+/* Global variables so that this information be shared with the signal handler */
+static int ourtty; // Our own tty
+static int masterpt;
+
+void window_resize_handler(int signum);
+
int runprogram( int argc, char *argv[] )
{
+ struct winsize ttysize; // The size of our tty
// Create a pseudo terminal for our process
- int masterpt=getpt();
+ masterpt=getpt();
if( masterpt==-1 ) {
perror("Failed to get a pseudo terminal");
@@ -169,6 +176,13 @@
return 1;
}
+ ourtty=open("/dev/tty", 0);
+ if( ourtty!=-1 && ioctl( ourtty, TIOCGWINSZ, &ttysize )==0 ) {
+ signal(SIGWINCH, window_resize_handler);
+
+ ioctl( masterpt, TIOCSWINSZ, &ttysize );
+ }
+
int childpid=fork();
if( childpid==0 ) {
// Child
@@ -333,3 +347,11 @@
write( dstfd, "\n", 1 );
}
+
+void window_resize_handler(int signum)
+{
+ struct winsize ttysize; // The size of our tty
+
+ if( ioctl( ourtty, TIOCGWINSZ, &ttysize )==0 )
+ ioctl( masterpt, TIOCSWINSZ, &ttysize );
+}