diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/appl/bsd/ChangeLog | 5 | ||||
| -rw-r--r-- | src/appl/bsd/krlogin.c | 19 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/appl/bsd/ChangeLog b/src/appl/bsd/ChangeLog index bbdf547dc..6c409afaa 100644 --- a/src/appl/bsd/ChangeLog +++ b/src/appl/bsd/ChangeLog @@ -1,3 +1,8 @@ +2002-05-22 Ken Raeburn <raeburn@mit.edu> + + * krlogin.c (oob): Loop reading data until we actually reach the + URG marker. + 2002-03-26 Ken Raeburn <raeburn@mit.edu> * defines.h (FAI_PREFIX): Don't define. diff --git a/src/appl/bsd/krlogin.c b/src/appl/bsd/krlogin.c index 783129897..c497dc2fb 100644 --- a/src/appl/bsd/krlogin.c +++ b/src/appl/bsd/krlogin.c @@ -1469,20 +1469,25 @@ int server_message(mark) void oob() { char mark; - char waste[RLOGIN_BUFSIZ]; - int atmark; + static char waste[RLOGIN_BUFSIZ]; + int atmark, n; mark = 0; recv(rem, &mark, 1, MSG_OOB); if (server_message(mark)) { - if (ioctl(rem, SIOCATMARK, &atmark) < 0) { - perror("ioctl"); - return; + for (;;) { + if (ioctl(rem, SIOCATMARK, &atmark) < 0) { + perror("ioctl"); + return; + } + if (atmark) + break; + n = read(rem, waste, sizeof (waste)); + if (n <= 0) + break; } - if (!atmark) - read(rem, waste, sizeof (waste)); } } |
