00001
00013 #include <errno.h>
00014 #include <pthread.h>
00015 #include "sigsafe_internal.h"
00016
00017 #ifdef _THREAD_SAFE
00018 PRIVATE_DEF(pthread_key_t sigsafe_key_);
00019 #else
00020 PRIVATE_DEF(struct sigsafe_tsd_ *sigsafe_data_);
00021 #endif
00022
00023 ssize_t sigsafe_read_template(int fd, char *buf, size_t len) {
00024 #ifdef _THREAD_SAFE
00025 struct sigsafe_tsd_ *sigsafe_data_ = pthread_getspecific(sigsafe_key_);
00026 #endif
00027 if (sigsafe_data_ == NULL || sigsafe_data_->signal_received == 0) {
00028 return read(fd, buf, len);
00029 }
00030 return -EINTR;
00031 }