Remove building with NOCRYPTO option
[minix.git] / external / bsd / bind / dist / bin / tests / backtrace_test.c
blob71f01f38b9784b49d61d1e9e9eaf31fe95882b28
1 /* $NetBSD: backtrace_test.c,v 1.7 2014/12/10 04:37:53 christos Exp $ */
3 /*
4 * Copyright (C) 2009, 2013 Internet Systems Consortium, Inc. ("ISC")
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
19 /* Id: backtrace_test.c,v 1.4 2009/09/02 23:48:01 tbox Exp */
21 #include <config.h>
23 #include <stdio.h>
24 #include <string.h>
26 #include <isc/backtrace.h>
27 #include <isc/result.h>
29 const char *expected_symbols[] = {
30 "func3",
31 "func2",
32 "func1",
33 "main"
36 static int
37 func3() {
38 void *tracebuf[16];
39 int i, nframes;
40 int error = 0;
41 const char *fname;
42 isc_result_t result;
43 unsigned long offset;
45 result = isc_backtrace_gettrace(tracebuf, 16, &nframes);
46 if (result != ISC_R_SUCCESS) {
47 printf("isc_backtrace_gettrace failed: %s\n",
48 isc_result_totext(result));
49 return (1);
52 if (nframes < 4)
53 error++;
55 for (i = 0; i < 4 && i < nframes; i++) {
56 fname = NULL;
57 result = isc_backtrace_getsymbol(tracebuf[i], &fname, &offset);
58 if (result != ISC_R_SUCCESS) {
59 error++;
60 continue;
62 if (strcmp(fname, expected_symbols[i]) != 0)
63 error++;
66 if (error) {
67 printf("Unexpected result:\n");
68 printf(" # of frames: %d (expected: at least 4)\n", nframes);
69 printf(" symbols:\n");
70 for (i = 0; i < nframes; i++) {
71 fname = NULL;
72 result = isc_backtrace_getsymbol(tracebuf[i], &fname,
73 &offset);
74 if (result == ISC_R_SUCCESS)
75 printf(" [%d] %s\n", i, fname);
76 else {
77 printf(" [%d] %p getsymbol failed: %s\n", i,
78 tracebuf[i], isc_result_totext(result));
83 return (error);
86 static int
87 func2() {
88 return (func3());
91 static int
92 func1() {
93 return (func2());
96 int
97 main() {
98 return (func1());