2 #ifndef GLOBUS_I_CALLOUT_H
3 #define GLOBUS_I_CALLOUT_H
5 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
19 extern int globus_i_callout_debug_level;
20 extern FILE * globus_i_callout_debug_fstream;
22 #define GLOBUS_I_CALLOUT_DEBUG(_LEVEL_) \
23 (globus_i_callout_debug_level >= (_LEVEL_))
25 #define GLOBUS_I_CALLOUT_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) \
27 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
29 globus_libc_fprintf _MESSAGE_; \
33 #define GLOBUS_I_CALLOUT_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) \
35 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
38 globus_common_create_nstring _MESSAGE_; \
39 globus_libc_fprintf(globus_i_callout_debug_fstream, \
41 globus_libc_free(_tmp_str_); \
45 #define GLOBUS_I_CALLOUT_DEBUG_PRINT(_LEVEL_, _MESSAGE_) \
47 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
49 globus_libc_fprintf(globus_i_callout_debug_fstream, \
54 #define GLOBUS_I_CALLOUT_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) \
56 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
58 _OBJ_NAME_##_print_fp(globus_i_callout_debug_fstream, _OBJ_); \
64 #define GLOBUS_I_CALLOUT_DEBUG(_LEVEL_) 0
65 #define GLOBUS_I_CALLOUT_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) {}
66 #define GLOBUS_I_CALLOUT_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) {}
67 #define GLOBUS_I_CALLOUT_DEBUG_PRINT(_LEVEL_, _MESSAGE_) {}
68 #define GLOBUS_I_CALLOUT_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) {}
72 #define GLOBUS_I_CALLOUT_DEBUG_ENTER \
73 GLOBUS_I_CALLOUT_DEBUG_FPRINTF( \
74 1, (globus_i_callout_debug_fstream, \
75 "%s entering\n", _function_name_))
77 #define GLOBUS_I_CALLOUT_DEBUG_EXIT \
78 GLOBUS_I_CALLOUT_DEBUG_FPRINTF( \
79 2, (globus_i_callout_debug_fstream, \
80 "%s exiting\n", _function_name_))
84 #define GLOBUS_CALLOUT_ERROR_RESULT(_RESULT_, _ERRORTYPE_, _ERRSTR_) \
87 globus_common_create_string _ERRSTR_; \
88 _RESULT_ = globus_i_callout_error_result(_ERRORTYPE_, \
94 globus_libc_free(_tmp_str_); \
97 #define GLOBUS_CALLOUT_ERROR_CHAIN_RESULT(_TOP_RESULT_, _ERRORTYPE_) \
98 _TOP_RESULT_ = globus_i_callout_error_chain_result( \
108 #define GLOBUS_CALLOUT_LONG_ERROR_RESULT(_RESULT_, \
114 globus_common_create_string _ERRSTR_; \
115 _RESULT_ = globus_i_callout_error_result(_ERRORTYPE_, \
121 globus_libc_free(_tmp_str_); \
124 #define GLOBUS_CALLOUT_LONG_ERROR_CHAIN_RESULT(_TOP_RESULT_, \
127 _TOP_RESULT_ = globus_i_callout_error_chain_result( \
136 #define GLOBUS_CALLOUT_MALLOC_ERROR(_RESULT_) \
139 globus_l_callout_error_strings[ \
140 GLOBUS_CALLOUT_ERROR_OUT_OF_MEMORY]; \
141 _RESULT_ = globus_error_put( \
142 globus_error_wrap_errno_error( \
143 GLOBUS_CALLOUT_MODULE, \
145 GLOBUS_CALLOUT_ERROR_OUT_OF_MEMORY, \
153 #define GLOBUS_CALLOUT_ERRNO_ERROR_RESULT(_RESULT_, \
154 _ERRORTYPE_, _ERRORSTR_) \
157 globus_common_create_string _ERRORSTR_; \
158 _RESULT_ = globus_error_put( \
159 globus_error_wrap_errno_error( \
160 GLOBUS_CALLOUT_MODULE, \
168 globus_libc_free(_tmp_str_); \
171 extern char * globus_l_callout_error_strings[];
174 globus_i_callout_error_result(
176 const char * filename,
177 const char * function_name,
179 const char * short_desc,
180 const char * long_desc);
183 globus_i_callout_error_chain_result(
184 globus_result_t chain_result,
186 const char * filename,
187 const char * function_name,
189 const char * short_desc,
190 const char * long_desc);
200 typedef struct globus_i_callout_handle_s
202 globus_hashtable_t symbol_htable;
203 globus_hashtable_t library_htable;
205 globus_i_callout_handle_t;
207 typedef struct globus_i_callout_data_s
212 struct globus_i_callout_data_s * next;
215 globus_bool_t mandatory;
216 } globus_i_callout_data_t;
Globus Callout Infrastructure.