sync with tizen_2.0
[platform/framework/native/appfw.git] / src / base / FBaseResult.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file                FBaseResult.cpp
20  * @brief               This is the implementation file of Result class.
21  */
22
23 #include <stdlib.h>
24 #include <FBaseResult.h>
25 #include <FBaseErrorDefine.h>
26
27 #define ARR_ITEM_COUNT(arr)         (sizeof(arr) / sizeof(arr[0]))
28 #define ERR_TABLE_INITIALIZER(no)   {(ERR_SRC_FRAMEWORK + SET_E_CAUSE(no)),     \
29         ((ERR_SRC_FRAMEWORK + SET_E_CAUSE(no)) + ARR_ITEM_COUNT(__errTable ## no) - 1), __errTable ## no}
30
31 typedef struct
32 {
33         result rbegin;
34         result rend;
35         const char** table;
36 }ErrTableType;
37
38 static __thread result lastResult = E_SUCCESS;
39
40 static const char* E_SUCCESS_STRING = "E_SUCCESS";
41 static const char* E_FAILURE_STRING = "E_FAILURE";
42
43 const char*
44 __BinarySearchErrorTable(ErrTableType errTable[], result value, int low, int high)
45 {
46
47         while (low <= high)
48         {
49                 int mid = low + (high - low) / 2;
50                 result rbegin = errTable[mid].rbegin;
51                 result rend = errTable[mid].rend;
52
53                 if (value < rbegin)
54                 {
55                         high = mid - 1;
56                 }
57                 else if (value > rend)
58                 {
59                         low = mid + 1;
60                 }
61                 else
62                 {
63                         return errTable[mid].table[value - rbegin];
64                 }
65         }
66         if (value == E_SUCCESS)
67         {
68                 return E_SUCCESS_STRING;
69         }
70         else if (value == E_FAILURE)
71         {
72                 return E_FAILURE_STRING;
73         }
74
75         return "Unknown Error";
76 }
77
78 const char* __errTable1100[] =
79 {
80         "E_ADDRESS_CHANGED",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1100))
81         "E_ALREADY_BOUND",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1101))
82         "E_ALREADY_CONNECTED",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1102))
83         "E_ALREADY_OPENED",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1103))
84         "E_AUTHENTICATION",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1104))
85         "E_APP_NOT_INSTALLED",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1105))
86         "E_ALREADY_SET",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1106))
87         "E_ACCOUNT_ALREADY_EXIST",  //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1107))
88         "E_ACCOUNT_NOT_FOUND"       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1108))
89 };
90
91 const char* __errTable1300[] =
92 {
93         "E_CHUNKED_TRANSACTION",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1300))
94         "E_CONNECTION_BUSY",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1301))
95         "E_CONNECTION_FAILED",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1302))
96         "E_CONNECTION_RESET",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1303))
97         "E_CREDENTIAL_EXPIRED",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1304))
98         "E_CERTIFICATE_VERIFICATION_FAILED"     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1305))
99 };
100
101 const char* __errTable1400[] =
102 {
103         "E_DATA_NOT_FOUND",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1400))
104         "E_DATABASE",               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1401))
105         "E_DECODING_FAILED",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1402))
106         "E_DEVICE_BUSY",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1403))
107         "E_DEVICE_FAILED",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1404))
108         "E_DEVICE_INCOMPATIBLE",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1405))
109         "E_DEVICE_UNAVAILABLE",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1406))
110         "E_DHCP",                   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1407))
111         "E_DIMENSION_CHANGED",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1408))
112         "E_DNS",                    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1409))
113         "E_DNS_NOT_FOUND",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1410))
114         "E_DATA_NOT_ENOUGH"         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1411))
115 };
116
117 const char* __errTable1500[] =
118 {
119         "E_EFFECTS_DISABLED",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1500))
120         "E_EMPTY_BODY",             //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1501))
121         "E_ENCODING_FAILED",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1502))
122         "E_END_OF_FILE"             //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1503))
123 };
124
125 const char* __errTable1600[] =
126 {
127         "E_FDN_MODE",               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1600))
128         "E_FILE_ALREADY_EXIST",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1601))
129         "E_FILE_NOT_FOUND"          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1602))
130 };
131
132 const char* __errTable1700[] =
133 {
134         "E_GROUP_NOT_FOUND"     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1700))
135 };
136
137 const char* __errTable1800[] =
138 {
139         "E_HOST_NOT_FOUND",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1800))
140         "E_HOST_UNREACHABLE",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1801))
141         "E_HTTP_USER"               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1802))
142 };
143
144 const char* __errTable1900[] =
145 {
146         "E_ILLEGAL_ACCESS",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1900))
147         "E_IN_PROGRESS",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1901))
148         "E_INACCESSIBLE_PATH",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1902))
149         "E_INIT_FAILED",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1903))
150         "E_INSTANTIATION_FAILED",   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1904))
151         "E_INSUFFICIENT_PRIORITY",  //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1905))
152         "E_INTERRUPTED",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1906))
153         "E_INVALID_ACCOUNT",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1907))
154         "E_INVALID_ADDRESS",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1908))
155         "E_INVALID_ARG",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1909))
156         "E_INVALID_CONDITION",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1910))
157         "E_INVALID_CONNECTION",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1911))
158         "E_INVALID_CONTENT",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1912))
159         "E_INVALID_CONTEXT",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1913))
160         "E_INVALID_DATA",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1914))
161         "E_INVALID_DOMAIN",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1915))
162         "E_INVALID_ENCODING_RANGE", //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1916))
163         "E_INVALID_FORMAT",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1917))
164         "E_INVALID_HEADER",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1918))
165         "E_INVALID_KEY",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1919))
166         "E_INVALID_OPERATION",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1920))
167         "E_INVALID_PROXY",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1921))
168         "E_INVALID_SIM_STATE",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1922))
169         "E_INVALID_SERVER",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1923))
170         "E_INVALID_SESSION",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1924))
171         "E_INVALID_SOCKET",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1925))
172         "E_INVALID_STATE",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1926))
173         "E_INVALID_TRANSACTION",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1927))
174         "E_IO",                     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1928))
175         "E_NOT_JOINED",             //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1929))
176         "E_INVALID_CERTIFICATE",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1930))
177         "E_INVALID_URL",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1931))
178         "E_INVALID_USER_ID",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1932))
179         "E_INVALID_PASSWORD"        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(1933))
180
181 };
182
183 const char* __errTable2100[] =
184 {
185         "E_KEY_ALREADY_EXIST",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2100))
186         "E_KEY_NOT_FOUND"           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2101))
187 };
188
189 const char* __errTable2200[] =
190 {
191         "E_LANDMARK",               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2200))
192         "E_LIBRARY_NOT_FOUND",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2201))
193         "E_LIBRARY_NOT_LOADED",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2202))
194         "E_LINK",                   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2203))
195         "E_LOCATION",               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2204))
196         "E_LOCATION_SERVICE",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2205))
197         "E_LOCK_FAILED",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2206))
198         "E_LANGUAGE_NOT_SET",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2207))
199         "E_LOCATION_UNAVAILABLE"    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2208))
200 };
201
202 const char* __errTable2300[] =
203 {
204         "E_MAX_EXCEEDED",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2300))
205         "E_MISSING_INPUT",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2301))
206         "E_MOBILE_FAILED",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2302))
207         "E_MODEL_NOT_FOUND",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2303))
208         "E_MEMBER_ALREADY_EXIST"    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2304))
209 };
210
211 const char* __errTable2400[] =
212 {
213         "E_NETWORK_FAILED",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2400))
214         "E_NETWORK_UNAVAILABLE",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2401))
215         "E_NO_CERTIFICATE",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2402))
216         "E_NOT_A_MEMBER",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2403))
217         "E_NOT_PAIRED",             //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2404))
218         "E_NOT_RESPONDING",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2405))
219         "E_NUM_FORMAT"              //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2406))
220 };
221
222 const char* __errTable2500[] =
223 {
224         "E_OBJ_ALREADY_EXIST",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2500))
225         "E_OBJ_NOT_FOUND",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2501))
226         "E_OBJECT_LOCKED",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2502))
227         "E_ON_INITIALIZING",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2503))
228         "E_OPERATION_CANCELED",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2504))
229         "E_OPERATION_FAILED",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2505))
230         "E_OUT_OF_MEMORY",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2506))
231         "E_OUT_OF_RANGE",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2507))
232         "E_OVERFLOW",               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2508))
233         "E_OPENGL_ERROR"            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2509))
234 };
235
236 const char* __errTable2600[] =
237 {
238         "E_PAIRING_FAILED",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2600))
239         "E_PARSING_FAILED",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2601))
240         "E_PRIVILEGE_DENIED",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2602))
241         "E_PKG_NOT_INSTALLED"       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2603))
242 };
243
244 const char* __errTable2800[] =
245 {
246         "E_READ_ONLY",              //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2800))
247         "E_REJECTED",               //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2801))
248         "E_REMOTE_DEVICE_NOT_FOUND", //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2802))
249         "E_REMOVE_SERVICE_NOT_FOUND",   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2803))
250         "E_RESOURCE_UNAVAILABLE",   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2804))
251         "E_RIGHT_EXPIRED",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2805))
252         "E_RIGHT_NO_LICENSE",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2806))
253         "E_RIGHT_FUTURE_USE"           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2807))
254 };
255
256 const char* __errTable2900[] =
257 {
258         "E_SECTION_ALREADY_EXIST",  //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2900))
259         "E_SECTION_NOT_FOUND",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2901))
260         "E_SERVER",                 //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2902))
261         "E_SERVICE_BUSY",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2903))
262         "E_SERVICE_LIMITED",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2904))
263         "E_SERVICE_LOCKED",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2905))
264         "E_SERVICE_UNAVAILABLE",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2906))
265         "E_SESSION_DEACTIVATED",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2907))
266         "E_SESSION_UNAVAILABLE",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2908))
267         "E_SIZE_MISMATCH",          //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2909))
268         "E_SOCKET_USER",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2910))
269         "E_STORAGE_FULL",           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2911))
270         "E_SYMBOL_NOT_FOUND",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2912))
271         "E_SYNTAX",                 //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2913))
272         "E_SYSTEM",                 //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2914))
273         "E_SERVICE_DEACTIVATED "    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(2915))
274 };
275
276 const char* __errTable3000[] =
277 {
278         "E_TABLE_NOT_FOUND",        //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3000))
279         "E_TIMEOUT",                //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3001))
280         "E_TYPE_MISMATCH"           //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3002))
281 };
282
283 const char* __errTable3100[] =
284 {
285         "E_UNDERFLOW",              //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3100))
286         "E_UNKNOWN",                //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3101))
287         "E_UNSUPPORTED_ALGORITHM",  //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3102))
288         "E_UNSUPPORTED_CODEC",      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3103))
289         "E_UNSUPPORTED_FAMILY",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3104))
290         "E_UNSUPPORTED_FORMAT",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3105))
291         "E_UNSUPPORTED_PROTOCOL",   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3106))
292         "E_UNSUPPORTED_OPERATION",  //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3107))
293         "E_UNSUPPORTED_OPTION",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3108))
294         "E_UNSUPPORTED_SERVICE",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3109))
295         "E_UNSUPPORTED_TYPE",       //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3110))
296         "E_URL_CHANGED",            //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3111))
297         "E_USER_AGENT_NOT_ALLOWED", //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3112))
298         "E_USER_ALREADY_REGISTERED",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3113))
299         "E_USER_NOT_FOUND",         //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3114))
300         "E_USER_NOT_REGISTERED",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3115))
301         "E_UNSUPPORTED_LANGUAGE",   //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3116))
302         "E_UNSUPPORTED_VERSION",    //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3117))
303         "E_UNSUPPORTED_LOCALE",     //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3118))
304         "E_USER_NOT_CONSENTED"      //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3119))
305 };
306
307 const char* __errTable3300[] =
308 {
309         "E_WOULD_BLOCK"             //(ERR_SRC_FRAMEWORK + SET_E_CAUSE(3300))
310 };
311
312 // Add the error tables in sorted order. Then we can use binary search.
313 // else we will have to use sequential search
314 ErrTableType __gErrTable[] =
315 {
316         ERR_TABLE_INITIALIZER(1100),
317         ERR_TABLE_INITIALIZER(1300),
318         ERR_TABLE_INITIALIZER(1400),
319         ERR_TABLE_INITIALIZER(1500),
320         ERR_TABLE_INITIALIZER(1600),
321         ERR_TABLE_INITIALIZER(1700),
322         ERR_TABLE_INITIALIZER(1800),
323         ERR_TABLE_INITIALIZER(1900),
324         ERR_TABLE_INITIALIZER(2100),
325         ERR_TABLE_INITIALIZER(2200),
326         ERR_TABLE_INITIALIZER(2300),
327         ERR_TABLE_INITIALIZER(2400),
328         ERR_TABLE_INITIALIZER(2500),
329         ERR_TABLE_INITIALIZER(2600),
330         ERR_TABLE_INITIALIZER(2800),
331         ERR_TABLE_INITIALIZER(2900),
332         ERR_TABLE_INITIALIZER(3000),
333         ERR_TABLE_INITIALIZER(3100),
334         ERR_TABLE_INITIALIZER(3300)
335 };
336
337 result
338 GetLastResult(void)
339 {
340         return lastResult;
341 }
342
343 void
344 SetLastResult(result r)
345 {
346         lastResult = r;
347 }
348
349 void
350 ClearLastResult(void)
351 {
352         lastResult = E_SUCCESS;
353 }
354
355
356 const char*
357 GetErrorMessage(result value)
358 {
359         return __BinarySearchErrorTable(__gErrTable, value, 0, (ARR_ITEM_COUNT(__gErrTable) - 1));
360 }
361
362 #define MAX_CHECK_COUNT 100
363 _OSP_EXPORT_ result TransExceptionsExclusiveInternal(result r, result e, int num,...);
364
365 _OSP_EXPORT_ result TransExceptionsInclusiveInternal(result r, result e, int num,...);
366
367 result 
368 TransExceptionsExclusiveInternal(result r, result e, int num, ...)
369 {
370         va_list ap;
371         bool ref = false;
372         int count = 0;
373
374         if(r == E_SUCCESS)
375                 return r;
376
377         va_start(ap,num);
378         for(count; count < num; count++ )
379         {
380                 if (r == va_arg(ap, result))
381                 {       
382                         ref = true;
383                         break;
384                 }                       
385         }
386         va_end(ap);
387         if(ref)
388                 return r;
389         
390         return  e;
391
392 }
393
394 result 
395 TransExceptionsInclusiveInternal(result r, result e, int num, ...)
396 {
397         va_list ap;
398         bool ref = false;
399         int count = 0;
400         
401         if(r == E_SUCCESS)
402                 return r;
403
404         va_start(ap,num);
405         for(count; count < num ; count++ )
406         {
407                 if (r == va_arg(ap, result))
408                 {       
409                         ref = true;
410                         break;
411                 }                       
412         }
413         va_end(ap);
414         if(ref)
415                 return e;
416         
417         return  r;
418
419 }
420
421
422
423