89 #include <lal/LALConfig.h>
94 #include <lal/LALMalloc.h>
95 #include <lal/LALDatatypes.h>
96 #include <lal/LALError.h>
98 #include <lal/XLALGSL.h>
100 #include <gsl/gsl_errno.h>
113 const char *
file,
int line,
int errnum);
115 #define CALLGSL( statement, statusptr ) \
118 LALStatus *saveLALGSLGlobalStatusPtr_; \
119 gsl_error_handler_t *saveGSLErrorHandler_; \
120 if ( !( (statusptr)->statusPtr ) ) \
121 { ABORT( (statusptr), -8, "CALLGSL: null status pointer pointer" ); } \
122 saveGSLErrorHandler_ = gsl_set_error_handler( LALGSLErrorHandler ); \
123 saveLALGSLGlobalStatusPtr_ = lalGSLGlobalStatusPtr; \
124 lalGSLGlobalStatusPtr = (statusptr)->statusPtr; \
126 lalGSLGlobalStatusPtr = saveLALGSLGlobalStatusPtr_; \
127 gsl_set_error_handler( saveGSLErrorHandler_ ); \
130 lalAbortHook( "Abort: CALLGSL, file %s, line %d\n" \
131 " Null status pointer passed to CALLGSL\n", \
135 #define TRYGSL( statement, statusptr ) \
138 LALStatus *saveLALGSLGlobalStatusPtr_; \
139 gsl_error_handler_t *saveGSLErrorHandler_; \
140 if ( !( (statusptr)->statusPtr ) ) \
141 { ABORT( (statusptr), -8, "CALLGSL: null status pointer pointer" ); } \
142 saveGSLErrorHandler_ = gsl_set_error_handler( LALGSLErrorHandler ); \
143 saveLALGSLGlobalStatusPtr_ = lalGSLGlobalStatusPtr; \
144 lalGSLGlobalStatusPtr = (statusptr)->statusPtr; \
146 lalGSLGlobalStatusPtr = saveLALGSLGlobalStatusPtr_; \
147 gsl_set_error_handler( saveGSLErrorHandler_ ); \
148 if ( (statusptr)->statusPtr->statusCode ) \
150 SETSTATUS( statusptr, -1, "Recursive error" ); \
151 (void) LALError( statusptr, "Statement \"" #statement "\" failed:" ); \
152 (void) LALTrace( statusptr, 1 ); \
157 lalAbortHook( "Abort: CALLGSL, file %s, line %d\n" \
158 " Null status pointer passed to CALLGSL\n", \
163 #elif defined(__cplusplus)
void LALGSLErrorHandler(const char *reason, const char *file, int line, int errnum)
LALStatus * lalGSLGlobalStatusPtr
LAL status structure, see The LALStatus structure for more details.