Hash :
a1d34bc0
Author :
Date :
2008-12-30T21:49:38
Support building on Mac OS X by using pthread_getspecific for TLS The Mach-O format does not permit gcc to implement the __thread TLS specification, so we must instead emulate it using a single int cell allocated from memory and stored inside of the thread specific data associated with the current pthread. What makes this tricky is git_errno must be a valid lvalue, so we really need to return a pointer to the caller and deference it as part of the git_errno macro. The GCC-specific __attribute__((constructor)) extension is used to ensure the pthread_key_t is allocated before any Git functions are executed in the library, as this is necessary to access our thread specific storage. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
#ifndef INCLUDE_git_errors_h__
#define INCLUDE_git_errors_h__
#include "common.h"
#include "thread-utils.h"
/**
* @file git/errors.h
* @brief Git error handling routines and variables
* @ingroup Git
* @{
*/
GIT_BEGIN_DECL
/** The git errno. */
#if defined(GIT_TLS)
GIT_EXTERN(int) GIT_TLS git_errno;
#elif defined(GIT_HAS_PTHREAD)
# define git_errno (*git__errno_storage())
GIT_EXTERN(int *) git__errno_storage(void);
#endif
/**
* strerror() for the Git library
* @param num The error code to explain
* @return a string explaining the error code
*/
GIT_EXTERN(const char *) git_strerror(int num);
/** @} */
GIT_END_DECL
#endif