1*5bb525f4SRobert Mustacchi /*
2*5bb525f4SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*5bb525f4SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*5bb525f4SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*5bb525f4SRobert Mustacchi  * 1.0 of the CDDL.
6*5bb525f4SRobert Mustacchi  *
7*5bb525f4SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*5bb525f4SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*5bb525f4SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*5bb525f4SRobert Mustacchi  */
11*5bb525f4SRobert Mustacchi 
12*5bb525f4SRobert Mustacchi /*
13*5bb525f4SRobert Mustacchi  * Copyright (c) 2019, Joyent, Inc.
14*5bb525f4SRobert Mustacchi  */
15*5bb525f4SRobert Mustacchi 
16*5bb525f4SRobert Mustacchi /*
17*5bb525f4SRobert Mustacchi  * This tests that we don't end up with several copies of the same type.
18*5bb525f4SRobert Mustacchi  */
19*5bb525f4SRobert Mustacchi 
20*5bb525f4SRobert Mustacchi #include "check-common.h"
21*5bb525f4SRobert Mustacchi 
22*5bb525f4SRobert Mustacchi static check_symbol_t check_syms[] = {
23*5bb525f4SRobert Mustacchi 	{ "int", "a" },
24*5bb525f4SRobert Mustacchi 	{ "short", "b" },
25*5bb525f4SRobert Mustacchi 	{ "const char *", "c" },
26*5bb525f4SRobert Mustacchi 	{ "float", "d" },
27*5bb525f4SRobert Mustacchi 	{ "double" "e" },
28*5bb525f4SRobert Mustacchi 	{ "int", "f" },
29*5bb525f4SRobert Mustacchi 	{ "short", "g" },
30*5bb525f4SRobert Mustacchi 	{ "const char *", "h" },
31*5bb525f4SRobert Mustacchi 	{ "float", "i" },
32*5bb525f4SRobert Mustacchi 	{ "double" "j" },
33*5bb525f4SRobert Mustacchi 	{ "int", "k" },
34*5bb525f4SRobert Mustacchi 	{ "short", "l" },
35*5bb525f4SRobert Mustacchi 	{ "const char *", "m" },
36*5bb525f4SRobert Mustacchi 	{ "float", "n" },
37*5bb525f4SRobert Mustacchi 	{ "double" "o" },
38*5bb525f4SRobert Mustacchi 	{ "int", "p" },
39*5bb525f4SRobert Mustacchi 	{ "short", "q" },
40*5bb525f4SRobert Mustacchi 	{ "const char *", "r" },
41*5bb525f4SRobert Mustacchi 	{ "float", "s" },
42*5bb525f4SRobert Mustacchi 	{ "double" "t" },
43*5bb525f4SRobert Mustacchi 	{ "struct dup" "dupmain" },
44*5bb525f4SRobert Mustacchi 	{ "struct dup" "dup1" },
45*5bb525f4SRobert Mustacchi 	{ "struct dup" "dup2" },
46*5bb525f4SRobert Mustacchi 	{ "struct dup" "dup3" },
47*5bb525f4SRobert Mustacchi 	{ NULL }
48*5bb525f4SRobert Mustacchi };
49*5bb525f4SRobert Mustacchi 
50*5bb525f4SRobert Mustacchi 
51*5bb525f4SRobert Mustacchi int
main(int argc,char * argv[])52*5bb525f4SRobert Mustacchi main(int argc, char *argv[])
53*5bb525f4SRobert Mustacchi {
54*5bb525f4SRobert Mustacchi 	int i, ret = 0;
55*5bb525f4SRobert Mustacchi 
56*5bb525f4SRobert Mustacchi 	if (argc < 2) {
57*5bb525f4SRobert Mustacchi 		errx(EXIT_FAILURE, "missing test files");
58*5bb525f4SRobert Mustacchi 	}
59*5bb525f4SRobert Mustacchi 
60*5bb525f4SRobert Mustacchi 	for (i = 1; i < argc; i++) {
61*5bb525f4SRobert Mustacchi 		ctf_file_t *fp;
62*5bb525f4SRobert Mustacchi 
63*5bb525f4SRobert Mustacchi 		if ((fp = ctf_open(argv[i], &ret)) == NULL) {
64*5bb525f4SRobert Mustacchi 			warnx("failed to open %s: %s", argv[i],
65*5bb525f4SRobert Mustacchi 			    ctf_errmsg(ret));
66*5bb525f4SRobert Mustacchi 			ret = EXIT_FAILURE;
67*5bb525f4SRobert Mustacchi 			continue;
68*5bb525f4SRobert Mustacchi 		}
69*5bb525f4SRobert Mustacchi 
70*5bb525f4SRobert Mustacchi 		if (!ctftest_check_symbols(fp, check_syms)) {
71*5bb525f4SRobert Mustacchi 			ret = EXIT_FAILURE;
72*5bb525f4SRobert Mustacchi 		}
73*5bb525f4SRobert Mustacchi 
74*5bb525f4SRobert Mustacchi 		if (!ctftest_duplicates(fp)) {
75*5bb525f4SRobert Mustacchi 			ret = EXIT_FAILURE;
76*5bb525f4SRobert Mustacchi 		}
77*5bb525f4SRobert Mustacchi 
78*5bb525f4SRobert Mustacchi 		ctf_close(fp);
79*5bb525f4SRobert Mustacchi 	}
80*5bb525f4SRobert Mustacchi 
81*5bb525f4SRobert Mustacchi 	return (ret);
82*5bb525f4SRobert Mustacchi }
83