Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
convert svn logs into ChangeLog (up to r7858 for now)
[simgrid.git] / tools / tesh2 / src / xerrno.c
1 #include <xerrno.h>\r
2 \r typedef struct s_entry \r {
3   \rconst char *name;
4   \r int code;
5   \r unsigned kind:1;            /* if 1 it's an error of the application else assume it's a system error */
6   \r const char *string;
7 \r \r} entry_t;
8 \r\r\rstatic const \r entry_t err[] = \r\r\r
9 #ifdef E2BIG\r
10   {"E2BIG", E2BIG, 0, "argument list too long"}, \r
11 #endif  /* \r */
12       \r
13 #ifdef EACCES\r
14   {"EACCES", EACCES, 0, "permission denied"}, \r
15 #endif  /* \r */
16       \r
17 #ifdef EADDRINUSE\r
18   {"EADDRINUSE", EADDRINUSE, 0, "address in use"}, \r
19 #endif  /* \r */
20       \r
21 #ifdef EADDRNOTAVAIL\r
22   {"EADDRNOTAVAIL", EADDRNOTAVAIL, 0, "address not available"}, \r
23 #endif  /* \r */
24       \r
25 #ifdef EAFNOSUPPORT\r
26   {"EAFNOSUPPORT", EAFNOSUPPORT, 0, "address family not supported"}, \r
27 #endif  /* \r */
28       \r
29 #ifdef EAGAIN\r
30   {"EAGAIN", EAGAIN, 0, "resource unavailable, try again"}, \r
31 #endif  /* \r */
32       \r
33 #ifdef EALREADY\r
34   {"EALREADY", EALREADY, 0, "connection already in progress"}, \r
35 #endif  /* \r */
36       \r
37 #ifdef EBADF\r
38   {"EBADF", EBADF, 0, "bad file descriptor"}, \r
39 #endif  /* \r */
40       \r
41 #ifdef EBADMSG\r
42   {"EBADMSG", EBADMSG, 0, "bad message"}, \r
43 #endif  /* \r */
44       \r
45 #ifdef EBUSY\r
46   {"EBUSY", EBUSY, 0, "device or resource busy"}, \r
47 #endif  /* \r */
48       \r
49 #ifdef ECANCELED\r
50   {"ECANCELED", ECANCELED, 0, "operation canceled"}, \r
51 #endif  /* \r */
52       \r
53 #ifdef ECHILD\r
54   {"ECHILD", ECHILD, 0, "no child processes"}, \r
55 #endif  /* \r */
56       \r
57 #ifdef ECONNABORTED\r
58   {"ECONNABORTED", ECONNABORTED, 0, "connection aborted"}, \r
59 #endif  /* \r */
60       \r
61 #ifdef ECONNREFUSED\r
62   {"ECONNREFUSED", ECONNREFUSED, 0, "connection refused"}, \r
63 #endif  /* \r */
64       \r
65 #ifdef ECONNRESET\r
66   {"ECONNRESET", ECONNRESET, 0, "connection reset"}, \r
67 #endif  /* \r */
68       \r
69 #ifdef EDEADLK\r
70   {"EDEADLK", EDEADLK, 0, "resource deadlock would occur"}, \r
71 #endif  /* \r */
72       \r
73 #ifdef EDESTADDRREQ\r
74   {"EDESTADDRREQ", EDESTADDRREQ, 0, "destination address required"}, \r
75 #endif  /* \r */
76       \r
77 #ifdef EDOM\r
78   {"EDOM", EDOM, 0, "mathematics argument out of domain of function"}, \r
79 #endif  /* \r */
80       \r
81 #ifdef EEXIST\r
82   {"EEXIST", EEXIST, 0, "file exists"}, \r
83 #endif  /* \r */
84       \r
85 #ifdef EFAULT\r
86   {"EFAULT", EFAULT, 0, "bad address"}, \r
87 #endif  /* \r */
88       \r
89 #ifdef EFBIG\r
90   {"EFBIG", EFBIG, 0, "file too large"}, \r
91 #endif  /* \r */
92       \r
93 #ifdef EHOSTUNREACH\r
94   {"EHOSTUNREACH", EHOSTUNREACH, 0, "host is unreachable"}, \r
95 #endif  /* \r */
96       \r
97 #ifdef EIDRM\r
98   {"EIDRM", EIDRM, 0, "identifier removed"}, \r
99 #endif  /* \r */
100       \r
101 #ifdef EILSEQ\r
102   {"EILSEQ", EILSEQ, 0, "illegal byte sequence"}, \r
103 #endif  /* \r */
104       \r
105 #ifdef EINPROGRESS\r
106   {"EINPROGRESS", EINPROGRESS, 0, "operation in progress"}, \r
107 #endif  /* \r */
108       \r
109 #ifdef EINTR\r
110   {"EINTR", EINTR, 0, "interrupted function"}, \r
111 #endif  /* \r */
112       \r
113 #ifdef EINVAL\r
114   {"EINVAL", EINVAL, 0, "invalid argument"}, \r
115 #endif  /* \r */
116       \r
117 #ifdef EIO\r
118   {"EIO", EIO, 0, "I/O error"}, \r
119 #endif  /* \r */
120       \r
121 #ifdef EISCONN\r
122   {"EISCONN", EISCONN, 0, "socket is connected"}, \r
123 #endif  /* \r */
124       \r
125 #ifdef EISDIR\r
126   {"EISDIR", EISDIR, 0, "is a directory"}, \r
127 #endif  /* \r */
128       \r
129 #ifdef ELOOP\r
130   {"ELOOP", ELOOP, 0, "too many levels of symbolic links"}, \r
131 #endif  /* \r */
132       \r
133 #ifdef EMFILE\r
134   {"EMFILE", EMFILE, 0, "too many open files"}, \r
135 #endif  /* \r */
136       \r
137 #ifdef EMLINK\r
138   {"EMLINK", EMLINK, 0, "too many links"}, \r
139 #endif  /* \r */
140       \r
141 #ifdef EMSGSIZE\r
142   {"EMSGSIZE", EMSGSIZE, 0, "message too large"}, \r
143 #endif  /* \r */
144       \r
145 #ifdef ENAMETOOLONG\r
146   {"ENAMETOOLONG", ENAMETOOLONG, 0, "filename too long"}, \r
147 #endif  /* \r */
148       \r
149 #ifdef ENETDOWN\r
150   {"ENETDOWN", ENETDOWN, 0, "network is down"}, \r
151 #endif  /* \r */
152       \r
153 #ifdef ENETRESET\r
154   {"ENETRESET", ENETRESET, 0, "connection aborted by network"}, \r
155 #endif  /* \r */
156       \r
157 #ifdef ENETUNREACH\r
158   {"ENETUNREACH", ENETUNREACH, 0, "network unreachable"}, \r
159 #endif  /* \r */
160       \r
161 #ifdef ENFILE\r
162   {"ENFILE", ENFILE, 0, "too many files open in system"}, \r
163 #endif  /* \r */
164       \r
165 #ifdef ENOBUFS\r
166   {"ENOBUFS", ENOBUFS, 0, "no buffer space available"}, \r
167 #endif  /* \r */
168       \r
169 #ifdef ENODATA\r
170   {"ENODATA", ENODATA, 0,
171    "no message is available on the STREAM head read queue"}, \r
172 #endif  /* \r */
173       \r
174 #ifdef ENODEV\r
175   {"ENODEV", ENODEV, 0, "no such device"}, \r
176 #endif  /* \r */
177       \r
178 #ifdef ENOENT\r
179   {"ENOENT", ENOENT, 0, "no such file or directory"}, \r
180 #endif  /* \r */
181       \r
182 #ifdef ENOEXEC\r
183   {"ENOEXEC", ENOEXEC, 0, "executable file format error"}, \r
184 #endif  /* \r */
185       \r
186 #ifdef ENOLCK\r
187   {"ENOLCK", ENOLCK, 0, "no locks available"}, \r
188 #endif  /* \r */
189       \r
190 #ifdef ENOMEM\r
191   {"ENOMEM", ENOMEM, 0, "not enough space"}, \r
192 #endif  /* \r */
193       \r
194 #ifdef ENOMSG\r
195   {"ENOMSG", ENOMSG, 0, "no message of the desired type"}, \r
196 #endif  /* \r */
197       \r
198 #ifdef ENOPROTOOPT\r
199   {"ENOPROTOOPT", ENOPROTOOPT, 0, "protocol not available"}, \r
200 #endif  /* \r */
201       \r
202 #ifdef ENOSPC\r
203   {"ENOSPC", ENOSPC, 0, "no space left on device"}, \r
204 #endif  /* \r */
205       \r
206 #ifdef ENOSR\r
207   {"ENOSR", ENOSR, 0, "no stream resources"}, \r
208 #endif  /* \r */
209       \r
210 #ifdef ENOSTR\r
211   {"ENOSTR", ENOSTR, 0, "not a stream"}, \r
212 #endif  /* \r */
213       \r
214 #ifdef ENOSYS\r
215   {"ENOSYS", ENOSYS, 0, "function not supported"}, \r
216 #endif  /* \r */
217       \r
218 #ifdef ENOTCONN\r
219   {"ENOTCONN", ENOTCONN, 0, "the socket is not connected"}, \r
220 #endif  /* \r */
221       \r
222 #ifdef ENOTDIR\r
223   {"ENOTDIR", ENOTDIR, 0, "not a directory"}, \r
224 #endif  /* \r */
225       \r
226 #ifdef ENOTEMPTY\r
227   {"ENOTEMPTY", ENOTEMPTY, 0, "directory not empty"}, \r
228 #endif  /* \r */
229       \r
230 #ifdef ENOTSOCK\r
231   {"ENOTSOCK", ENOTSOCK, 0, "not a socket"}, \r
232 #endif  /* \r */
233       \r
234 #ifdef ENOTSUP\r
235   {"ENOTSUP", ENOTSUP, 0, "not supported"}, \r
236 #endif  /* \r */
237       \r
238 #ifdef ENOTTY\r
239   {"ENOTTY", ENOTTY, 0, "inappropriate I/O control operation"}, \r
240 #endif  /* \r */
241       \r
242 #ifdef ENXIO\r
243   {"ENXIO", ENXIO, 0, "no such device or address"}, \r
244 #endif  /* \r */
245       \r
246 #ifdef EOPNOTSUPP\r
247   {"EOPNOTSUPP", EOPNOTSUPP, 0, "operation not supported on socket"}, \r
248 #endif  /* \r */
249       \r
250 #ifdef EOVERFLOW\r
251   {"EOVERFLOW", EOVERFLOW, 0, "value too large to be stored in data type"}, \r
252 #endif  /* \r */
253       \r
254 #ifdef EPERM\r
255   {"EPERM", EPERM, 0, "operation not permitted"}, \r
256 #endif  /* \r */
257       \r
258 #ifdef EPIPE\r
259   {"EPIPE", EPIPE, 0, "broken pipe"}, \r
260 #endif  /* \r */
261       \r
262 #ifdef EPROTO\r
263   {"EPROTO", EPROTO, 0, "protocol error"}, \r
264 #endif  /* \r */
265       \r
266 #ifdef EPROTONOSUPPORT\r
267   {"EPROTONOSUPPORT", EPROTONOSUPPORT, 0, "protocol not supported"}, \r
268 #endif  /* \r */
269       \r
270 #ifdef EPROTOTYPE\r
271   {"EPROTOTYPE", EPROTOTYPE, 0, "protocol wrong type for socket"}, \r
272 #endif  /* \r */
273       \r
274 #ifdef ERANGE\r
275   {"ERANGE", ERANGE, 0, "result too large"}, \r
276 #endif  /* \r */
277       \r
278 #ifdef EROFS\r
279   {"EROFS", EROFS, 0, "read-only file system"}, \r
280 #endif  /* \r */
281       \r
282 #ifdef ESPIPE\r
283   {"ESPIPE", ESPIPE, 0, "invalid seek"}, \r
284 #endif  /* \r */
285       \r
286 #ifdef ESRCH\r
287   {"ESRCH", ESRCH, 0, "no such process"}, \r
288 #endif  /* \r */
289       \r
290 #ifdef ETIME\r
291   {"ETIME", ETIME, 0, "stream ioctl() timeout"}, \r
292 #endif  /* \r */
293       \r
294 #ifdef ETIMEDOUT\r
295   {"ETIMEDOUT", ETIMEDOUT, 0, "connection timed out"}, \r
296 #endif  /* \r */
297       \r
298 #ifdef ETXTBSY\r
299   {"ETXTBSY", ETXTBSY, 0, "text file busy"}, \r
300 #endif  /* \r */
301       \r
302 #ifdef EWOULDBLOCK\r
303   {"EWOULDBLOCK", EWOULDBLOCK, 0, "operation would block"}, \r
304 #endif  /* \r */
305       \r
306 #ifdef EXDEV\r
307   {"EXDEV", EXDEV, 0, "cross-device link"}, \r
308 #endif  /* \r */
309   \r
310       {"ECMDTIMEDOUT", ECMDTIMEDOUT, 1, "command timed out"}, \r\r
311       {"ECMDNOTFOUND", ECMDNOTFOUND, 1, "command not found"}, \r\r
312       {"EEXITCODENOTMATCH", EEXITCODENOTMATCH, 1, "exit code mismatch"}, \r\r
313       {"EOUTPUTNOTMATCH", EOUTPUTNOTMATCH, 1, "output mismatch"}, \r\r
314       {"ESIGNOTMATCH", ESIGNOTMATCH, 1, "signal mismatch"}, \r\r
315       {"EUNXPSIG", EUNXPSIG, 1, "unexpected signal caught"}, \r\r
316       {"ESIGNOTRECEIPT", ESIGNOTRECEIVED, 1,
317        "expected signal not receipt"}, \r\r{"EPROCCMDLINE", EPROCCMDLINE, 1,
318                                           "command line processing failed"},
319       \r\r{"ENOARG", ENOARG, 1, "none optional argument not specified"},
320       \r\r{"ENOTPOSITIVENUM", ENOTPOSITIVENUM, 1,
321          "argument option not strictly positive"}, \r\r{"ESYNTAX", ESYNTAX,
322                                                       1, "syntax error"},
323       \r\r{"ELEADTIME", ELEADTIME, 1, "timed out"}, \r\r{"EREADMENOTFOUND",
324                                                      EREADMENOTFOUND, 1,
325                                                      "unable to locate the README.txt file"},
326       \r\r{"EINCLUDENOTFOUND", EINCLUDENOTFOUND, 1,
327          "include file not found"}, \r\r{"ESUFFIXTOOLONG", ESUFFIXTOOLONG, 1,
328                                        "suffix too long"},
329       \r\r{"EINVCMDLINE", EINVCMDLINE, 1, "invalid command line"},
330       \r\r{"unkwown", -1, 0, "unknown"} \r
331 };
332
333 \r\r
334 #include <stdio.h>\r
335     \r
336 #ifdef _XBT_WIN32\r
337 static char *\r w32error_to_string(DWORD errcode) \r
338 {
339   \rstatic char buffer[128];
340   \r\r
341       /*\r
342        *  Special code for winsock error handling.\r
343        */ \r
344       if (errcode > WSABASEERR)
345     \r {
346     \rHMODULE hModule = GetModuleHandle("wsock32");
347     \r\rif (hModule)
348       \r {
349       \rFormatMessage(FORMAT_MESSAGE_FROM_HMODULE, hModule, errcode,
350                      LANG_NEUTRAL, buffer, 128, NULL);
351       \rFreeLibrary(hModule);
352       \r}
353     \r}
354   \r
355   else
356     \r {
357     \r
358         /*\r
359          *  Default system message handling\r
360          */ \r
361         FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, errcode,
362                       LANG_NEUTRAL, buffer, 128, NULL);
363     \r}
364   \r\rreturn buffer;
365 \r}
366
367 \r
368 #endif  /* \r */
369 \rconst char *\r error_to_string(int errcode, int kind) \r
370 {
371   \rint i;
372   \r\rfor (i = 0; err[i].code != -1; i++)
373     \rif (err[i].code == errcode && err[i].kind == kind)
374       \rreturn err[i].string;
375   \r\r
376 #ifdef _XBT_WIN32\r
377       \r
378       /* assume it's a W32 error */ \r
379       return w32error_to_string((DWORD) errcode);
380   \r
381 #else   /* \r */
382       return "unknow error";
383   \r
384 #endif  /* \r */
385 \r}
386
387 \r\rconst char *\r error_get_at(int pos, int *code) \r
388 {
389   \rif (pos < 0 || (pos > (sizeof(err) / sizeof(entry_t)) - 2))
390     \r {
391     \rerrno = ERANGE;
392     \rreturn NULL;
393     \r}
394   \r\r*code = err[pos].code;
395   \rreturn err[pos].name;
396 \r}
397
398 \r\r