1 /* This file is part of Netwib. Read and honor its license.
2 */
3
4 /*-------------------------------------------------------------*/
netwib_priv_err_purge(void)5 netwib_err netwib_priv_err_purge(void)
6 {
7 netwib_er(netwib_priv_errmsg_reinit());
8
9 errno = 0;
10 #if defined NETWIBDEF_SYSNAME_Unix
11 #if NETWIBDEF_HAVEVAR_HERRNO==1
12 h_errno = 0;
13 #endif
14 #elif defined NETWIBDEF_SYSNAME_Windows
15 WSASetLastError(0);
16 SetLastError(0);
17 #else
18 #error "Unknown value for NETWIBDEF_SYSNAME"
19 #endif
20
21 return(NETWIB_ERR_OK);
22 }
23
24 /*-------------------------------------------------------------*/
netwib_priv_err_text(netwib_err error,netwib_conststring * pc,netwib_conststring * pcfu)25 static netwib_err netwib_priv_err_text(netwib_err error,
26 netwib_conststring *pc,
27 netwib_conststring *pcfu)
28 {
29
30 *pc = NULL;
31 *pcfu = NULL;
32
33 switch(error) {
34
35 /**/
36 case NETWIB_ERR_OK:
37 *pc = "ok";
38 break;
39
40 /**/
41 case NETWIB_ERR_DATAEND:
42 *pc = "definitive end of data";
43 break;
44 case NETWIB_ERR_DATANOTAVAIL:
45 *pc = "there is no data available";
46 break;
47 case NETWIB_ERR_DATANOSPACE:
48 *pc = "no sufficient space to store data";
49 break;
50 case NETWIB_ERR_DATAOTHERTYPE:
51 *pc = "data is present but does not have the expected type";
52 break;
53 case NETWIB_ERR_DATAMISSING:
54 *pc = "more data is needed";
55 break;
56 case NETWIB_ERR_NOTFOUND:
57 *pc = "not found";
58 break;
59 case NETWIB_ERR_NOTCONVERTED:
60 *pc = "not converted";
61 break;
62 case NETWIB_ERR_ROUTELOCALDEV:
63 *pc = "the destination is a local device";
64 break;
65 case NETWIB_ERR_ROUTENOTFOUND:
66 *pc = "no route found to destination";
67 break;
68 case NETWIB_ERR_ROUTENOTETHER:
69 *pc = "Ethernet is not used to reach destination";
70 break;
71 case NETWIB_ERR_PLEASETRYNEXT:
72 *pc = "please, try next io";
73 break;
74 case NETWIB_ERR_PLEASECONSTRUCT:
75 *pc = "please, construct it";
76 break;
77 case NETWIB_ERR_PLEASELOOPTIME:
78 *pc = "please, loop to reach time";
79 break;
80
81 /**/
82 case NETWIB_ERR_PAINVALIDTYPE:
83 *pc = "invalid type";
84 break;
85 case NETWIB_ERR_PAINVALIDPOS:
86 *pc = "invalid position";
87 break;
88 case NETWIB_ERR_PAINVALIDRANGE:
89 *pc = "invalid range";
90 break;
91 case NETWIB_ERR_PAINVALIDDEFAULT:
92 *pc = "invalid default value";
93 break;
94 case NETWIB_ERR_PANULLPTR:
95 *pc = "a NULL pointer is not allowed";
96 break;
97 case NETWIB_ERR_PANULLPTRSIZE:
98 *pc = "pointer is NULL, but size isn't zero";
99 break;
100 case NETWIB_ERR_PATOOLOW:
101 *pc = "parameter is too low";
102 break;
103 case NETWIB_ERR_PATOOHIGH:
104 *pc = "parameter is too high";
105 break;
106 case NETWIB_ERR_PAHEXACHAR:
107 *pc = "an hexa string must not contain a character different from A-Fa-f0-9";
108 break;
109 case NETWIB_ERR_PAHEXAODD:
110 *pc = "the byte number in the hexa string is odd";
111 break;
112 case NETWIB_ERR_PAMIXED:
113 *pc = "the mixed string doesn't finish by '";
114 break;
115 case NETWIB_ERR_PABASE64CHAR:
116 *pc = "all characters in a base64 must be in A-Za-z0-9+/=";
117 break;
118 case NETWIB_ERR_PABASE64X4:
119 *pc = "with base64, the byte number must be a multiple of 4";
120 break;
121 case NETWIB_ERR_PABASE64LO:
122 *pc = "base64 string is badly structured";
123 break;
124 case NETWIB_ERR_PAFMT:
125 *pc = "the format is incorrect";
126 break;
127 case NETWIB_ERR_PAINT:
128 *pc = "the string is not an integer";
129 break;
130 case NETWIB_ERR_PARINGFULL:
131 *pc = "the ring cannot have more than 0x7FFFFFFF elements";
132 break;
133 case NETWIB_ERR_PATLVINVALID:
134 *pc = "invalid TLV";
135 break;
136 case NETWIB_ERR_PATIMEDIFFNEG:
137 *pc = "time difference is negative";
138 break;
139 case NETWIB_ERR_PAPATHROOTDOTDOT:
140 *pc = "too many .. in the path : go up /";
141 break;
142 case NETWIB_ERR_PAPATHNOTCANON:
143 *pc = "the path could not be canonized";
144 break;
145 case NETWIB_ERR_PAPATHCANTINIT:
146 *pc = "it's not possible to init a path from the two given pathnames";
147 break;
148 case NETWIB_ERR_PAFILE2G:
149 *pc = "file size greater than 2Gbytes";
150 break;
151 case NETWIB_ERR_PAFILENOTREG:
152 *pc = "file is not regular";
153 break;
154 case NETWIB_ERR_PAINDEXNODATA:
155 *pc = "index does not point to data (index is just rewinded, or item was deleted)";
156 break;
157 case NETWIB_ERR_PATOOBIGFORHDR:
158 *pc = "a parameter is too big to go in the physical header";
159 break;
160 case NETWIB_ERR_PAIP4OPTSNOTX4:
161 *pc = "the ip options size is not a multiple of 4";
162 break;
163 case NETWIB_ERR_PAIP4OPTSMAX10:
164 *pc = "you cannot have more than 10 lines of ip options";
165 break;
166 case NETWIB_ERR_PAIP6EXTSNOTX4:
167 *pc = "the ip extensions size is not a multiple of 4";
168 break;
169 case NETWIB_ERR_PATCPOPTSNOTX4:
170 *pc = "the tcp options size is not a multiple of 4";
171 break;
172 case NETWIB_ERR_PATCPOPTSMAX10:
173 *pc = "you cannot have more than 10 lines of tcp options";
174 break;
175 case NETWIB_ERR_PAIPTYPE:
176 *pc = "bad IP type";
177 break;
178 case NETWIB_ERR_PAIPTYPENOT4:
179 *pc = "IP type is not IPv4";
180 break;
181 case NETWIB_ERR_PAIPTYPENOT6:
182 *pc = "IP type is not IPv6";
183 break;
184
185 /**/
186 case NETWIB_ERR_LOINTERNALERROR:
187 *pc = "internal error : contact Laurent";
188 break;
189 case NETWIB_ERR_LONOTIMPLEMENTED:
190 *pc = "not implemented";
191 break;
192 case NETWIB_ERR_LONOTSUPPORTED:
193 *pc = "not supported";
194 break;
195 case NETWIB_ERR_LOERROROKKO:
196 *pc = "NETWIB_ERR_OK is returned by the function, but this should not happen";
197 break;
198 case NETWIB_ERR_LOOBJINITALREADYINIT:
199 *pc = "already initialized";
200 break;
201 case NETWIB_ERR_LOOBJUSENOTINITIALIZED:
202 *pc = "use of an object not initialized";
203 break;
204 case NETWIB_ERR_LOOBJUSECLOSED:
205 *pc = "use of a closed object";
206 break;
207 case NETWIB_ERR_LOOBJUSECORRUPT:
208 *pc = "use of a corrupted object";
209 break;
210 case NETWIB_ERR_LOOBJCLOSENOTINITIALIZED:
211 *pc = "closing an object not initialized";
212 break;
213 case NETWIB_ERR_LOOBJCLOSEALREADYCLOSED:
214 *pc = "already closed";
215 break;
216 case NETWIB_ERR_LOOBJCLOSECORRUPT:
217 *pc = "closing a corrupted object";
218 break;
219 case NETWIB_ERR_LOOBJREADNOTSUPPORTED:
220 *pc = "reading is not supported";
221 break;
222 case NETWIB_ERR_LOOBJREADNOTALLOWED:
223 *pc = "reading is not allowed";
224 break;
225 case NETWIB_ERR_LOOBJWRITENOTSUPPORTED:
226 *pc = "writing is not supported";
227 break;
228 case NETWIB_ERR_LOOBJWRITENOTALLOWED:
229 *pc = "writing is not allowed";
230 break;
231 case NETWIB_ERR_LOOBJRDWRCONFLICT:
232 *pc = "reading and writing return different values";
233 break;
234 case NETWIB_ERR_LOCANTEXEC:
235 *pc = "cannot execute";
236 break;
237 case NETWIB_ERR_LOUDPSERREADBEFWRITE:
238 *pc = "it is not possible to write before reading on a udp server";
239 break;
240
241 /* functions */
242 case NETWIB_ERR_FUACCEPT: *pcfu = "accept"; break;
243 case NETWIB_ERR_FUBIND: *pcfu = "bind"; break;
244 case NETWIB_ERR_FUCHDIR: *pcfu = "chdir"; break;
245 case NETWIB_ERR_FUCHMOD: *pcfu = "chmod"; break;
246 case NETWIB_ERR_FUCHOWN: *pcfu = "chown"; break;
247 case NETWIB_ERR_FUCLOCKGETTIME: *pcfu = "chsize"; break;
248 case NETWIB_ERR_FUCLOSEDIR: *pcfu = "closedir"; break;
249 case NETWIB_ERR_FUCLOSEHANDLE: *pcfu = "CloseHandle"; break;
250 case NETWIB_ERR_FUCLOSE: *pcfu = "close"; break;
251 case NETWIB_ERR_FUCONNECT: *pcfu = "connect"; break;
252 case NETWIB_ERR_FUCREATEEVENT: *pcfu = "CreateEvent"; break;
253 case NETWIB_ERR_FUCREATEFILE: *pcfu = "CreateFile"; break;
254 case NETWIB_ERR_FUCREATEMUTEX: *pcfu = "CreateMutex"; break;
255 case NETWIB_ERR_FUCREATEPIPE: *pcfu = "CreatePipe"; break;
256 case NETWIB_ERR_FUCREATETHREAD: *pcfu = "CreateThread"; break;
257 case NETWIB_ERR_FUDUP2: *pcfu = "dup2"; break;
258 case NETWIB_ERR_FUDUPLICATEHANDLE: *pcfu = "DuplicateHandle"; break;
259 case NETWIB_ERR_FUEXECLE: *pcfu = "execle"; break;
260 case NETWIB_ERR_FUFCLOSE: *pcfu = "fclose"; break;
261 case NETWIB_ERR_FUFCNTL: *pcfu = "fcntl"; break;
262 case NETWIB_ERR_FUFFLUSH: *pcfu = "fflush"; break;
263 case NETWIB_ERR_FUFILENO: *pcfu = "fileno"; break;
264 case NETWIB_ERR_FUFINDCLOSE: *pcfu = "findclose"; break;
265 case NETWIB_ERR_FUFOPEN: *pcfu = "fopen"; break;
266 case NETWIB_ERR_FUFORK: *pcfu = "fork"; break;
267 case NETWIB_ERR_FUFREELIBRARY: *pcfu = "FreeLibrary"; break;
268 case NETWIB_ERR_FUFREAD: *pcfu = "fread"; break;
269 case NETWIB_ERR_FUFSYNC: *pcfu = "fsync"; break;
270 case NETWIB_ERR_FUFTRUNCATE: *pcfu = "ftruncate"; break;
271 case NETWIB_ERR_FUFWRITE: *pcfu = "fwrite"; break;
272 case NETWIB_ERR_FUGENERATECONSOLECTRLEVENT: *pcfu = "GenerateConsoleCtrlEvent"; break;
273 case NETWIB_ERR_FUGETCONSOLEMODE: *pcfu = "GetConsoleMode"; break;
274 case NETWIB_ERR_FUGETEXITCODEPROCESS: *pcfu = "GetExitCodeProcess"; break;
275 case NETWIB_ERR_FUGETEXITCODETHREAD: *pcfu = "GetExitCodeThread"; break;
276 case NETWIB_ERR_FUGETGRGIDR: *pcfu = "getgrgid_r"; break;
277 case NETWIB_ERR_FUGETGRNAMR: *pcfu = "getgrnam_r"; break;
278 case NETWIB_ERR_FUGETIFTABLE: *pcfu = "GetIfTable"; break;
279 case NETWIB_ERR_FUGETIPADDRTABLE: *pcfu = "GetIpAddrTable"; break;
280 case NETWIB_ERR_FUGETIPFORWARDTABLE: *pcfu = "GetIpForwardTable"; break;
281 case NETWIB_ERR_FUGETIPNETTABLE: *pcfu = "GetIpNetTable"; break;
282 case NETWIB_ERR_FUGETMSG: *pcfu = "getmsg"; break;
283 case NETWIB_ERR_FUGETPEERNAME: *pcfu = "getpeername"; break;
284 case NETWIB_ERR_FUGETPROCADDRESS: *pcfu = "GetProcAddress"; break;
285 case NETWIB_ERR_FUGETRLIMIT: *pcfu = "getrlimit"; break;
286 case NETWIB_ERR_FUGETPWNAMR: *pcfu = "getpwnam_r"; break;
287 case NETWIB_ERR_FUGETPWUID: *pcfu = "getpwuid"; break;
288 case NETWIB_ERR_FUGETSOCKNAME: *pcfu = "getsockname"; break;
289 case NETWIB_ERR_FUGETTIMEOFDAY: *pcfu = "gettimeofday"; break;
290 case NETWIB_ERR_FUGETUID: *pcfu = "getuid"; break;
291 case NETWIB_ERR_FUGLOBALALLOC: *pcfu = "GlobalAlloc"; break;
292 case NETWIB_ERR_FUGLOBALFREE: *pcfu = "GlobalFree"; break;
293 case NETWIB_ERR_FUIOCTL: *pcfu = "ioctl"; break;
294 case NETWIB_ERR_FUKILL: *pcfu = "kill"; break;
295 case NETWIB_ERR_FULIBNETINIT: *pcfu = "libnet_init"; break;
296 case NETWIB_ERR_FULIBNETCLOSELINKINT: *pcfu = "libnet_close_link_interface"; break;
297 case NETWIB_ERR_FULIBNETCLOSERAWSOCK: *pcfu = "libnet_close_raw_sock"; break;
298 case NETWIB_ERR_FULIBNETOPENRAWSOCK: *pcfu = "libnet_open_raw_sock"; break;
299 case NETWIB_ERR_FULIBNETWRITEIP: *pcfu = "libnet_write_ip"; break;
300 case NETWIB_ERR_FULIBNETWRITELINK: *pcfu = "libnet_write_link"; break;
301 case NETWIB_ERR_FULIBNETWRITELL: *pcfu = "libnet_write_link_layer"; break;
302 case NETWIB_ERR_FULIBNETWRITERAWIPV4: *pcfu = "libnet_write_raw_ipv4"; break;
303 case NETWIB_ERR_FULIBNETWRITERAWIPV6: *pcfu = "libnet_write_raw_ipv6"; break;
304 case NETWIB_ERR_FULISTEN: *pcfu = "listen"; break;
305 case NETWIB_ERR_FULOADLIBRARY: *pcfu = "LoadLibrary"; break;
306 case NETWIB_ERR_FULOCALTIMER: *pcfu = "localtime_r"; break;
307 case NETWIB_ERR_FULSEEK: *pcfu = "lseek"; break;
308 case NETWIB_ERR_FULSTAT: *pcfu = "lstat"; break;
309 case NETWIB_ERR_FUMALLOC: *pcfu = "malloc"; break;
310 case NETWIB_ERR_FUMKDIR: *pcfu = "mkdir"; break;
311 case NETWIB_ERR_FUMPROTECT: *pcfu = "mprotect"; break;
312 case NETWIB_ERR_FUNANOSLEEP: *pcfu = "nanosleep"; break;
313 case NETWIB_ERR_FUOPEN: *pcfu = "open"; break;
314 case NETWIB_ERR_FUOPENDIR: *pcfu = "opendir"; break;
315 case NETWIB_ERR_FUOPENPROCESS: *pcfu = "OpenProcess"; break;
316 case NETWIB_ERR_FUOPENPTY: *pcfu = "openpty"; break;
317 case NETWIB_ERR_FUPACKETALLOCATEPACKET: *pcfu = "PacketAllocatePacket"; break;
318 case NETWIB_ERR_FUPACKETGETNETTYPE: *pcfu = "PacketGetNetType"; break;
319 case NETWIB_ERR_FUPACKETOPENADAPTER: *pcfu = "PacketOpenAdapter"; break;
320 case NETWIB_ERR_FUPACKETREQUEST: *pcfu = "PacketRequest"; break;
321 case NETWIB_ERR_FUPACKETSENDPACKET: *pcfu = "PacketSendPacket"; break;
322 case NETWIB_ERR_FUPACKETSETBUFF: *pcfu = "PacketSetBuff"; break;
323 case NETWIB_ERR_FUPCAPCOMPILE: *pcfu = "pcap_compile"; break;
324 case NETWIB_ERR_FUPCAPDUMPOPEN: *pcfu = "pcap_dump_open"; break;
325 case NETWIB_ERR_FUPCAPFINDALLDEVS: *pcfu = "pcap_findalldevs"; break;
326 case NETWIB_ERR_FUPCAPGETEVENT: *pcfu = "pcap_getevent"; break;
327 case NETWIB_ERR_FUPCAPOPENDEAD: *pcfu = "pcap_open_dead"; break;
328 case NETWIB_ERR_FUPCAPOPENOFFLINE: *pcfu = "pcap_open_offline"; break;
329 case NETWIB_ERR_FUPCAPSETFILTER: *pcfu = "pcap_setfilter"; break;
330 case NETWIB_ERR_FUPEEKCONSOLEINPUT: *pcfu = "PeekConsoleInput"; break;
331 case NETWIB_ERR_FUPIPE: *pcfu = "pipe"; break;
332 case NETWIB_ERR_FUPOLL: *pcfu = "poll"; break;
333 case NETWIB_ERR_FUPTHREADATTRINIT: *pcfu = "pthread_attr_init"; break;
334 case NETWIB_ERR_FUPTHREADATTRDESTROY: *pcfu = "pthread_attr_destroy"; break;
335 case NETWIB_ERR_FUPTHREADATTRSETDETACHSTATE: *pcfu = "pthread_attr_setdetachstate"; break;
336 case NETWIB_ERR_FUPTHREADCONDINIT: *pcfu = "pthread_cond_init"; break;
337 case NETWIB_ERR_FUPTHREADCONDBROADCAST: *pcfu = "pthread_cond_broadcast"; break;
338 case NETWIB_ERR_FUPTHREADCONDDESTROY: *pcfu = "pthread_cond_destroy"; break;
339 case NETWIB_ERR_FUPTHREADCONDTIMEDWAIT: *pcfu = "pthread_cond_timedwait"; break;
340 case NETWIB_ERR_FUPTHREADCONDWAIT: *pcfu = "pthread_cond_wait"; break;
341 case NETWIB_ERR_FUPTHREADCREATE: *pcfu = "pthread_create"; break;
342 case NETWIB_ERR_FUPTHREADDELAYNP: *pcfu = "pthread_delay_np"; break;
343 case NETWIB_ERR_FUPTHREADGETEXPIRATIONNP: *pcfu = "pthread_get_expiration_np"; break;
344 case NETWIB_ERR_FUPTHREADGETSPECIFIC: *pcfu = "pthread_getspecific"; break;
345 case NETWIB_ERR_FUPTHREADJOIN: *pcfu = "pthread_join"; break;
346 case NETWIB_ERR_FUPTHREADKEYCREATE: *pcfu = "pthread_key_create"; break;
347 case NETWIB_ERR_FUPTHREADKEYDELETE: *pcfu = "pthread_key_delete"; break;
348 case NETWIB_ERR_FUPTHREADMUTEXINIT: *pcfu = "pthread_mutex_init"; break;
349 case NETWIB_ERR_FUPTHREADMUTEXDESTROY: *pcfu = "pthread_mutex_destroy"; break;
350 case NETWIB_ERR_FUPTHREADMUTEXLOCK: *pcfu = "pthread_mutex_lock"; break;
351 case NETWIB_ERR_FUPTHREADMUTEXTIMEDLOCK: *pcfu = "pthread_mutex_timedlock"; break;
352 case NETWIB_ERR_FUPTHREADMUTEXTRYLOCK: *pcfu = "pthread_mutex_trylock"; break;
353 case NETWIB_ERR_FUPTHREADMUTEXUNLOCK: *pcfu = "pthread_mutex_unlock"; break;
354 case NETWIB_ERR_FUPTHREADRWLOCKINIT: *pcfu = "pthread_rwlock_init"; break;
355 case NETWIB_ERR_FUPTHREADRWLOCKDESTROY: *pcfu = "pthread_rwlock_destroy"; break;
356 case NETWIB_ERR_FUPTHREADRWLOCKRDLOCK: *pcfu = "pthread_rwlock_rdlock"; break;
357 case NETWIB_ERR_FUPTHREADRWLOCKWRLOCK: *pcfu = "pthread_rwlock_wrlock"; break;
358 case NETWIB_ERR_FUPTHREADRWLOCKTIMEDRDLOCK: *pcfu = "pthread_rwlock_timedrdlock"; break;
359 case NETWIB_ERR_FUPTHREADRWLOCKTIMEDWRLOCK: *pcfu = "pthread_rwlock_timedwrlock"; break;
360 case NETWIB_ERR_FUPTHREADRWLOCKTRYRDLOCK: *pcfu = "pthread_rwlock_tryrdlock"; break;
361 case NETWIB_ERR_FUPTHREADRWLOCKTRYWRLOCK: *pcfu = "pthread_rwlock_trywrlock"; break;
362 case NETWIB_ERR_FUPTHREADRWLOCKUNLOCK: *pcfu = "pthread_rwlock_unlock"; break;
363 case NETWIB_ERR_FUPTHREADSETSPECIFIC: *pcfu = "pthread_setspecific"; break;
364 case NETWIB_ERR_FUPUTMSG: *pcfu = "putmsg"; break;
365 case NETWIB_ERR_FUREADDIRR: *pcfu = "readdir_r"; break;
366 case NETWIB_ERR_FUREADLINK: *pcfu = "readlink"; break;
367 case NETWIB_ERR_FUREAD: *pcfu = "read"; break;
368 case NETWIB_ERR_FUREALLOC: *pcfu = "realloc"; break;
369 case NETWIB_ERR_FURECV: *pcfu = "recv"; break;
370 case NETWIB_ERR_FURECVFROM: *pcfu = "recvfrom"; break;
371 case NETWIB_ERR_FUREGCLOSEKEY: *pcfu = "RegCloseEx"; break;
372 case NETWIB_ERR_FUREGCOMP: *pcfu = "regcomp"; break;
373 case NETWIB_ERR_FUREGENUMKEY: *pcfu = "RegEnumKey"; break;
374 case NETWIB_ERR_FUREGENUMVALUE: *pcfu = "RegEnumValue"; break;
375 case NETWIB_ERR_FUREGOPENKEYEX: *pcfu = "RegOpenKeyEx"; break;
376 case NETWIB_ERR_FUREGQUERYINFOKEY: *pcfu = "RegQueryInfoKey"; break;
377 case NETWIB_ERR_FUREGQUERYVALUEEX: *pcfu = "RegQueryValueEx"; break;
378 case NETWIB_ERR_FURELEASEMUTEX: *pcfu = "ReleaseMutex"; break;
379 case NETWIB_ERR_FURENAME: *pcfu = "rename"; break;
380 case NETWIB_ERR_FURESETEVENT: *pcfu = "ResetEvent"; break;
381 case NETWIB_ERR_FURMDIR: *pcfu = "rmdir"; break;
382 case NETWIB_ERR_FUSELECT: *pcfu = "select"; break;
383 case NETWIB_ERR_FUSEND: *pcfu = "send"; break;
384 case NETWIB_ERR_FUSENDTO: *pcfu = "sendto"; break;
385 case NETWIB_ERR_FUSETEVENT: *pcfu = "SetEvent"; break;
386 case NETWIB_ERR_FUSETGID: *pcfu = "setgid"; break;
387 case NETWIB_ERR_FUSETGROUPS: *pcfu = "setgroups"; break;
388 case NETWIB_ERR_FUSETSID: *pcfu = "setsid"; break;
389 case NETWIB_ERR_FUSETUID: *pcfu = "setuid"; break;
390 case NETWIB_ERR_FUSETSOCKOPT: *pcfu = "setsockopt"; break;
391 case NETWIB_ERR_FUSIGNAL: *pcfu = "signal"; break;
392 case NETWIB_ERR_FUSNMPEXTENSIONINIT: *pcfu = "SnmpExtensionInit"; break;
393 case NETWIB_ERR_FUSNMPEXTENSIONQUERY: *pcfu = "SnmpExtensionQuery"; break;
394 case NETWIB_ERR_FUSOCKET: *pcfu = "socket"; break;
395 case NETWIB_ERR_FUSYMLINK: *pcfu = "symlink"; break;
396 case NETWIB_ERR_FUSYSCTL: *pcfu = "sysctl"; break;
397 case NETWIB_ERR_FUTCGETATTR: *pcfu = "tcgetattr"; break;
398 case NETWIB_ERR_FUTCSETATTR: *pcfu = "tcsetattr"; break;
399 case NETWIB_ERR_FUTERMINATEPROCESS: *pcfu = "TerminateProcess"; break;
400 case NETWIB_ERR_FUTLSALLOC: *pcfu = "PeekNamedPipe"; break;
401 case NETWIB_ERR_FUTLSFREE: *pcfu = "TlsFree"; break;
402 case NETWIB_ERR_FUTLSSETVALUE: *pcfu = "TlsSetValue"; break;
403 case NETWIB_ERR_FUUNLINK: *pcfu = "unlink"; break;
404 case NETWIB_ERR_FUVIRTUALALLOC: *pcfu = "VirtualAlloc"; break;
405 case NETWIB_ERR_FUVIRTUALFREE: *pcfu = "VirtualFree"; break;
406 case NETWIB_ERR_FUVIRTUALPROTECT: *pcfu = "VirtualProtect"; break;
407 case NETWIB_ERR_FUWAITFORSINGLEOBJECT: *pcfu = "WaitForSingleObject"; break;
408 case NETWIB_ERR_FUWAITPID: *pcfu = "waitpid"; break;
409 case NETWIB_ERR_FUWRITEFILE: *pcfu = "WriteFile"; break;
410 case NETWIB_ERR_FUWRITE: *pcfu = "write"; break;
411 case NETWIB_ERR_FUWSACLEANUP: *pcfu = "WSACleanup"; break;
412 case NETWIB_ERR_FUWSASTARTUP: *pcfu = "WSAStartup"; break;
413 }
414
415 return(NETWIB_ERR_OK);
416 }
417
418 /*-------------------------------------------------------------*/
netwib_priv_err_append_herrno(netwib_uint32 varherrno,netwib_buf * pbuf)419 static netwib_err netwib_priv_err_append_herrno(netwib_uint32 varherrno,
420 netwib_buf *pbuf)
421 {
422 netwib_er(netwib_buf_append_fmt(pbuf, " hint: h_errno = %{uint32}",
423 varherrno));
424
425 #if defined NETWIBDEF_SYSNAME_Unix
426 #if NETWIBDEF_HAVEFUNC_HSTRERROR==1
427 netwib_er(netwib_buf_append_string(" = ", pbuf));
428 netwib_er(netwib_buf_append_string(hstrerror(varherrno), pbuf));
429 #endif
430 #elif defined NETWIBDEF_SYSNAME_Windows
431 /* there is no portable way to get Winsock error messages,
432 so we do it here */
433 {
434 netwib_conststring pc;
435 pc = NULL;
436 switch (varherrno) {
437 case WSAEINTR:
438 pc = "Interrupted system call";
439 break;
440 case WSAEBADF:
441 pc = "Bad file number";
442 break;
443 case WSAEACCES:
444 pc = "Permission denied";
445 break;
446 case WSAEFAULT:
447 pc = "Bad address";
448 break;
449 case WSAEINVAL:
450 pc = "Invalid argument";
451 break;
452 case WSAEMFILE:
453 pc = "Too many open sockets";
454 break;
455 case WSAEWOULDBLOCK:
456 pc = "Operation would block";
457 break;
458 case WSAEINPROGRESS:
459 pc = "Operation now in progress";
460 break;
461 case WSAEALREADY:
462 pc = "Operation already in progress";
463 break;
464 case WSAENOTSOCK:
465 pc = "Socket operation on non-socket";
466 break;
467 case WSAEDESTADDRREQ:
468 pc = "Destination address required";
469 break;
470 case WSAEMSGSIZE:
471 pc = "Message too long";
472 break;
473 case WSAEPROTOTYPE:
474 pc = "Protocol wrong type for socket";
475 break;
476 case WSAENOPROTOOPT:
477 pc = "Bad protocol option";
478 break;
479 case WSAEPROTONOSUPPORT:
480 pc = "Protocol not supported";
481 break;
482 case WSAESOCKTNOSUPPORT:
483 pc = "Socket type not supported";
484 break;
485 case WSAEOPNOTSUPP:
486 pc = "Operation not supported on socket";
487 break;
488 case WSAEPFNOSUPPORT:
489 pc = "Protocol family not supported";
490 break;
491 case WSAEAFNOSUPPORT:
492 pc = "Address family not supported";
493 break;
494 case WSAEADDRINUSE:
495 pc = "Address already in use";
496 break;
497 case WSAEADDRNOTAVAIL:
498 pc = "Can't assign requested address";
499 break;
500 case WSAENETDOWN:
501 pc = "Network is down";
502 break;
503 case WSAENETUNREACH:
504 pc = "Network is unreachable";
505 break;
506 case WSAENETRESET:
507 pc = "Net connection reset";
508 break;
509 case WSAECONNABORTED:
510 pc = "Software caused connection abort";
511 break;
512 case WSAECONNRESET:
513 pc = "Connection reset by peer";
514 break;
515 case WSAENOBUFS:
516 pc = "No buffer space available";
517 break;
518 case WSAEISCONN:
519 pc = "Socket is already connected";
520 break;
521 case WSAENOTCONN:
522 pc = "Socket is not connected";
523 break;
524 case WSAESHUTDOWN:
525 pc = "Can't send after socket shutdown";
526 break;
527 case WSAETOOMANYREFS:
528 pc = "Too many references, can't splice";
529 break;
530 case WSAETIMEDOUT:
531 pc = "Connection timed out";
532 break;
533 case WSAECONNREFUSED:
534 pc = "Connection refused";
535 break;
536 case WSAELOOP:
537 pc = "Too many levels of symbolic links";
538 break;
539 case WSAENAMETOOLONG:
540 pc = "File name too long";
541 break;
542 case WSAEHOSTDOWN:
543 pc = "Host is down";
544 break;
545 case WSAEHOSTUNREACH:
546 pc = "No route to host";
547 break;
548 case WSAENOTEMPTY:
549 pc = "Directory not empty";
550 break;
551 case WSAEPROCLIM:
552 pc = "Too many processes";
553 break;
554 case WSAEUSERS:
555 pc = "Too many users";
556 break;
557 case WSAEDQUOT:
558 pc = "Disc quota exceeded";
559 break;
560 case WSAESTALE:
561 pc = "Stale NFS file handle";
562 break;
563 case WSAEREMOTE:
564 pc = "Too many levels of remote in path";
565 break;
566 case WSASYSNOTREADY:
567 pc = "Network system is unavailable";
568 break;
569 case WSAVERNOTSUPPORTED:
570 pc = "Winsock DLL version out of range";
571 break;
572 case WSANOTINITIALISED:
573 pc = "WSAStartup not yet called";
574 break;
575 case WSAEDISCON:
576 pc = "Graceful shutdown in progress";
577 break;
578 case WSAHOST_NOT_FOUND:
579 pc = "Host not found";
580 break;
581 case WSATRY_AGAIN:
582 pc = "Non-Authoritative Host not found";
583 break;
584 case WSANO_RECOVERY:
585 pc = "Non-Recoverable errors: FORMERR, REFUSED, NOTIMP";
586 break;
587 case WSANO_DATA:
588 pc = "No host data of that type was found";
589 break;
590 }
591 if (pc != NULL) {
592 netwib_er(netwib_buf_append_string(" = ", pbuf));
593 netwib_er(netwib_buf_append_string(pc, pbuf));
594 }
595 }
596 #else
597 #error "Unknown value for NETWIBDEF_SYSNAME"
598 #endif
599
600 netwib_er(netwib_buf_append_string("\n", pbuf));
601
602 return(NETWIB_ERR_OK);
603 }
604
605 /*-------------------------------------------------------------*/
netwib_priv_err_syserrors(netwib_uint32 * perrno,netwib_uint32 * pherrno,netwib_uint32 * pgetlasterror)606 netwib_err netwib_priv_err_syserrors(netwib_uint32 *perrno,
607 netwib_uint32 *pherrno,
608 netwib_uint32 *pgetlasterror)
609 {
610
611 *perrno = errno;
612 #if NETWIBDEF_HAVEVAR_HERRNO==1
613 *pherrno = h_errno;
614 #else
615 *pherrno = 0;
616 #endif
617 #if defined NETWIBDEF_SYSNAME_Unix
618 *pgetlasterror = 0;
619 #elif defined NETWIBDEF_SYSNAME_Windows
620 *pgetlasterror = GetLastError();
621 /* we do not use WSAGetLastError, because it is equivalent to h_errno */
622 #else
623 #error "Unknown value for NETWIBDEF_SYSNAME"
624 #endif
625
626 return(NETWIB_ERR_OK);
627 }
628
629 /*-------------------------------------------------------------*/
netwib_priv_err_append_err2(netwib_buf * pbuf)630 static netwib_err netwib_priv_err_append_err2(netwib_buf *pbuf)
631 {
632 netwib_string pc;
633 netwib_priv_glovars_t *ptr = &netwib_priv_glovars;
634
635 netwib_er(netwib_buf_ref_string(&(ptr->errmsg), &pc));
636 if (pc[0] != '\0') {
637 netwib_er(netwib_buf_append_string(" hint: ", pbuf));
638 netwib_er(netwib_buf_append_string(pc, pbuf));
639 netwib_er(netwib_buf_append_string("\n", pbuf));
640 }
641
642 return(NETWIB_ERR_OK);
643 }
netwib_priv_err_append_err(netwib_err error,netwib_uint32 varerrno,netwib_uint32 varherrno,netwib_uint32 vargetlasterror,netwib_err_encodetype encodetype,netwib_buf * pbuf)644 netwib_err netwib_priv_err_append_err(netwib_err error,
645 netwib_uint32 varerrno,
646 netwib_uint32 varherrno,
647 netwib_uint32 vargetlasterror,
648 netwib_err_encodetype encodetype,
649 netwib_buf *pbuf)
650 {
651 netwib_conststring perrstr, perrstrfu;
652 netwib_bool canuseglo;
653 netwib_err ret;
654
655 /* "Error xyz : " */
656 if (encodetype == NETWIB_ERR_ENCODETYPE_NUMTEXT ||
657 encodetype == NETWIB_ERR_ENCODETYPE_FULL) {
658 netwib_er(netwib_buf_append_fmt(pbuf, "Error %{uint32} : ", error));
659 }
660
661 /* error string */
662 netwib_er(netwib_priv_err_text(error, &perrstr, &perrstrfu));
663 if (perrstr == NULL) {
664 if (perrstrfu == NULL) {
665 netwib_er(netwib_buf_append_string("unknown error", pbuf));
666 } else {
667 netwib_er(netwib_buf_append_string("error in ", pbuf));
668 netwib_er(netwib_buf_append_string(perrstrfu, pbuf));
669 netwib_er(netwib_buf_append_string("()", pbuf));
670 }
671 } else {
672 netwib_er(netwib_buf_append_string(perrstr, pbuf));
673 }
674
675 if (encodetype != NETWIB_ERR_ENCODETYPE_FULL) {
676 /* stop here */
677 return(NETWIB_ERR_OK);
678 }
679 netwib_er(netwib_buf_append_string("\n", pbuf));
680
681 /* errno */
682 if (varerrno) {
683 netwib_er(netwib_buf_append_fmt(pbuf, " hint: errno = %{uint32} = %s\n",
684 varerrno, strerror(varerrno)));
685 }
686
687 /* GetLastError */
688 #if defined NETWIBDEF_SYSNAME_Unix
689 vargetlasterror = 0;
690 #elif defined NETWIBDEF_SYSNAME_Windows
691 if (vargetlasterror) {
692 LPVOID lpMsgBuf;
693 int bytenum;
694
695 /* display error number */
696 netwib_er(netwib_buf_append_fmt(pbuf, " hint: GetLastError = %{uint32}",
697 vargetlasterror));
698 /* try to get error string */
699 bytenum = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
700 FORMAT_MESSAGE_FROM_SYSTEM,
701 NULL, vargetlasterror,
702 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
703 (LPTSTR) & lpMsgBuf, 0, NULL);
704 if (bytenum) {
705 netwib_er(netwib_buf_append_string(" = ", pbuf));
706 netwib_er(netwib_buf_append_string((char *)lpMsgBuf, pbuf));
707 /* use LocalFree, because it's not allocated in netwib */
708 LocalFree(lpMsgBuf);
709 } else {
710 netwib_er(netwib_buf_append_string("\n", pbuf));
711 }
712 }
713 #else
714 #error "Unknown value for NETWIBDEF_SYSNAME"
715 #endif
716
717 /* h_errno */
718 if (varherrno) {
719 netwib_er(netwib_priv_err_append_herrno(varherrno, pbuf));
720 }
721
722 /* global error message */
723 netwib_er(netwib_priv_glovars_canuse(&canuseglo));
724 if (canuseglo) {
725 netwib_er(netwib_priv_glovars_rdlock());
726 ret = netwib_priv_err_append_err2(pbuf);
727 netwib_er(netwib_priv_glovars_rdunlock());
728 if (ret != NETWIB_ERR_OK) {
729 return(ret);
730 }
731 }
732
733 /* backtrace */
734 #if NETWIB_DEBUG_ERROR_BT==1
735 if (error != NETWIB_ERR_OK) {
736 netwib_string str;
737 netwib_er(netwib_debug_backtrace_string(&str));
738 netwib_er(netwib_buf_append_string(" backtrace: ", pbuf));
739 netwib_er(netwib_buf_append_string(str, pbuf));
740 netwib_er(netwib_buf_append_string("\n", pbuf));
741 netwib_er(netwib_debug_string_close(&str));
742 }
743 #endif
744
745 /*get threadid */
746 #if NETWIB_DEBUG_ERROR_THREADID==1
747 {
748 netwib_uint32 threadid;
749
750 netwib_er(netwib_debug_thread_id(&threadid));
751 netwib_er(netwib_buf_append_fmt(pbuf, " thread: %{uint32}\n", threadid));
752 }
753 #endif
754
755 return(NETWIB_ERR_OK);
756 }
757