libctf: ctf_archive_next should set the parent name consistently
authorNick Alcock <nick.alcock@oracle.com>
Thu, 18 Feb 2021 16:56:23 +0000 (16:56 +0000)
committerNick Alcock <nick.alcock@oracle.com>
Tue, 2 Mar 2021 15:08:03 +0000 (15:08 +0000)
The top level of CTF containers is a "CTF archive", which contains a
collection of named members (each a CTF dictionary).  In the serialized
file format, this is optional and skipped if the archive would have only
one member, as when no ambiguous types are present: so it is commonplace
to have a simple ctf_dict_t written out, with no archive container
wrapped around it.

But, unlike ctf_archive_iter, ctf_archive_next didn't quite handle this
case right.  It should set the name of this fake "member" to
_CTF_SECTION, i.e. ".ctf", but it was failing to do so, so callers got
an unintialized variable back instead and were understandably confused.

So set the name properly.

libctf/ChangeLog
2021-03-02  Nick Alcock  <nick.alcock@oracle.com>

* ctf-archive.c (ctf_archive_next): Set the name of parents in
single-member archives.

libctf/ChangeLog
libctf/ctf-archive.c

index da27a8fed6b171c1c14ef834bf3cdf779478988a..db44cae5ad3fe9f7f29591e6fa7c7ada6098e048 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-02  Nick Alcock  <nick.alcock@oracle.com>
+
+       * ctf-archive.c (ctf_archive_next): Set the name of parents in
+       single-member archives.
+
 2021-02-26  Alan Modra  <amodra@gmail.com>
 
        * Makefile.in: Regenerate.
index 6d9c75c9013248dd6a3ff3957c8f81e87a078505..6e1bf151f1af09cdc94471ba7e31e6e9620cbfc1 100644 (file)
@@ -1165,6 +1165,8 @@ ctf_archive_next (const ctf_archive_t *wrapper, ctf_next_t **it, const char **na
       if (!skip_parent)
        {
          wrapper->ctfi_dict->ctf_refcnt++;
+         if (name)
+           *name = _CTF_SECTION;
          return wrapper->ctfi_dict;
        }
     }
This page took 0.025596 seconds and 4 git commands to generate.