chiark / gitweb /
realtime: persist: header check failures tell us which item did not match
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 9 Jan 2011 13:31:01 +0000 (13:31 +0000)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 9 Jan 2011 13:31:01 +0000 (13:31 +0000)
hostside/persist.c

index e70eb232ca9fb81468154e46e8bbdbcb46c68b37..9dd90b852f97476ffa5bd6f0c7127531bf8f236f 100644 (file)
@@ -346,11 +346,13 @@ static void phi_load(void *object, size_t sz, int *offset) {
   *offset += sz;
 }
 
-static void phi_check(const void *expected, size_t sz, int *offset) {
+static void phi_check(const void *expected, size_t sz,
+                     int *offset, const char *what) {
   Byte actual[sz];
 
   phi_load(actual, sz, offset);
-  if (memcmp(actual, expected, sz)) die("header magic check failed");
+  if (memcmp(actual, expected, sz))
+    die("header magic check failed, in `%s'", what);
 }
   
 static void persist_mapread(void) {
@@ -360,7 +362,7 @@ static void persist_mapread(void) {
   r= fstat(0, &stab);  if (r) diee("could not fstat persist data file");
   if (!(stab.st_mode & 0111)) die("persist data file is not executable");
 
-#define PHI_CHECK(x) phi_check(&(x), sizeof(x), &offset);
+#define PHI_CHECK(x) phi_check(&(x), sizeof(x), &offset, STR(x));
 #define PHI_LOAD(x) phi_load(&(x), sizeof(x), &offset);
   DO_PERSIST_HEADER_ITEMS(PHI_CHECK, PHI_LOAD, PHI_LOAD)