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#include <stdio.h>
30
31#include "debug.h"
32
33static	int	trace_level = 0;
34static	int	trace_level_bk = 0;
35
36void
37nscd_trace_in(const char *s, const char *f, int l)
38{
39	int i;
40	if (trace_level < TRACE_WANTED)
41	{
42		for (i = 0; i < trace_level; ++i)
43			printf("\t");
44
45		printf("=> %s\n", s);
46	}
47
48	++trace_level;
49}
50
51void
52nscd_trace_point(const char *f, int l)
53{
54	int i;
55
56	if (trace_level < TRACE_WANTED)
57	{
58		for (i = 0; i < trace_level - 1; ++i)
59			printf("\t");
60
61		printf("= %s: %d\n", f, l);
62	}
63}
64
65void
66nscd_trace_msg(const char *msg, const char *f, int l)
67{
68	int i;
69
70	if (trace_level < TRACE_WANTED)
71	{
72		for (i = 0; i < trace_level - 1; ++i)
73			printf("\t");
74
75		printf("= MSG %s, %s: %d\n", msg, f, l);
76	}
77}
78
79void
80nscd_trace_ptr(const char *desc, const void *p, const char *f, int l)
81{
82	int i;
83
84	if (trace_level < TRACE_WANTED)
85	{
86		for (i = 0; i < trace_level - 1; ++i)
87			printf("\t");
88
89		printf("= PTR %s: %p, %s: %d\n", desc, p, f, l);
90	}
91}
92
93void
94nscd_trace_int(const char *desc, int i, const char *f, int l)
95{
96	int j;
97
98	if (trace_level < TRACE_WANTED)
99	{
100		for (j = 0; j < trace_level - 1; ++j)
101			printf("\t");
102
103		printf("= INT %s: %i, %s: %d\n",desc, i, f, l);
104	}
105}
106
107void
108nscd_trace_str(const char *desc, const char *s, const char *f, int l)
109{
110	int i;
111
112	if (trace_level < TRACE_WANTED)
113	{
114		for (i = 0; i < trace_level - 1; ++i)
115			printf("\t");
116
117		printf("= STR %s: '%s', %s: %d\n", desc, s, f, l);
118	}
119}
120
121void
122nscd_trace_out(const char *s, const char *f, int l)
123{
124	int i;
125
126	--trace_level;
127	if (trace_level < TRACE_WANTED)
128	{
129		for (i = 0; i < trace_level; ++i)
130			printf("\t");
131
132		printf("<= %s, %s: %d\n", s, f, l);
133	}
134}
135
136void
137nscd_trace_on(void)
138{
139	trace_level = trace_level_bk;
140	trace_level_bk = 0;
141}
142
143void
144nscd_trace_off(void)
145{
146	trace_level_bk = trace_level;
147	trace_level = 1024;
148}
149