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