[Libguestfs] [PATCH 5/13] hivex: Move header checksum code into a function.
Richard W.M. Jones
rjones at redhat.com
Thu Jan 28 10:17:58 UTC 2010
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top
-------------- next part --------------
>From d19d554663a20b40a06e7b126f8110490280ae2b Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at redhat.com>
Date: Mon, 18 Jan 2010 17:56:13 +0000
Subject: [PATCH 05/13] hivex: Move header checksum code into a function.
This function can be reused later.
---
hivex/hivex.c | 24 ++++++++++++++++--------
1 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/hivex/hivex.c b/hivex/hivex.c
index cb6c772..cb6fc62 100644
--- a/hivex/hivex.c
+++ b/hivex/hivex.c
@@ -262,6 +262,21 @@ struct ntreg_vk_record {
char name[1]; /* key name follows here */
} __attribute__((__packed__));
+static uint32_t
+header_checksum (hive_h *h)
+{
+ uint32_t *daddr = (uint32_t *) h->addr;
+ size_t i;
+ uint32_t sum = 0;
+
+ for (i = 0; i < 0x1fc / 4; ++i) {
+ sum ^= le32toh (*daddr);
+ daddr++;
+ }
+
+ return sum;
+}
+
hive_h *
hivex_open (const char *filename, int flags)
{
@@ -340,14 +355,7 @@ hivex_open (const char *filename, int flags)
goto error;
/* Header checksum. */
- uint32_t *daddr = (uint32_t *) h->addr;
- size_t i;
- uint32_t sum = 0;
- for (i = 0; i < 0x1fc / 4; ++i) {
- sum ^= le32toh (*daddr);
- daddr++;
- }
-
+ uint32_t sum = header_checksum (h);
if (sum != le32toh (h->hdr->csum)) {
fprintf (stderr, "hivex: %s: bad checksum in hive header\n", filename);
errno = EINVAL;
--
1.6.5.2
More information about the Libguestfs
mailing list