>Приведите полный минимальный код который не компилится. Тест-пример.
>Кстати, зачем имена функций и переменных с подчерка начинаются? Локалиные функции и глобальные, не экспортируемые переменные я подчеркиваю - чтобы в будующем понятно было, когда забудется что писал.
pthread_key_t _key;
pthread_once_t _key_once = PTHREAD_ONCE_INIT;
b_error_t *
b_error_init (void) {
b_error_t *error;
if ((error = (b_error_t *) pthread_getspecific (_key)) == NULL) {
if ((error = (b_error_t *) malloc (sizeof (b_error_t))) == NULL) {
b_logger_it ("b_error: can't allocate memmory for b_error struct: %s.", strerror (errno));
return NULL;
}
pthread_once (&_key_once, _key_create);
pthread_setspecific (_key, error);
}
memset (error, 0, sizeof (b_error_t));
return error;
}
static void
_key_create (void) {
pthread_key_create (&_key, _key_destruct);
return;
}
static void
_key_destruct (void *err) {
b_error_t *error = (b_error_t *) err;
if (!error->msg)
free (error->msg);
free (error);
return;
}
Если остальное закомментировать - ошибки при компиляции не изменяться.