1/*-
2 * Copyright (c) 2004 Michael Bushkov <bushman@rsu.ru>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 */
27
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD$");
30
31#include <stdio.h>
32
33#include "debug.h"
34
35static	int	trace_level = 0;
36static	int	trace_level_bk = 0;
37
38void
39nscd_trace_in(const char *s, const char *f, int l)
40{
41	int i;
42	if (trace_level < TRACE_WANTED)
43	{
44		for (i = 0; i < trace_level; ++i)
45			printf("\t");
46
47		printf("=> %s\n", s);
48	}
49
50	++trace_level;
51}
52
53void
54nscd_trace_point(const char *f, int l)
55{
56	int i;
57
58	if (trace_level < TRACE_WANTED)
59	{
60		for (i = 0; i < trace_level - 1; ++i)
61			printf("\t");
62
63		printf("= %s: %d\n", f, l);
64	}
65}
66
67void
68nscd_trace_msg(const char *msg, const char *f, int l)
69{
70	int i;
71
72	if (trace_level < TRACE_WANTED)
73	{
74		for (i = 0; i < trace_level - 1; ++i)
75			printf("\t");
76
77		printf("= MSG %s, %s: %d\n", msg, f, l);
78	}
79}
80
81void
82nscd_trace_ptr(const char *desc, const void *p, const char *f, int l)
83{
84	int i;
85
86	if (trace_level < TRACE_WANTED)
87	{
88		for (i = 0; i < trace_level - 1; ++i)
89			printf("\t");
90
91		printf("= PTR %s: %p, %s: %d\n", desc, p, f, l);
92	}
93}
94
95void
96nscd_trace_int(const char *desc, int i, const char *f, int l)
97{
98	int j;
99
100	if (trace_level < TRACE_WANTED)
101	{
102		for (j = 0; j < trace_level - 1; ++j)
103			printf("\t");
104
105		printf("= INT %s: %i, %s: %d\n",desc, i, f, l);
106	}
107}
108
109void
110nscd_trace_str(const char *desc, const char *s, const char *f, int l)
111{
112	int i;
113
114	if (trace_level < TRACE_WANTED)
115	{
116		for (i = 0; i < trace_level - 1; ++i)
117			printf("\t");
118
119		printf("= STR %s: '%s', %s: %d\n", desc, s, f, l);
120	}
121}
122
123void
124nscd_trace_out(const char *s, const char *f, int l)
125{
126	int i;
127
128	--trace_level;
129	if (trace_level < TRACE_WANTED)
130	{
131		for (i = 0; i < trace_level; ++i)
132			printf("\t");
133
134		printf("<= %s\n", s);
135	}
136}
137
138void
139nscd_trace_on(void)
140{
141	trace_level = trace_level_bk;
142	trace_level_bk = 0;
143}
144
145void
146nscd_trace_off(void)
147{
148	trace_level_bk = trace_level;
149	trace_level = 1024;
150}
151