[Libguestfs] [PATCH] Report last-modified time of hive root and nodes

Alex‎ Nelson ajnelson at cs.ucsc.edu
Wed Aug 10 18:03:21 UTC 2011


On Aug 10, 2011, at 02:44 , Richard W.M. Jones wrote:

> On Tue, Aug 09, 2011 at 09:54:40PM -0700, Alex‎ Nelson wrote:
>> The infrastructure for modified-time reporting has been essentially
>> unused.  These changes report the registry time by treating the
>> time fields as Windows filetime fields stored in little-Endian
>> (which means they can be treated as a single 64-bit little-Endian
>> integer).  Some of the code changes necessary include:
>> 
>> * Exposing the hive_h structure in the hivex header file (via
>>   generator.ml)
> 
> You can't make the hive_h internal structure visible in the header
> file.  I don't understand why you'd want callers to be delving into
> the internals of the handle anyway.  What's the reason for this
> change?
The reason for this change was to expose some of the handle's fields.  I wasn't sure how to detect being at the root node.  It also looked like a good place to stash the last-modified time of the root node.  With your ABI suggestions below, I think I have a better way that doesn't muck with the handle structure.

> 
>> * Adding an additional argument to the node_start function, which
>>   should cause no complications since the change is specific to the
>>   C API.
> 
> This is a change to the C ABI, which is not allowed.  Instead:
> 
> Add a new node_start field to the hivex_visitor struct.  (Obviously
> call it something different, like node_start2 or whatever, and it has
> to be added to the end of the current struct).
> 
> In the code you can differentiate between whether the caller supplied
> the old function or the new function:
> 
>  if (vtor->node_start2) {
>     // call new vtor->node_start2 with extra argument
>  } else if (vtor->node_start) {
>     // call old vtor->node_start
>  }

Thank you, I'll adjust my changes to use differently-named functions.  Is it acceptable style to you to have these become Java-like wrapper functions, e.g.:

static int
node_start_with_time (hive_h *h, void *writer_v, hive_node_h node, const char *name, const char *last_modified)
{
  //Body:  the node_start function as it is now, augmented with null-checking work on last_modified
}

static int
node_start (hive_h *h, void *writer_v, hive_node_h node, const char *name, const char *last_modified)
{
  return node_start_with_time (h, write_v, node, name, NULL);
}

This preserves the C ABI, and prevents code duplication.

> 
> The last_modified changes in themselves seem quite reasonable to me,
> but this patch cannot be applied as-is.

I should have patch version 2 out soon.  Thanks!

--Alex

> 
> Rich.




More information about the Libguestfs mailing list