dockapps/wmcliphist/debug.c

137 lines
1.6 KiB
C

#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);
}
*/