File: debug.c

package info (click to toggle)
wmcliphist 2.1-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 308 kB
  • sloc: ansic: 1,869; makefile: 47
file content (136 lines) | stat: -rw-r--r-- 1,621 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>



/* tabulators */
char		tabs[1024];


#ifdef	DBG_THREADS
#include <pthread.h>

static pthread_key_t	align_key;
static pthread_once_t	align_key_once = PTHREAD_ONCE_INIT;


static void
align_destroy(void *align)
{
	free(align);
}


static void
align_key_create()
{
	pthread_key_create(&align_key, align_destroy);
}


void
debug_init_threads()
{
	int	*new_align;

	memset(tabs, 9, 1024);

	if (!(new_align = malloc(sizeof(int))))
		abort();
	*new_align = 1;

	pthread_once(&align_key_once, align_key_create);

	pthread_setspecific(align_key, new_align);
}
#endif


/*
 * no threads
 */

static int		main_align = 1;

void
debug_init_nothreads()
{
	memset(tabs, 9, 1024);
}




void
fn_begin(char *format, ...)
{
	va_list		args;
	char		msg_buf[1024];
	char		final_msg[2048];
	int		*align;

#ifdef DBG_THREADS
		align = pthread_getspecific(align_key);
#else
		align = &main_align;
#endif

	va_start(args, format);
	vsprintf(msg_buf, format, args);
	va_end(args);

	strcat(msg_buf, " {\n");

	sprintf(final_msg, "%d: %.*s%s", getpid(), *align, tabs, msg_buf);
	fprintf(stderr, "%s", final_msg);
	(*align)++;
}


void
fn_end()
{
	int		*align;

#ifdef DBG_THREADS
		align = pthread_getspecific(align_key);
#else
		align = &main_align;
#endif

	(*align)--;

	fprintf(stderr, "%d: %.*s}\n", getpid(), *align, tabs);
}




/*
void
fn2(int i)
{
	_D(fn_begin("fn2(i = %d)", i));
	return_void();
}

int
fn1()
{
	_D(fn_begin("fn1"));
	fn2(1);
	return_val(0);
}

int
main()
{
	_D(fn_begin("main"));
	fn1();
	fn2(2);
	return_val(0);
}
*/