From 61d378f5e9c588ef4df40c48f367e5d2f39a9525 Mon Sep 17 00:00:00 2001 From: James Clarke Date: Sun, 3 Feb 2019 00:11:15 +0000 Subject: [PATCH] Re-allow direct use of nlist.n_name in Commit e8d340de ("Remove a.out support from nlist()") introduced a copy of the definition of nlist from a.out.h. However, as well as having n_name inside n_un, on the various BSDs n_name could also be accessed as a direct member of nlist, and this is made use of by FreeBSD's usr.bin/netstat/main.c. Thus we should also add the same enclosing anonymous union. [guillem@hadrons.org: - Add a minimal unit test. ] Closes: !4 Signed-off-by: Guillem Jover --- include/bsd/nlist.h | 9 ++++++--- test/nlist.c | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/bsd/nlist.h b/include/bsd/nlist.h index 8767117..89877ac 100644 --- a/include/bsd/nlist.h +++ b/include/bsd/nlist.h @@ -36,9 +36,12 @@ struct nlist { union { char *n_name; - struct n_list *n_next; - long n_strx; - } n_un; + union { + char *n_name; + struct n_list *n_next; + long n_strx; + } n_un; + }; unsigned char n_type; char n_other; short n_desc; diff --git a/test/nlist.c b/test/nlist.c index c76d9e7..82e24e9 100644 --- a/test/nlist.c +++ b/test/nlist.c @@ -66,6 +66,8 @@ main(int argc, char **argv) assert(*data_pub_ptr == 50); + assert(nl[0].n_name == nl[0].n_un.n_name); + rc = nlist(argv[0], nl); assert(rc == 0);