ptutil-swap-epoch-version-as-needed-20080327
authorDerrick Brashear <shadow@dementia.org>
Thu, 27 Mar 2008 18:39:57 +0000 (18:39 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 27 Mar 2008 18:39:57 +0000 (18:39 +0000)
LICENSE IPL10
FIXES 90869

do byteswapping of epoch and version so we print and compare sensibly

src/ptserver/pt_util.c

index e0c01b4..15694e2 100644 (file)
@@ -196,8 +196,9 @@ CommandProc(register struct cmd_syndesc *a_as, void *arock)
        fprintf(stderr, "pt_util: %s: Bad UBIK_MAGIC. Is %x should be %x\n",
                pfile, ntohl(uh->magic), UBIK_MAGIC);
     memcpy(&uv, &uh->version, sizeof(struct ubik_version));
-    if (wflag && uv.epoch == 0 && uv.counter == 0) {
-       uv.epoch = 2;           /* a ubik version of 0 or 1 has special meaning */
+
+    if (wflag && ntohl(uv.epoch) == 0 && ntohl(uv.counter) == 0) {
+       uv.epoch = htonl(2); /* a ubik version of 0 or 1 has special meaning */
        memcpy(&uh->version, &uv, sizeof(struct ubik_version));
        lseek(dbase_fd, 0, SEEK_SET);
        if (write(dbase_fd, buffer, HDRSIZE) < 0) {
@@ -206,6 +207,11 @@ CommandProc(register struct cmd_syndesc *a_as, void *arock)
            exit(1);
        }
     }
+
+    /* Now that any writeback is done, swap these */
+    uv.epoch = ntohl(uv.epoch);
+    uv.counter = ntohl(uv.counter);
+
     fprintf(stderr, "Ubik Version is: %d.%d\n", uv.epoch, uv.counter);
     if (read(dbase_fd, &prh, sizeof(struct prheader)) < 0) {
        fprintf(stderr, "pt_util: error reading %s: %s\n", pfile,
@@ -329,6 +335,10 @@ CommandProc(register struct cmd_syndesc *a_as, void *arock)
        exit(1);
     }
     uh = (struct ubik_hdr *)buffer;
+
+    uh->version.epoch = ntohl(uh->version.epoch);
+    uh->version.counter = ntohl(uh->version.counter);
+
     if ((uh->version.epoch != uv.epoch)
        || (uh->version.counter != uv.counter)) {
        fprintf(stderr,