4 #include "pthread_impl.h"
10 pthread_t self = __pthread_self();
11 if (!self->dlerror_flag) return 0;
12 self->dlerror_flag = 0;
13 char *s = self->dlerror_buf;
15 return "Dynamic linker failed to allocate memory for error message";
20 void __dl_thread_cleanup(void)
22 pthread_t self = __pthread_self();
23 if (self->dlerror_buf != (void *)-1)
24 free(self->dlerror_buf);
27 hidden void __dl_vseterr(const char *fmt, va_list ap)
31 pthread_t self = __pthread_self();
32 if (self->dlerror_buf != (void *)-1)
33 free(self->dlerror_buf);
34 size_t len = vsnprintf(0, 0, fmt, ap2);
36 char *buf = malloc(len+1);
38 vsnprintf(buf, len+1, fmt, ap);
42 self->dlerror_buf = buf;
43 self->dlerror_flag = 1;
46 hidden void __dl_seterr(const char *fmt, ...)
50 __dl_vseterr(fmt, ap);
54 static int stub_invalid_handle(void *h)
56 __dl_seterr("Invalid library handle %p", (void *)h);
60 weak_alias(stub_invalid_handle, __dl_invalid_handle);