00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GLOBUS_I_CALLOUT_H
00018 #define GLOBUS_I_CALLOUT_H
00019
00020 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
00021
00028 #include "globus_callout.h"
00029
00030
00031
00032 #ifdef BUILD_DEBUG
00033
00034 extern int globus_i_callout_debug_level;
00035 extern FILE * globus_i_callout_debug_fstream;
00036
00037 #define GLOBUS_I_CALLOUT_DEBUG(_LEVEL_) \
00038 (globus_i_callout_debug_level >= (_LEVEL_))
00039
00040 #define GLOBUS_I_CALLOUT_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) \
00041 { \
00042 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
00043 { \
00044 globus_libc_fprintf _MESSAGE_; \
00045 } \
00046 }
00047
00048 #define GLOBUS_I_CALLOUT_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) \
00049 { \
00050 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
00051 { \
00052 char * _tmp_str_ = \
00053 globus_common_create_nstring _MESSAGE_; \
00054 globus_libc_fprintf(globus_i_callout_debug_fstream, \
00055 _tmp_str_); \
00056 globus_libc_free(_tmp_str_); \
00057 } \
00058 }
00059
00060 #define GLOBUS_I_CALLOUT_DEBUG_PRINT(_LEVEL_, _MESSAGE_) \
00061 { \
00062 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
00063 { \
00064 globus_libc_fprintf(globus_i_callout_debug_fstream, \
00065 _MESSAGE_); \
00066 } \
00067 }
00068
00069 #define GLOBUS_I_CALLOUT_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) \
00070 { \
00071 if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
00072 { \
00073 _OBJ_NAME_##_print_fp(globus_i_callout_debug_fstream, _OBJ_); \
00074 } \
00075 }
00076
00077 #else
00078
00079 #define GLOBUS_I_CALLOUT_DEBUG(_LEVEL_) 0
00080 #define GLOBUS_I_CALLOUT_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) {}
00081 #define GLOBUS_I_CALLOUT_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) {}
00082 #define GLOBUS_I_CALLOUT_DEBUG_PRINT(_LEVEL_, _MESSAGE_) {}
00083 #define GLOBUS_I_CALLOUT_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) {}
00084
00085 #endif
00086
00087 #define GLOBUS_I_CALLOUT_DEBUG_ENTER \
00088 GLOBUS_I_CALLOUT_DEBUG_FPRINTF( \
00089 1, (globus_i_callout_debug_fstream, \
00090 "%s entering\n", _function_name_))
00091
00092 #define GLOBUS_I_CALLOUT_DEBUG_EXIT \
00093 GLOBUS_I_CALLOUT_DEBUG_FPRINTF( \
00094 2, (globus_i_callout_debug_fstream, \
00095 "%s exiting\n", _function_name_))
00096
00097
00098
00099 #define GLOBUS_CALLOUT_ERROR_RESULT(_RESULT_, _ERRORTYPE_, _ERRSTR_) \
00100 { \
00101 char * _tmp_str_ = \
00102 globus_common_create_string _ERRSTR_; \
00103 _RESULT_ = globus_i_callout_error_result(_ERRORTYPE_, \
00104 __FILE__, \
00105 _function_name_, \
00106 __LINE__, \
00107 _tmp_str_, \
00108 NULL); \
00109 globus_libc_free(_tmp_str_); \
00110 }
00111
00112 #define GLOBUS_CALLOUT_ERROR_CHAIN_RESULT(_TOP_RESULT_, _ERRORTYPE_) \
00113 _TOP_RESULT_ = globus_i_callout_error_chain_result( \
00114 _TOP_RESULT_, \
00115 _ERRORTYPE_, \
00116 __FILE__, \
00117 _function_name_, \
00118 __LINE__, \
00119 NULL, \
00120 NULL)
00121
00122
00123 #define GLOBUS_CALLOUT_LONG_ERROR_RESULT(_RESULT_, \
00124 _ERRORTYPE_, \
00125 _ERRSTR_, \
00126 _LONG_DESC_) \
00127 { \
00128 char * _tmp_str_ = \
00129 globus_common_create_string _ERRSTR_; \
00130 _RESULT_ = globus_i_callout_error_result(_ERRORTYPE_, \
00131 __FILE__, \
00132 _function_name_, \
00133 __LINE__, \
00134 _tmp_str_, \
00135 _LONG_DESC_); \
00136 globus_libc_free(_tmp_str_); \
00137 }
00138
00139 #define GLOBUS_CALLOUT_LONG_ERROR_CHAIN_RESULT(_TOP_RESULT_, \
00140 _ERRORTYPE_, \
00141 _LONG_DESC_) \
00142 _TOP_RESULT_ = globus_i_callout_error_chain_result( \
00143 _TOP_RESULT_, \
00144 _ERRORTYPE_, \
00145 __FILE__, \
00146 _function_name_, \
00147 __LINE__, \
00148 NULL, \
00149 _LONG_DESC_)
00150
00151 #define GLOBUS_CALLOUT_MALLOC_ERROR(_RESULT_) \
00152 { \
00153 char * _tmp_str_ = \
00154 globus_l_callout_error_strings[ \
00155 GLOBUS_CALLOUT_ERROR_OUT_OF_MEMORY]; \
00156 _RESULT_ = globus_error_put( \
00157 globus_error_wrap_errno_error( \
00158 GLOBUS_CALLOUT_MODULE, \
00159 errno, \
00160 GLOBUS_CALLOUT_ERROR_OUT_OF_MEMORY, \
00161 __FILE__, \
00162 _function_name_, \
00163 __LINE__, \
00164 "%s", \
00165 _tmp_str_)); \
00166 }
00167
00168 #define GLOBUS_CALLOUT_ERRNO_ERROR_RESULT(_RESULT_, \
00169 _ERRORTYPE_, _ERRORSTR_) \
00170 { \
00171 char * _tmp_str_ = \
00172 globus_common_create_string _ERRORSTR_; \
00173 _RESULT_ = globus_error_put( \
00174 globus_error_wrap_errno_error( \
00175 GLOBUS_CALLOUT_MODULE, \
00176 errno, \
00177 _ERRORTYPE_, \
00178 __FILE__, \
00179 _function_name_, \
00180 __LINE__, \
00181 "%s", \
00182 _tmp_str_)); \
00183 globus_libc_free(_tmp_str_); \
00184 }
00185
00186 extern char * globus_l_callout_error_strings[];
00187
00188 globus_result_t
00189 globus_i_callout_error_result(
00190 int error_type,
00191 const char * filename,
00192 const char * function_name,
00193 int line_number,
00194 const char * short_desc,
00195 const char * long_desc);
00196
00197 globus_result_t
00198 globus_i_callout_error_chain_result(
00199 globus_result_t chain_result,
00200 int error_type,
00201 const char * filename,
00202 const char * function_name,
00203 int line_number,
00204 const char * short_desc,
00205 const char * long_desc);
00206
00207
00215 typedef struct globus_i_callout_handle_s
00216 {
00217 globus_hashtable_t symbol_htable;
00218 globus_hashtable_t library_htable;
00219 }
00220 globus_i_callout_handle_t;
00221
00222 typedef struct globus_i_callout_data_s
00223 {
00224 char * type;
00225 char * file;
00226 char * symbol;
00227 struct globus_i_callout_data_s * next;
00228 char ** env_args;
00229 int num_env_args;
00230 globus_bool_t mandatory;
00231 } globus_i_callout_data_t;
00232
00233 #endif
00234
00235 #endif