[Libguestfs] [hivex] [PATCH 1/2] hivex: Expose hive major and minor version
Richard W.M. Jones
rjones at redhat.com
Thu Jan 5 14:00:49 UTC 2012
On Mon, Dec 12, 2011 at 09:59:18PM -0800, Alex Nelson wrote:
> The major and minor version were being reported in a debug message.
> This patch adds the version information to the ABI and reports with
> hivexml.
> + "major_version", (RInt32, [AHive]),
> + "return the major version of the hive",
> + "\
> +Return major version stored in the hive header, -1 on error.";
You don't need to say what it returns on error, since the generator
will do this.
That's the theory. Unfortunately the generated code for RInt32 is
wrong; although the only existing function that returns RInt32
(hivex_value_dword) returns -1 on error *and* sets errno, the
generator doesn't document this. You'll need a small and simple patch
to the generator to fix this.
> + /* Check minor version; if unable to decode, terminate. */
> + int32_t minor_ver = hivex_minor_version (h);
> + if (minor_ver < 0) {
> + fprintf (stderr,
> + "hivex: %s: could not decode hive minor version\n",
> + filename);
> + errno = EINVAL;
> + goto error;
hivex_major_version should set the errno (see below), so you shouldn't
set it here ...
> +int32_t
> +hivex_major_version (hive_h *h)
> +{
> + return (h && h->hdr) ? (int32_t) le32toh (h->hdr->major_ver) : -1;
> +}
I think these two functions should set errno on error, so:
int32_t
hivex_major_version (hive_h *h)
{
if (!h || !h->hdr) {
errno = EINVAL;
return -1;
}
return le32toh (h->hdr->major_ver);
}
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list