implement external interface to library and use it in tests. need to be

reworked a bit to use file descriptor or buffer provided to callse
This commit is contained in:
2020-02-05 12:13:26 +04:00
parent d4e9307fe1
commit 24efc4580b
5 changed files with 142 additions and 68 deletions
+91
View File
@@ -0,0 +1,91 @@
/*
* libpst.c
*
* Created on: Feb 5, 2020
* Author: nnosov
*/
#include <ucontext.h>
#include <stdio.h>
#include <stdint.h>
#include "utils/allocator.h"
#include "dwarf/dwarf_handler.h"
// allocate and initialize libpst handler.
pst_handler* pst_new_handler(ucontext_t* hctx)
{
// global
pst_alloc_init(&allocator);
pst_log_init_console(&logger);
pst_new(pst_handler, handler, hctx);
return handler;
}
// deallocate libpst handler
void pst_del_handler(pst_handler* h)
{
pst_free(h);
// global
pst_log_fini(&logger);
pst_alloc_fini(&allocator);
}
// write stack trace information to provided file descriptor
int pst_unwind_simple(pst_handler* h, FILE* fd)
{
int ret = pst_handler_unwind(h);
if(ret) {
fwrite(h->ctx.buff, 1, strlen(h->ctx.buff), fd);
return 0;
}
return -1;
}
// save stack trace information to provided buffer in RAM
int pst_unwind_simple(pst_handler* h, char* buff, uint32_t buff_size)
{
int ret = pst_handler_unwind(h);
if(ret) {
uint32_t cnt = buff_size < sizeof(h->ctx.buff) ? buff_size : sizeof(h->ctx.buff);
memcpy(buff, h->ctx.buff, cnt - 2);
buff[cnt - 1] = 0;
return 0;
}
return -1;
}
// write stack trace information to provided file descriptor
int pst_unwind_pretty(pst_handler* h, FILE* fd)
{
int ret = pst_handler_handle_dwarf(h);
if(ret) {
pst_handler_print_dwarf(h);
fwrite(h->ctx.buff, 1, strlen(h->ctx.buff), fd);
return 0;
}
return -1;
}
// save stack trace information to provided buffer in RAM
int pst_unwind_pretty(pst_handler* h, char* buff, uint32_t buff_size)
{
int ret = pst_handler_handle_dwarf(h);
if(ret) {
pst_handler_print_dwarf(h);
uint32_t cnt = buff_size < sizeof(h->ctx.buff) ? buff_size : sizeof(h->ctx.buff);
memcpy(buff, h->ctx.buff, cnt - 2);
buff[cnt - 1] = 0;
return 0;
}
return -1;
}