Commit 61d378f5e9c588ef4df40c48f367e5d2f39a9525

James Clarke 2019-02-03T00:11:15

Re-allow direct use of nlist.n_name in <nlist.h> 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 <guillem@hadrons.org>

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);