1 ///////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
4 // Digital Ltd. LLC
5 //
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
10 // met:
11 // * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 // * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
16 // distribution.
17 // * Neither the name of Industrial Light & Magic nor the names of
18 // its contributors may be used to endorse or promote products derived
19 // from this software without specific prior written permission.
20 //
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 //
33 ///////////////////////////////////////////////////////////////////////////
34
35
36
37 //----------------------------------------------------------------
38 //
39 // Exceptions that correspond to "errno" error codes,
40 // and a function to make throwing those exceptions easy.
41 //
42 //----------------------------------------------------------------
43
44 #include "IexThrowErrnoExc.h"
45 #include "IexErrnoExc.h"
46 #include <string.h>
47 #include <errno.h>
48
49 namespace Iex {
50
51
throwErrnoExc(const std::string & text,int errnum)52 void throwErrnoExc (const std::string &text, int errnum)
53 {
54 const char *entext = strerror (errnum);
55 std::string tmp (text);
56 std::string::size_type pos;
57
58 while (std::string::npos != (pos = tmp.find ("%T")))
59 tmp.replace (pos, 2, entext, strlen (entext));
60
61 switch (errnum)
62 {
63 #if defined (EPERM)
64 case EPERM:
65 throw EpermExc (tmp);
66 #endif
67
68 #if defined (ENOENT)
69 case ENOENT:
70 throw EnoentExc (tmp);
71 #endif
72
73 #if defined (ESRCH)
74 case ESRCH:
75 throw EsrchExc (tmp);
76 #endif
77
78 #if defined (EINTR)
79 case EINTR:
80 throw EintrExc (tmp);
81 #endif
82
83 #if defined (EIO)
84 case EIO:
85 throw EioExc (tmp);
86 #endif
87
88 #if defined (ENXIO)
89 case ENXIO:
90 throw EnxioExc (tmp);
91 #endif
92
93 #if defined (E2BIG)
94 case E2BIG:
95 throw E2bigExc (tmp);
96 #endif
97
98 #if defined (ENOEXEC)
99 case ENOEXEC:
100 throw EnoexecExc (tmp);
101 #endif
102
103 #if defined (EBADF)
104 case EBADF:
105 throw EbadfExc (tmp);
106 #endif
107
108 #if defined (ECHILD)
109 case ECHILD:
110 throw EchildExc (tmp);
111 #endif
112
113 #if defined (EAGAIN)
114 case EAGAIN:
115 throw EagainExc (tmp);
116 #endif
117
118 #if defined (ENOMEM)
119 case ENOMEM:
120 throw EnomemExc (tmp);
121 #endif
122
123 #if defined (EACCES)
124 case EACCES:
125 throw EaccesExc (tmp);
126 #endif
127
128 #if defined (EFAULT)
129 case EFAULT:
130 throw EfaultExc (tmp);
131 #endif
132
133 #if defined (ENOTBLK)
134 case ENOTBLK:
135 throw EnotblkExc (tmp);
136 #endif
137
138 #if defined (EBUSY)
139 case EBUSY:
140 throw EbusyExc (tmp);
141 #endif
142
143 #if defined (EEXIST)
144 case EEXIST:
145 throw EexistExc (tmp);
146 #endif
147
148 #if defined (EXDEV)
149 case EXDEV:
150 throw ExdevExc (tmp);
151 #endif
152
153 #if defined (ENODEV)
154 case ENODEV:
155 throw EnodevExc (tmp);
156 #endif
157
158 #if defined (ENOTDIR)
159 case ENOTDIR:
160 throw EnotdirExc (tmp);
161 #endif
162
163 #if defined (EISDIR)
164 case EISDIR:
165 throw EisdirExc (tmp);
166 #endif
167
168 #if defined (EINVAL)
169 case EINVAL:
170 throw EinvalExc (tmp);
171 #endif
172
173 #if defined (ENFILE)
174 case ENFILE:
175 throw EnfileExc (tmp);
176 #endif
177
178 #if defined (EMFILE)
179 case EMFILE:
180 throw EmfileExc (tmp);
181 #endif
182
183 #if defined (ENOTTY)
184 case ENOTTY:
185 throw EnottyExc (tmp);
186 #endif
187
188 #if defined (ETXTBSY)
189 case ETXTBSY:
190 throw EtxtbsyExc (tmp);
191 #endif
192
193 #if defined (EFBIG)
194 case EFBIG:
195 throw EfbigExc (tmp);
196 #endif
197
198 #if defined (ENOSPC)
199 case ENOSPC:
200 throw EnospcExc (tmp);
201 #endif
202
203 #if defined (ESPIPE)
204 case ESPIPE:
205 throw EspipeExc (tmp);
206 #endif
207
208 #if defined (EROFS)
209 case EROFS:
210 throw ErofsExc (tmp);
211 #endif
212
213 #if defined (EMLINK)
214 case EMLINK:
215 throw EmlinkExc (tmp);
216 #endif
217
218 #if defined (EPIPE)
219 case EPIPE:
220 throw EpipeExc (tmp);
221 #endif
222
223 #if defined (EDOM)
224 case EDOM:
225 throw EdomExc (tmp);
226 #endif
227
228 #if defined (ERANGE)
229 case ERANGE:
230 throw ErangeExc (tmp);
231 #endif
232
233 #if defined (ENOMSG)
234 case ENOMSG:
235 throw EnomsgExc (tmp);
236 #endif
237
238 #if defined (EIDRM)
239 case EIDRM:
240 throw EidrmExc (tmp);
241 #endif
242
243 #if defined (ECHRNG)
244 case ECHRNG:
245 throw EchrngExc (tmp);
246 #endif
247
248 #if defined (EL2NSYNC)
249 case EL2NSYNC:
250 throw El2nsyncExc (tmp);
251 #endif
252
253 #if defined (EL3HLT)
254 case EL3HLT:
255 throw El3hltExc (tmp);
256 #endif
257
258 #if defined (EL3RST)
259 case EL3RST:
260 throw El3rstExc (tmp);
261 #endif
262
263 #if defined (ELNRNG)
264 case ELNRNG:
265 throw ElnrngExc (tmp);
266 #endif
267
268 #if defined (EUNATCH)
269 case EUNATCH:
270 throw EunatchExc (tmp);
271 #endif
272
273 #if defined (ENOSCI)
274 case ENOCSI:
275 throw EnocsiExc (tmp);
276 #endif
277
278 #if defined (EL2HLT)
279 case EL2HLT:
280 throw El2hltExc (tmp);
281 #endif
282
283 #if defined (EDEADLK)
284 case EDEADLK:
285 throw EdeadlkExc (tmp);
286 #endif
287
288 #if defined (ENOLCK)
289 case ENOLCK:
290 throw EnolckExc (tmp);
291 #endif
292
293 #if defined (EBADE)
294 case EBADE:
295 throw EbadeExc (tmp);
296 #endif
297
298 #if defined (EBADR)
299 case EBADR:
300 throw EbadrExc (tmp);
301 #endif
302
303 #if defined (EXFULL)
304 case EXFULL:
305 throw ExfullExc (tmp);
306 #endif
307
308 #if defined (ENOANO)
309 case ENOANO:
310 throw EnoanoExc (tmp);
311 #endif
312
313 #if defined (EBADRQC)
314 case EBADRQC:
315 throw EbadrqcExc (tmp);
316 #endif
317
318 #if defined (EBADSLT)
319 case EBADSLT:
320 throw EbadsltExc (tmp);
321 #endif
322
323 #if defined (EDEADLOCK) && defined (EDEADLK)
324 #if EDEADLOCK != EDEADLK
325 case EDEADLOCK:
326 throw EdeadlockExc (tmp);
327 #endif
328 #elif defined (EDEADLOCK)
329 case EDEADLOCK:
330 throw EdeadlockExc (tmp);
331 #endif
332
333 #if defined (EBFONT)
334 case EBFONT:
335 throw EbfontExc (tmp);
336 #endif
337
338 #if defined (ENOSTR)
339 case ENOSTR:
340 throw EnostrExc (tmp);
341 #endif
342
343 #if defined (ENODATA)
344 case ENODATA:
345 throw EnodataExc (tmp);
346 #endif
347
348 #if defined (ETIME)
349 case ETIME:
350 throw EtimeExc (tmp);
351 #endif
352
353 #if defined (ENOSR)
354 case ENOSR:
355 throw EnosrExc (tmp);
356 #endif
357
358 #if defined (ENONET)
359 case ENONET:
360 throw EnonetExc (tmp);
361 #endif
362
363 #if defined (ENOPKG)
364 case ENOPKG:
365 throw EnopkgExc (tmp);
366 #endif
367
368 #if defined (EREMOTE)
369 case EREMOTE:
370 throw EremoteExc (tmp);
371 #endif
372
373 #if defined (ENOLINK)
374 case ENOLINK:
375 throw EnolinkExc (tmp);
376 #endif
377
378 #if defined (EADV)
379 case EADV:
380 throw EadvExc (tmp);
381 #endif
382
383 #if defined (ESRMNT)
384 case ESRMNT:
385 throw EsrmntExc (tmp);
386 #endif
387
388 #if defined (ECOMM)
389 case ECOMM:
390 throw EcommExc (tmp);
391 #endif
392
393 #if defined (EPROTO)
394 case EPROTO:
395 throw EprotoExc (tmp);
396 #endif
397
398 #if defined (EMULTIHOP)
399 case EMULTIHOP:
400 throw EmultihopExc (tmp);
401 #endif
402
403 #if defined (EBADMSG)
404 case EBADMSG:
405 throw EbadmsgExc (tmp);
406 #endif
407
408 #if defined (ENAMETOOLONG)
409 case ENAMETOOLONG:
410 throw EnametoolongExc (tmp);
411 #endif
412
413 #if defined (EOVERFLOW)
414 case EOVERFLOW:
415 throw EoverflowExc (tmp);
416 #endif
417
418 #if defined (ENOTUNIQ)
419 case ENOTUNIQ:
420 throw EnotuniqExc (tmp);
421 #endif
422
423 #if defined (EBADFD)
424 case EBADFD:
425 throw EbadfdExc (tmp);
426 #endif
427
428 #if defined (EREMCHG)
429 case EREMCHG:
430 throw EremchgExc (tmp);
431 #endif
432
433 #if defined (ELIBACC)
434 case ELIBACC:
435 throw ElibaccExc (tmp);
436 #endif
437
438 #if defined (ELIBBAD)
439 case ELIBBAD:
440 throw ElibbadExc (tmp);
441 #endif
442
443 #if defined (ELIBSCN)
444 case ELIBSCN:
445 throw ElibscnExc (tmp);
446 #endif
447
448 #if defined (ELIBMAX)
449 case ELIBMAX:
450 throw ElibmaxExc (tmp);
451 #endif
452
453 #if defined (ELIBEXEC)
454 case ELIBEXEC:
455 throw ElibexecExc (tmp);
456 #endif
457
458 #if defined (EILSEQ)
459 case EILSEQ:
460 throw EilseqExc (tmp);
461 #endif
462
463 #if defined (ENOSYS)
464 case ENOSYS:
465 throw EnosysExc (tmp);
466 #endif
467
468 #if defined (ELOOP)
469 case ELOOP:
470 throw EloopExc (tmp);
471 #endif
472
473 #if defined (ERESTART)
474 case ERESTART:
475 throw ErestartExc (tmp);
476 #endif
477
478 #if defined (ESTRPIPE)
479 case ESTRPIPE:
480 throw EstrpipeExc (tmp);
481 #endif
482
483 #if defined (ENOTEMPTY)
484 case ENOTEMPTY:
485 throw EnotemptyExc (tmp);
486 #endif
487
488 #if defined (EUSERS)
489 case EUSERS:
490 throw EusersExc (tmp);
491 #endif
492
493 #if defined (ENOTSOCK)
494 case ENOTSOCK:
495 throw EnotsockExc (tmp);
496 #endif
497
498 #if defined (EDESTADDRREQ)
499 case EDESTADDRREQ:
500 throw EdestaddrreqExc (tmp);
501 #endif
502
503 #if defined (EMSGSIZE)
504 case EMSGSIZE:
505 throw EmsgsizeExc (tmp);
506 #endif
507
508 #if defined (EPROTOTYPE)
509 case EPROTOTYPE:
510 throw EprototypeExc (tmp);
511 #endif
512
513 #if defined (ENOPROTOOPT)
514 case ENOPROTOOPT:
515 throw EnoprotooptExc (tmp);
516 #endif
517
518 #if defined (EPROTONOSUPPORT)
519 case EPROTONOSUPPORT:
520 throw EprotonosupportExc (tmp);
521 #endif
522
523 #if defined (ESOCKTNOSUPPORT)
524 case ESOCKTNOSUPPORT:
525 throw EsocktnosupportExc (tmp);
526 #endif
527
528 #if defined (EOPNOTSUPP)
529 case EOPNOTSUPP:
530 throw EopnotsuppExc (tmp);
531 #endif
532
533 #if defined (EPFNOSUPPORT)
534 case EPFNOSUPPORT:
535 throw EpfnosupportExc (tmp);
536 #endif
537
538 #if defined (EAFNOSUPPORT)
539 case EAFNOSUPPORT:
540 throw EafnosupportExc (tmp);
541 #endif
542
543 #if defined (EADDRINUSE)
544 case EADDRINUSE:
545 throw EaddrinuseExc (tmp);
546 #endif
547
548 #if defined (EADDRNOTAVAIL)
549 case EADDRNOTAVAIL:
550 throw EaddrnotavailExc (tmp);
551 #endif
552
553 #if defined (ENETDOWN)
554 case ENETDOWN:
555 throw EnetdownExc (tmp);
556 #endif
557
558 #if defined (ENETUNREACH)
559 case ENETUNREACH:
560 throw EnetunreachExc (tmp);
561 #endif
562
563 #if defined (ENETRESET)
564 case ENETRESET:
565 throw EnetresetExc (tmp);
566 #endif
567
568 #if defined (ECONNABORTED)
569 case ECONNABORTED:
570 throw EconnabortedExc (tmp);
571 #endif
572
573 #if defined (ECONNRESET)
574 case ECONNRESET:
575 throw EconnresetExc (tmp);
576 #endif
577
578 #if defined (ENOBUFS)
579 case ENOBUFS:
580 throw EnobufsExc (tmp);
581 #endif
582
583 #if defined (EISCONN)
584 case EISCONN:
585 throw EisconnExc (tmp);
586 #endif
587
588 #if defined (ENOTCONN)
589 case ENOTCONN:
590 throw EnotconnExc (tmp);
591 #endif
592
593 #if defined (ESHUTDOWN)
594 case ESHUTDOWN:
595 throw EshutdownExc (tmp);
596 #endif
597
598 #if defined (ETOOMANYREFS)
599 case ETOOMANYREFS:
600 throw EtoomanyrefsExc (tmp);
601 #endif
602
603 #if defined (ETIMEDOUT)
604 case ETIMEDOUT:
605 throw EtimedoutExc (tmp);
606 #endif
607
608 #if defined (ECONNREFUSED)
609 case ECONNREFUSED:
610 throw EconnrefusedExc (tmp);
611 #endif
612
613 #if defined (EHOSTDOWN)
614 case EHOSTDOWN:
615 throw EhostdownExc (tmp);
616 #endif
617
618 #if defined (EHOSTUNREACH)
619 case EHOSTUNREACH:
620 throw EhostunreachExc (tmp);
621 #endif
622
623 #if defined (EALREADY)
624 case EALREADY:
625 throw EalreadyExc (tmp);
626 #endif
627
628 #if defined (EINPROGRESS)
629 case EINPROGRESS:
630 throw EinprogressExc (tmp);
631 #endif
632
633 #if defined (ESTALE)
634 case ESTALE:
635 throw EstaleExc (tmp);
636 #endif
637
638 #if defined (EIORESID)
639 case EIORESID:
640 throw EioresidExc (tmp);
641 #endif
642
643 #if defined (EUCLEAN)
644 case EUCLEAN:
645 throw EucleanExc (tmp);
646 #endif
647
648 #if defined (ENOTNAM)
649 case ENOTNAM:
650 throw EnotnamExc (tmp);
651 #endif
652
653 #if defined (ENAVAIL)
654 case ENAVAIL:
655 throw EnavailExc (tmp);
656 #endif
657
658 #if defined (EISNAM)
659 case EISNAM:
660 throw EisnamExc (tmp);
661 #endif
662
663 #if defined (EREMOTEIO)
664 case EREMOTEIO:
665 throw EremoteioExc (tmp);
666 #endif
667
668 #if defined (EINIT)
669 case EINIT:
670 throw EinitExc (tmp);
671 #endif
672
673 #if defined (EREMDEV)
674 case EREMDEV:
675 throw EremdevExc (tmp);
676 #endif
677
678 #if defined (ECANCELED)
679 case ECANCELED:
680 throw EcanceledExc (tmp);
681 #endif
682
683 #if defined (ENOLIMFILE)
684 case ENOLIMFILE:
685 throw EnolimfileExc (tmp);
686 #endif
687
688 #if defined (EPROCLIM)
689 case EPROCLIM:
690 throw EproclimExc (tmp);
691 #endif
692
693 #if defined (EDISJOINT)
694 case EDISJOINT:
695 throw EdisjointExc (tmp);
696 #endif
697
698 #if defined (ENOLOGIN)
699 case ENOLOGIN:
700 throw EnologinExc (tmp);
701 #endif
702
703 #if defined (ELOGINLIM)
704 case ELOGINLIM:
705 throw EloginlimExc (tmp);
706 #endif
707
708 #if defined (EGROUPLOOP)
709 case EGROUPLOOP:
710 throw EgrouploopExc (tmp);
711 #endif
712
713 #if defined (ENOATTACH)
714 case ENOATTACH:
715 throw EnoattachExc (tmp);
716 #endif
717
718 #if defined (ENOTSUP) && defined (EOPNOTSUPP)
719 #if ENOTSUP != EOPNOTSUPP
720 case ENOTSUP:
721 throw EnotsupExc (tmp);
722 #endif
723 #elif defined (ENOTSUP)
724 case ENOTSUP:
725 throw EnotsupExc (tmp);
726 #endif
727
728 #if defined (ENOATTR)
729 case ENOATTR:
730 throw EnoattrExc (tmp);
731 #endif
732
733 #if defined (EDIRCORRUPTED)
734 case EDIRCORRUPTED:
735 throw EdircorruptedExc (tmp);
736 #endif
737
738 #if defined (EDQUOT)
739 case EDQUOT:
740 throw EdquotExc (tmp);
741 #endif
742
743 #if defined (ENFSREMOTE)
744 case ENFSREMOTE:
745 throw EnfsremoteExc (tmp);
746 #endif
747
748 #if defined (ECONTROLLER)
749 case ECONTROLLER:
750 throw EcontrollerExc (tmp);
751 #endif
752
753 #if defined (ENOTCONTROLLER)
754 case ENOTCONTROLLER:
755 throw EnotcontrollerExc (tmp);
756 #endif
757
758 #if defined (EENQUEUED)
759 case EENQUEUED:
760 throw EenqueuedExc (tmp);
761 #endif
762
763 #if defined (ENOTENQUEUED)
764 case ENOTENQUEUED:
765 throw EnotenqueuedExc (tmp);
766 #endif
767
768 #if defined (EJOINED)
769 case EJOINED:
770 throw EjoinedExc (tmp);
771 #endif
772
773 #if defined (ENOTJOINED)
774 case ENOTJOINED:
775 throw EnotjoinedExc (tmp);
776 #endif
777
778 #if defined (ENOPROC)
779 case ENOPROC:
780 throw EnoprocExc (tmp);
781 #endif
782
783 #if defined (EMUSTRUN)
784 case EMUSTRUN:
785 throw EmustrunExc (tmp);
786 #endif
787
788 #if defined (ENOTSTOPPED)
789 case ENOTSTOPPED:
790 throw EnotstoppedExc (tmp);
791 #endif
792
793 #if defined (ECLOCKCPU)
794 case ECLOCKCPU:
795 throw EclockcpuExc (tmp);
796 #endif
797
798 #if defined (EINVALSTATE)
799 case EINVALSTATE:
800 throw EinvalstateExc (tmp);
801 #endif
802
803 #if defined (ENOEXIST)
804 case ENOEXIST:
805 throw EnoexistExc (tmp);
806 #endif
807
808 #if defined (EENDOFMINOR)
809 case EENDOFMINOR:
810 throw EendofminorExc (tmp);
811 #endif
812
813 #if defined (EBUFSIZE)
814 case EBUFSIZE:
815 throw EbufsizeExc (tmp);
816 #endif
817
818 #if defined (EEMPTY)
819 case EEMPTY:
820 throw EemptyExc (tmp);
821 #endif
822
823 #if defined (ENOINTRGROUP)
824 case ENOINTRGROUP:
825 throw EnointrgroupExc (tmp);
826 #endif
827
828 #if defined (EINVALMODE)
829 case EINVALMODE:
830 throw EinvalmodeExc (tmp);
831 #endif
832
833 #if defined (ECANTEXTENT)
834 case ECANTEXTENT:
835 throw EcantextentExc (tmp);
836 #endif
837
838 #if defined (EINVALTIME)
839 case EINVALTIME:
840 throw EinvaltimeExc (tmp);
841 #endif
842
843 #if defined (EDESTROYED)
844 case EDESTROYED:
845 throw EdestroyedExc (tmp);
846 #endif
847 }
848
849 throw ErrnoExc (tmp);
850 }
851
852
throwErrnoExc(const std::string & text)853 void throwErrnoExc (const std::string &text)
854 {
855 throwErrnoExc (text, errno);
856 }
857
858
859 } // namespace Iex
860