libbb: Converted safe_read to safe_write format
Changed safe_read to be symmetrical to safe_write, it shall never return EINTR because it calls read multiple times, the error is considered transient. function old new delta safe_read 44 57 +13 Signed-off-by: Martin Lewis <martin.lewis.x84@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
ad27d44ebe
commit
dd46861282
12
libbb/read.c
12
libbb/read.c
@ -12,9 +12,17 @@ ssize_t FAST_FUNC safe_read(int fd, void *buf, size_t count)
|
|||||||
{
|
{
|
||||||
ssize_t n;
|
ssize_t n;
|
||||||
|
|
||||||
do {
|
for (;;) {
|
||||||
n = read(fd, buf, count);
|
n = read(fd, buf, count);
|
||||||
} while (n < 0 && errno == EINTR);
|
if (n >= 0 || errno != EINTR)
|
||||||
|
break;
|
||||||
|
/* Some callers set errno=0, are upset when they see EINTR.
|
||||||
|
* Returning EINTR is wrong since we retry read(),
|
||||||
|
* the "error" was transient.
|
||||||
|
*/
|
||||||
|
errno = 0;
|
||||||
|
/* repeat the read() */
|
||||||
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user