Disabled writing to pipe unless environment variable is set.
[aesalon.git] / src / overload / overload.c
blobb64ee0cc741637f9bee5bc7106816104cfae72f6
1 #include "overload.h"
2 #include "communication.h"
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <dlfcn.h>
6 #include <unistd.h>
8 void *(*aesalon_overload_malloc_ptr)(size_t);
9 void *(*aesalon_overload_realloc_ptr)(void *, size_t);
10 void (*aesalon_overload_free_ptr)(void *);
13 void __attribute__((constructor)) construct() {
14 aesalon_overload_malloc_ptr = dlsym(RTLD_NEXT, "malloc");
15 aesalon_overload_realloc_ptr = dlsym(RTLD_NEXT, "realloc");
16 aesalon_overload_free_ptr = dlsym(RTLD_NEXT, "free");
18 char *pipe_fd;
19 pipe_fd = getenv("AESALON_BOOTSTRAP_PIPE");
20 if(pipe_fd) {
21 sscanf(pipe_fd, "%i", &aesalon_overload_communication_pipefd);
22 aesalon_overload_communication_enabled = 1;
26 void __attribute__((destructor)) destruct() {
27 if(aesalon_overload_communication_enabled)
28 close(aesalon_overload_communication_pipefd);
31 void *malloc(size_t size) {
32 char buffer[1024];
33 void *memory = aesalon_overload_malloc_ptr(size);
34 snprintf(buffer, 1024, "malloc:%s:%x:%i\0", "<unknown scope>", memory, size);
35 aesalon_overload_send_string(buffer);
36 return memory;
39 void *realloc(void *ptr, size_t size) {
40 char buffer[1024];
41 void *memory = aesalon_overload_realloc_ptr(ptr, size);
42 snprintf(buffer, 1024, "malloc:%s:%x:%i:%x\0", "<unknown scope>", ptr, size, memory);
43 aesalon_overload_send_string(buffer);
44 return memory;
47 void free(void *ptr) {
48 char buffer[1024];
49 snprintf(buffer, 1024, "free:%s:%x\0", "<unknown scope>", ptr);
50 aesalon_overload_send_string(buffer);
51 aesalon_overload_free_ptr(ptr);