libevdev: enforce state resync if SYN_DROPPED happens

BUG=chrome-os-partner:20471
TEST=none; don't know how to trigger it yet

Change-Id: Icfdafb64ceb7e7ac27ad80b16570a9f3c4d503e2
Reviewed-on: https://gerrit.chromium.org/gerrit/60209
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
Commit-Queue: Chung-yih Wang <cywang@chromium.org>
Tested-by: Chung-yih Wang <cywang@chromium.org>
diff --git a/src/libevdev.c b/src/libevdev.c
index a57ff94..2e0ecc2 100644
--- a/src/libevdev.c
+++ b/src/libevdev.c
@@ -61,7 +61,7 @@
   do {
     len = read(evdev->fd, &ev, sizeof(ev));
     if (len <= 0)
-      return errno;
+      break;
 
     /* Read as many whole struct input_event objects as we can into the
        circular buffer */
@@ -75,7 +75,7 @@
 
     /* kernel always delivers complete events, so len must be sizeof *ev */
     if (len % sizeof(*ev))
-      return errno;
+      break;
 
     /* Process events ... */
     for (i = 0; i < len / sizeof(ev[0]); i++) {
@@ -86,7 +86,7 @@
         continue;
       } else if (timercmp(&ev[i].time, &evdev->after_sync_time, >)) {
         /* Event_Process returns TRUE if SYN_DROPPED detected */
-        sync_evdev_state = Event_Process(evdev, &ev[i]);
+        sync_evdev_state |= Event_Process(evdev, &ev[i]);
       } else {
         /* If the event occurred during sync, then sync again */
         sync_evdev_state = true;