globus_i_callout.h

00001 /*
00002  * Copyright 1999-2006 University of Chicago
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
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 /* DEBUG MACROS */
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 /* ERROR MACROS */
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 /* GLOBUS_DONT_DOCUMENT_INTERNAL */
00234 
00235 #endif /* GLOBUS_I_CALLOUT_H */

Generated on 27 Oct 2014 for globus_callout by  doxygen 1.4.7