- struct stat st;
- int res;
-
- /* Save copy of file. */
- stat(TEST_DBNAME, &st);
- if (snapshot_len != st.st_size) {
- snapshot = realloc(snapshot, st.st_size * 2);
- snapshot_len = st.st_size;
- }
- res = pread(fd, snapshot, snapshot_len, 0);
- if (res != snapshot_len)
- err(1, "Reading %zu bytes = %u", (size_t)snapshot_len, res);
- snapshot_uptodate = true;
+ char *contents;
+ bool same;
+
+ /* over-length read serves as length check. */
+ contents = malloc(snapshot_len+1);
+ same = pread(fd, contents, snapshot_len+1, 0) == snapshot_len
+ && is_same(snapshot, contents, snapshot_len);
+ free(contents);
+ return same;