globus_callout  3.19
 All Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
globus_i_callout.h
1 
2 #ifndef GLOBUS_I_CALLOUT_H
3 #define GLOBUS_I_CALLOUT_H
4 
5 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
6 
13 #include "globus_callout.h"
14 
15 /* DEBUG MACROS */
16 
17 #ifdef BUILD_DEBUG
18 
19 extern int globus_i_callout_debug_level;
20 extern FILE * globus_i_callout_debug_fstream;
21 
22 #define GLOBUS_I_CALLOUT_DEBUG(_LEVEL_) \
23  (globus_i_callout_debug_level >= (_LEVEL_))
24 
25 #define GLOBUS_I_CALLOUT_DEBUG_FPRINTF(_LEVEL_, _MESSAGE_) \
26  { \
27  if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
28  { \
29  globus_libc_fprintf _MESSAGE_; \
30  } \
31  }
32 
33 #define GLOBUS_I_CALLOUT_DEBUG_FNPRINTF(_LEVEL_, _MESSAGE_) \
34  { \
35  if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
36  { \
37  char * _tmp_str_ = \
38  globus_common_create_nstring _MESSAGE_; \
39  globus_libc_fprintf(globus_i_callout_debug_fstream, \
40  _tmp_str_); \
41  globus_libc_free(_tmp_str_); \
42  } \
43  }
44 
45 #define GLOBUS_I_CALLOUT_DEBUG_PRINT(_LEVEL_, _MESSAGE_) \
46  { \
47  if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
48  { \
49  globus_libc_fprintf(globus_i_callout_debug_fstream, \
50  _MESSAGE_); \
51  } \
52  }
53 
54 #define GLOBUS_I_CALLOUT_DEBUG_PRINT_OBJECT(_LEVEL_, _OBJ_NAME_, _OBJ_) \
55  { \
56  if (GLOBUS_I_CALLOUT_DEBUG(_LEVEL_)) \
57  { \
58  _OBJ_NAME_##_print_fp(globus_i_callout_debug_fstream, _OBJ_); \
59  } \
60  }
61 
62 #else
63 
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_) {}
69 
70 #endif
71 
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_))
76 
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_))
81 
82 /* ERROR MACROS */
83 
84 #define GLOBUS_CALLOUT_ERROR_RESULT(_RESULT_, _ERRORTYPE_, _ERRSTR_) \
85  { \
86  char * _tmp_str_ = \
87  globus_common_create_string _ERRSTR_; \
88  _RESULT_ = globus_i_callout_error_result(_ERRORTYPE_, \
89  __FILE__, \
90  _function_name_, \
91  __LINE__, \
92  _tmp_str_, \
93  NULL); \
94  globus_libc_free(_tmp_str_); \
95  }
96 
97 #define GLOBUS_CALLOUT_ERROR_CHAIN_RESULT(_TOP_RESULT_, _ERRORTYPE_) \
98  _TOP_RESULT_ = globus_i_callout_error_chain_result( \
99  _TOP_RESULT_, \
100  _ERRORTYPE_, \
101  __FILE__, \
102  _function_name_, \
103  __LINE__, \
104  NULL, \
105  NULL)
106 
107 
108 #define GLOBUS_CALLOUT_LONG_ERROR_RESULT(_RESULT_, \
109  _ERRORTYPE_, \
110  _ERRSTR_, \
111  _LONG_DESC_) \
112  { \
113  char * _tmp_str_ = \
114  globus_common_create_string _ERRSTR_; \
115  _RESULT_ = globus_i_callout_error_result(_ERRORTYPE_, \
116  __FILE__, \
117  _function_name_, \
118  __LINE__, \
119  _tmp_str_, \
120  _LONG_DESC_); \
121  globus_libc_free(_tmp_str_); \
122  }
123 
124 #define GLOBUS_CALLOUT_LONG_ERROR_CHAIN_RESULT(_TOP_RESULT_, \
125  _ERRORTYPE_, \
126  _LONG_DESC_) \
127  _TOP_RESULT_ = globus_i_callout_error_chain_result( \
128  _TOP_RESULT_, \
129  _ERRORTYPE_, \
130  __FILE__, \
131  _function_name_, \
132  __LINE__, \
133  NULL, \
134  _LONG_DESC_)
135 
136 #define GLOBUS_CALLOUT_MALLOC_ERROR(_RESULT_) \
137  { \
138  char * _tmp_str_ = \
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, \
144  errno, \
145  GLOBUS_CALLOUT_ERROR_OUT_OF_MEMORY, \
146  __FILE__, \
147  _function_name_, \
148  __LINE__, \
149  "%s", \
150  _tmp_str_)); \
151  }
152 
153 #define GLOBUS_CALLOUT_ERRNO_ERROR_RESULT(_RESULT_, \
154  _ERRORTYPE_, _ERRORSTR_) \
155  { \
156  char * _tmp_str_ = \
157  globus_common_create_string _ERRORSTR_; \
158  _RESULT_ = globus_error_put( \
159  globus_error_wrap_errno_error( \
160  GLOBUS_CALLOUT_MODULE, \
161  errno, \
162  _ERRORTYPE_, \
163  __FILE__, \
164  _function_name_, \
165  __LINE__, \
166  "%s", \
167  _tmp_str_)); \
168  globus_libc_free(_tmp_str_); \
169  }
170 
171 extern char * globus_l_callout_error_strings[];
172 
173 globus_result_t
174 globus_i_callout_error_result(
175  int error_type,
176  const char * filename,
177  const char * function_name,
178  int line_number,
179  const char * short_desc,
180  const char * long_desc);
181 
182 globus_result_t
183 globus_i_callout_error_chain_result(
184  globus_result_t chain_result,
185  int error_type,
186  const char * filename,
187  const char * function_name,
188  int line_number,
189  const char * short_desc,
190  const char * long_desc);
191 
192 
200 typedef struct globus_i_callout_handle_s
201 {
202  globus_hashtable_t symbol_htable;
203  globus_hashtable_t library_htable;
204 }
205 globus_i_callout_handle_t;
206 
207 typedef struct globus_i_callout_data_s
208 {
209  char * type;
210  char * file;
211  char * symbol;
212  struct globus_i_callout_data_s * next;
213  char ** env_args;
214  int num_env_args;
215  globus_bool_t mandatory;
216 } globus_i_callout_data_t;
217 
218 #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */
219 
220 #endif /* GLOBUS_I_CALLOUT_H */
Globus Callout Infrastructure.