OSDN Git Service

Fix the IOException in wallpaper restore -- the padding isn't required at the end.
authorJoe Onorato <joeo@android.com>
Wed, 29 Jul 2009 01:23:05 +0000 (18:23 -0700)
committerJoe Onorato <joeo@android.com>
Wed, 29 Jul 2009 01:30:15 +0000 (18:30 -0700)
libs/utils/BackupData.cpp

index be04777..c51d989 100644 (file)
@@ -196,6 +196,7 @@ BackupDataReader::Status()
             } else { \
                 m_status = errno; \
             } \
+            LOGD("CHECK_SIZE failed with at line %d m_status='%s'", __LINE__, strerror(m_status)); \
             return m_status; \
         } \
     } while(0)
@@ -203,6 +204,7 @@ BackupDataReader::Status()
     do { \
         status_t err = skip_padding(); \
         if (err != NO_ERROR) { \
+            LOGD("SKIP_PADDING FAILED at line %d", __LINE__); \
             m_status = err; \
             return err; \
         } \
@@ -218,10 +220,19 @@ BackupDataReader::ReadNextHeader(bool* done, int* type)
 
     int amt;
 
-    // No error checking here, in case we're at the end of the stream.  Just let read() fail.
-    skip_padding();
+    amt = skip_padding();
+    if (amt == EIO) {
+        *done = true;
+        return NO_ERROR;
+    }
+    else if (amt != NO_ERROR) {
+        return amt;
+    }
     amt = read(m_fd, &m_header, sizeof(m_header));
     *done = m_done = (amt == 0);
+    if (*done) {
+        return NO_ERROR;
+    }
     CHECK_SIZE(amt, sizeof(m_header));
     m_pos += sizeof(m_header);
     if (type) {