Reading non-blocking /dev/log_* returns -EINVAL when there is no
data available. This commit fixes the service_reader_file() to
handle this situation gracefully.
Change-Id: I488361adeb11ea59719d645051e5a3f3173b6525
int max_loop_iterations = 100;
while (max_loop_iterations--) {
int r = read(reader->buf_id, buffer, sizeof buffer - 1);
- if (r == -1) {
- if (errno != EINTR && errno != EAGAIN)
- return -errno;
- } else if (r == 0) {
+ if (r == -1 && errno != EINTR)
+ return -errno;
+ else if (r == 0 || (r == -1 && errno == EAGAIN))
return 0;
- } else {
+ else {
buffer[r] = '\0';
struct logger_entry * const entry = (struct logger_entry *) buffer;
parse_androidlogger_message((struct android_logger_entry *) buffer, entry, r);