[Libguestfs] [hivex][PATCH] Increase filetime printing resolution to sub-second
Alex Nelson
ajnelson at cs.ucsc.edu
Tue Dec 13 05:52:01 UTC 2011
I tried using the nstrftime function instead of strftime; strftime didn't seem to recognize %N, even when I included gnulib's strftime.h header. Then the %N format added trailing zeroes I wasn't expecting. Unfortunately, the test-strftime.c file didn't include a test for nanosecond-resolution display, so I wasn't sure if this was a problem with my call or the %N specification.
I've produced a patch for gnulib to demonstrate what I was missing, attached. Jim, should I submit it to the bug-gnulib mailing list? It is an additional test that shows what the actual behavior of nstrftime is, though I don't know if that's what the expected behavior is. I would expect 10 nanoseconds to be reported as "0.00000001" seconds, not "0.000000010".
The second attached patch uses nstrftime, and gives funny-looking results. For example, here are the first two mtimes of hivexml's output on hivex/images/large, line 1 for the first version of this patch, line 2 using nstrftime:
<hive><mtime>2010-02-02T13:42:52.27Z</mtime><node name="$$$PROTO.HIV" root="1"><mtime>2010-02-02T13:42:44.626Z</mtime>
<hive><mtime>2010-02-02T13:42:52.270000000Z</mtime><node name="$$$PROTO.HIV" root="1"><mtime>2010-02-02T13:42:44.626000000Z</mtime>
I'm partial to the first version's output.
--Alex
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-test-strftime-Test-nanosecond-display.patch
Type: application/octet-stream
Size: 761 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20111212/dd9cb44d/attachment.obj>
-------------- next part --------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-hivexml-Increase-filetime-resolution-to-sub-second.patch
Type: application/octet-stream
Size: 2047 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20111212/dd9cb44d/attachment-0001.obj>
-------------- next part --------------
On Oct 14, 2011, at 06:32 , Richard W.M. Jones wrote:
> On Wed, Oct 12, 2011 at 08:26:15PM -0700, Alex Nelson wrote:
>> - if (strftime (ret, TIMESTAMP_BUF_LEN, "%FT%TZ", tm) == 0) {
>> + if (strftime (ret, TIMESTAMP_BUF_LEN, "%FT%T", tm) == 0) {
>
> It turns out there's a better way to do this (which I didn't know
> about either -- thanks Jim Meyering).
>
> Using the gnulib strftime replacement function, you can use %N for
> nanoseconds, and you can also use a number in front to get the
> required precision.
>
> gnulib strftime is the same function that (GNU) date uses, hence you
> can try it out:
>
> $ date '+%T.%3N' ; date '+%T.%N'
> 14:25:27.840
> 14:25:27.842204825
>
> The gnulib {,n}strftime function takes extra parameters, one of which
> carries the nanosecond value (ns). Have a look at
> hivex.git/.gnulib/tests/test-strftime.c to see an example.
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> virt-p2v converts physical machines to virtual machines. Boot with a
> live CD or over the network (PXE) and turn machines into Xen guests.
> http://et.redhat.com/~rjones/virt-p2v
More information about the Libguestfs
mailing list