#define _GNU_SOURCE #include #include #include #include #include #include "reporter.h" #define MAX_FRAMES 64 #define BUFFER_SIZE 4096 char* get_stack_trace() { void *array[MAX_FRAMES]; char **strings; int size, i; char *buffer = malloc(BUFFER_SIZE); if (!buffer) return NULL; buffer[0] = '\0'; size = backtrace(array, MAX_FRAMES); strings = backtrace_symbols(array, size); if (strings != NULL) { for (i = 0; i < size; i++) { strncat(buffer, strings[i], BUFFER_SIZE - strlen(buffer) - 1); strncat(buffer, "\n", BUFFER_SIZE - strlen(buffer) - 1); } free(strings); } return buffer; } char* get_system_info() { struct utsname uname_data; char *buffer = malloc(BUFFER_SIZE); if (!buffer) return NULL; if (uname(&uname_data) != 0) { snprintf(buffer, BUFFER_SIZE, "Failed to get system info"); return buffer; } snprintf(buffer, BUFFER_SIZE, "OS: %s\nNode: %s\nRelease: %s\nVersion: %s\nMachine: %s", uname_data.sysname, uname_data.nodename, uname_data.release, uname_data.version, uname_data.machine); return buffer; }