More EINTR handling

db4
Slava Pestov 2008-07-06 18:28:41 -05:00
parent 0bb85a1ef9
commit b1e5346179
1 changed files with 10 additions and 2 deletions

View File

@ -322,8 +322,16 @@ void safe_write(int fd, void *data, size_t size)
void safe_read(int fd, void *data, size_t size)
{
if(read(fd,data,size) != size)
fatal_error("error reading fd",errno);
ssize_t bytes = read(fd,data,size);
if(bytes < 0)
{
if(errno == EINTR)
safe_read(fd,data,size);
else
fatal_error("error reading fd",errno);
}
else if(bytes != size)
fatal_error("unexpected eof on fd",bytes);
}
void *stdin_loop(void *arg)