Fix xxread false negatives

Fix #3710
This commit is contained in:
topjohnwu 2021-01-16 21:43:53 -08:00
parent f5c2d72429
commit 67e2a4720e
2 changed files with 15 additions and 8 deletions

View File

@ -27,6 +27,6 @@ android.injected.testOnly=false
kapt.incremental.apt=true kapt.incremental.apt=true
# Magisk # Magisk
magisk.versionCode=21301 magisk.versionCode=21302
magisk.ndkVersion=21d magisk.ndkVersion=21d
magisk.fullNdkVersion=21.3.6528147 magisk.fullNdkVersion=21.3.6528147

View File

@ -1,7 +1,5 @@
#include <sched.h> #include <sched.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h>
#include <pthread.h> #include <pthread.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/types.h> #include <sys/types.h>
@ -82,11 +80,20 @@ ssize_t xread(int fd, void *buf, size_t count) {
// Read exact same size as count // Read exact same size as count
ssize_t xxread(int fd, void *buf, size_t count) { ssize_t xxread(int fd, void *buf, size_t count) {
int ret = read(fd, buf, count); size_t read_sz = 0;
if (count != ret) { int ret = -1;
PLOGE("read (%zu != %d)", count, ret); while (read_sz != count && ret != 0) {
ret = read(fd, buf, count);
if (ret < 0) {
PLOGE("read");
return ret;
}
read_sz += ret;
} }
return ret; if (read_sz != count) {
PLOGE("read (%zu != %zu)", count, read_sz);
}
return read_sz;
} }
int xpipe2(int pipefd[2], int flags) { int xpipe2(int pipefd[2], int flags) {