Commit 40568ac8 authored by Paolo \'Blaisorblade\' Giarrusso's avatar Paolo \'Blaisorblade\' Giarrusso Committed by Linus Torvalds

[PATCH] uml: catch EINTR in generic_console_write

Make generic_console_write() catch the EINTR error code and retry doing the
calls accordingly.
Signed-off-by: default avatarPaolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent cb365cb6
...@@ -27,14 +27,26 @@ int generic_console_write(int fd, const char *buf, int n, void *unused) ...@@ -27,14 +27,26 @@ int generic_console_write(int fd, const char *buf, int n, void *unused)
int err; int err;
if(isatty(fd)){ if(isatty(fd)){
tcgetattr(fd, &save); CATCH_EINTR(err = tcgetattr(fd, &save));
if (err)
goto error;
new = save; new = save;
/* The terminal becomes a bit less raw, to handle \n also as
* "Carriage Return", not only as "New Line". Otherwise, the new
* line won't start at the first column.*/
new.c_oflag |= OPOST; new.c_oflag |= OPOST;
tcsetattr(fd, TCSAFLUSH, &new); CATCH_EINTR(err = tcsetattr(fd, TCSAFLUSH, &new));
if (err)
goto error;
} }
err = generic_write(fd, buf, n, NULL); err = generic_write(fd, buf, n, NULL);
if(isatty(fd)) tcsetattr(fd, TCSAFLUSH, &save); /* Restore raw mode, in any case; we *must* ignore any error apart
* EINTR, except for debug.*/
if(isatty(fd))
CATCH_EINTR(tcsetattr(fd, TCSAFLUSH, &save));
return(err); return(err);
error:
return(-errno);
} }
static void winch_handler(int sig) static void winch_handler(int sig)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment