Coverage Report

Created: 2026-04-01 07:24

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openexr/src/lib/Iex/IexThrowErrnoExc.cpp
Line
Count
Source
1
//
2
// SPDX-License-Identifier: BSD-3-Clause
3
// Copyright (c) Contributors to the OpenEXR Project.
4
//
5
6
//----------------------------------------------------------------
7
//
8
//  Exceptions that correspond to "errno" error codes,
9
//  and a function to make throwing those exceptions easy.
10
//
11
//----------------------------------------------------------------
12
13
#include "IexThrowErrnoExc.h"
14
#include "IexErrnoExc.h"
15
#include <errno.h>
16
#include <string.h>
17
18
#ifdef _WIN32
19
#    include <windows.h>
20
#endif
21
22
#ifdef _MSC_VER
23
#    pragma warning(disable : 4996)
24
#endif
25
26
IEX_INTERNAL_NAMESPACE_SOURCE_ENTER
27
28
void
29
throwErrnoExc (const std::string& text, int errnum)
30
0
{
31
#ifdef _WIN32
32
    if (0 != getenv ("IEXDEBUGTHROW")) DebugBreak ();
33
#endif
34
35
0
    const char*            entext = strerror (errnum);
36
0
    std::string            tmp (text);
37
0
    std::string::size_type pos;
38
39
0
    while (std::string::npos != (pos = tmp.find ("%T")))
40
0
        tmp.replace (pos, 2, entext, strlen (entext));
41
42
0
    switch (errnum)
43
0
    {
44
0
#if defined(EPERM)
45
0
        case EPERM: throw EpermExc (tmp);
46
0
#endif
47
48
0
#if defined(ENOENT)
49
0
        case ENOENT: throw EnoentExc (tmp);
50
0
#endif
51
52
0
#if defined(ESRCH)
53
0
        case ESRCH: throw EsrchExc (tmp);
54
0
#endif
55
56
0
#if defined(EINTR)
57
0
        case EINTR: throw EintrExc (tmp);
58
0
#endif
59
60
0
#if defined(EIO)
61
0
        case EIO: throw EioExc (tmp);
62
0
#endif
63
64
0
#if defined(ENXIO)
65
0
        case ENXIO: throw EnxioExc (tmp);
66
0
#endif
67
68
0
#if defined(E2BIG)
69
0
        case E2BIG: throw E2bigExc (tmp);
70
0
#endif
71
72
0
#if defined(ENOEXEC)
73
0
        case ENOEXEC: throw EnoexecExc (tmp);
74
0
#endif
75
76
0
#if defined(EBADF)
77
0
        case EBADF: throw EbadfExc (tmp);
78
0
#endif
79
80
0
#if defined(ECHILD)
81
0
        case ECHILD: throw EchildExc (tmp);
82
0
#endif
83
84
0
#if defined(EAGAIN)
85
0
        case EAGAIN: throw EagainExc (tmp);
86
0
#endif
87
88
0
#if defined(ENOMEM)
89
0
        case ENOMEM: throw EnomemExc (tmp);
90
0
#endif
91
92
0
#if defined(EACCES)
93
0
        case EACCES: throw EaccesExc (tmp);
94
0
#endif
95
96
0
#if defined(EFAULT)
97
0
        case EFAULT: throw EfaultExc (tmp);
98
0
#endif
99
100
0
#if defined(ENOTBLK)
101
0
        case ENOTBLK: throw EnotblkExc (tmp);
102
0
#endif
103
104
0
#if defined(EBUSY)
105
0
        case EBUSY: throw EbusyExc (tmp);
106
0
#endif
107
108
0
#if defined(EEXIST)
109
0
        case EEXIST: throw EexistExc (tmp);
110
0
#endif
111
112
0
#if defined(EXDEV)
113
0
        case EXDEV: throw ExdevExc (tmp);
114
0
#endif
115
116
0
#if defined(ENODEV)
117
0
        case ENODEV: throw EnodevExc (tmp);
118
0
#endif
119
120
0
#if defined(ENOTDIR)
121
0
        case ENOTDIR: throw EnotdirExc (tmp);
122
0
#endif
123
124
0
#if defined(EISDIR)
125
0
        case EISDIR: throw EisdirExc (tmp);
126
0
#endif
127
128
0
#if defined(EINVAL)
129
0
        case EINVAL: throw EinvalExc (tmp);
130
0
#endif
131
132
0
#if defined(ENFILE)
133
0
        case ENFILE: throw EnfileExc (tmp);
134
0
#endif
135
136
0
#if defined(EMFILE)
137
0
        case EMFILE: throw EmfileExc (tmp);
138
0
#endif
139
140
0
#if defined(ENOTTY)
141
0
        case ENOTTY: throw EnottyExc (tmp);
142
0
#endif
143
144
0
#if defined(ETXTBSY)
145
0
        case ETXTBSY: throw EtxtbsyExc (tmp);
146
0
#endif
147
148
0
#if defined(EFBIG)
149
0
        case EFBIG: throw EfbigExc (tmp);
150
0
#endif
151
152
0
#if defined(ENOSPC)
153
0
        case ENOSPC: throw EnospcExc (tmp);
154
0
#endif
155
156
0
#if defined(ESPIPE)
157
0
        case ESPIPE: throw EspipeExc (tmp);
158
0
#endif
159
160
0
#if defined(EROFS)
161
0
        case EROFS: throw ErofsExc (tmp);
162
0
#endif
163
164
0
#if defined(EMLINK)
165
0
        case EMLINK: throw EmlinkExc (tmp);
166
0
#endif
167
168
0
#if defined(EPIPE)
169
0
        case EPIPE: throw EpipeExc (tmp);
170
0
#endif
171
172
0
#if defined(EDOM)
173
0
        case EDOM: throw EdomExc (tmp);
174
0
#endif
175
176
0
#if defined(ERANGE)
177
0
        case ERANGE: throw ErangeExc (tmp);
178
0
#endif
179
180
0
#if defined(ENOMSG)
181
0
        case ENOMSG: throw EnomsgExc (tmp);
182
0
#endif
183
184
0
#if defined(EIDRM)
185
0
        case EIDRM: throw EidrmExc (tmp);
186
0
#endif
187
188
0
#if defined(ECHRNG)
189
0
        case ECHRNG: throw EchrngExc (tmp);
190
0
#endif
191
192
0
#if defined(EL2NSYNC)
193
0
        case EL2NSYNC: throw El2nsyncExc (tmp);
194
0
#endif
195
196
0
#if defined(EL3HLT)
197
0
        case EL3HLT: throw El3hltExc (tmp);
198
0
#endif
199
200
0
#if defined(EL3RST)
201
0
        case EL3RST: throw El3rstExc (tmp);
202
0
#endif
203
204
0
#if defined(ELNRNG)
205
0
        case ELNRNG: throw ElnrngExc (tmp);
206
0
#endif
207
208
0
#if defined(EUNATCH)
209
0
        case EUNATCH: throw EunatchExc (tmp);
210
0
#endif
211
212
0
#if defined(ENOCSI)
213
0
        case ENOCSI: throw EnocsiExc (tmp);
214
0
#endif
215
216
0
#if defined(EL2HLT)
217
0
        case EL2HLT: throw El2hltExc (tmp);
218
0
#endif
219
220
0
#if defined(EDEADLK)
221
0
        case EDEADLK: throw EdeadlkExc (tmp);
222
0
#endif
223
224
0
#if defined(ENOLCK)
225
0
        case ENOLCK: throw EnolckExc (tmp);
226
0
#endif
227
228
0
#if defined(EBADE)
229
0
        case EBADE: throw EbadeExc (tmp);
230
0
#endif
231
232
0
#if defined(EBADR)
233
0
        case EBADR: throw EbadrExc (tmp);
234
0
#endif
235
236
0
#if defined(EXFULL)
237
0
        case EXFULL: throw ExfullExc (tmp);
238
0
#endif
239
240
0
#if defined(ENOANO)
241
0
        case ENOANO: throw EnoanoExc (tmp);
242
0
#endif
243
244
0
#if defined(EBADRQC)
245
0
        case EBADRQC: throw EbadrqcExc (tmp);
246
0
#endif
247
248
0
#if defined(EBADSLT)
249
0
        case EBADSLT: throw EbadsltExc (tmp);
250
0
#endif
251
252
0
#if defined(EDEADLOCK) && defined(EDEADLK)
253
#    if EDEADLOCK != EDEADLK
254
        case EDEADLOCK: throw EdeadlockExc (tmp);
255
#    endif
256
#elif defined(EDEADLOCK)
257
        case EDEADLOCK: throw EdeadlockExc (tmp);
258
#endif
259
260
0
#if defined(EBFONT)
261
0
        case EBFONT: throw EbfontExc (tmp);
262
0
#endif
263
264
0
#if defined(ENOSTR)
265
0
        case ENOSTR: throw EnostrExc (tmp);
266
0
#endif
267
268
0
#if defined(ENODATA)
269
0
        case ENODATA: throw EnodataExc (tmp);
270
0
#endif
271
272
0
#if defined(ETIME)
273
0
        case ETIME: throw EtimeExc (tmp);
274
0
#endif
275
276
0
#if defined(ENOSR)
277
0
        case ENOSR: throw EnosrExc (tmp);
278
0
#endif
279
280
0
#if defined(ENONET)
281
0
        case ENONET: throw EnonetExc (tmp);
282
0
#endif
283
284
0
#if defined(ENOPKG)
285
0
        case ENOPKG: throw EnopkgExc (tmp);
286
0
#endif
287
288
0
#if defined(EREMOTE)
289
0
        case EREMOTE: throw EremoteExc (tmp);
290
0
#endif
291
292
0
#if defined(ENOLINK)
293
0
        case ENOLINK: throw EnolinkExc (tmp);
294
0
#endif
295
296
0
#if defined(EADV)
297
0
        case EADV: throw EadvExc (tmp);
298
0
#endif
299
300
0
#if defined(ESRMNT)
301
0
        case ESRMNT: throw EsrmntExc (tmp);
302
0
#endif
303
304
0
#if defined(ECOMM)
305
0
        case ECOMM: throw EcommExc (tmp);
306
0
#endif
307
308
0
#if defined(EPROTO)
309
0
        case EPROTO: throw EprotoExc (tmp);
310
0
#endif
311
312
0
#if defined(EMULTIHOP)
313
0
        case EMULTIHOP: throw EmultihopExc (tmp);
314
0
#endif
315
316
0
#if defined(EBADMSG)
317
0
        case EBADMSG: throw EbadmsgExc (tmp);
318
0
#endif
319
320
0
#if defined(ENAMETOOLONG)
321
0
        case ENAMETOOLONG: throw EnametoolongExc (tmp);
322
0
#endif
323
324
0
#if defined(EOVERFLOW)
325
0
        case EOVERFLOW: throw EoverflowExc (tmp);
326
0
#endif
327
328
0
#if defined(ENOTUNIQ)
329
0
        case ENOTUNIQ: throw EnotuniqExc (tmp);
330
0
#endif
331
332
0
#if defined(EBADFD)
333
0
        case EBADFD: throw EbadfdExc (tmp);
334
0
#endif
335
336
0
#if defined(EREMCHG)
337
0
        case EREMCHG: throw EremchgExc (tmp);
338
0
#endif
339
340
0
#if defined(ELIBACC)
341
0
        case ELIBACC: throw ElibaccExc (tmp);
342
0
#endif
343
344
0
#if defined(ELIBBAD)
345
0
        case ELIBBAD: throw ElibbadExc (tmp);
346
0
#endif
347
348
0
#if defined(ELIBSCN)
349
0
        case ELIBSCN: throw ElibscnExc (tmp);
350
0
#endif
351
352
0
#if defined(ELIBMAX)
353
0
        case ELIBMAX: throw ElibmaxExc (tmp);
354
0
#endif
355
356
0
#if defined(ELIBEXEC)
357
0
        case ELIBEXEC: throw ElibexecExc (tmp);
358
0
#endif
359
360
0
#if defined(EILSEQ)
361
0
        case EILSEQ: throw EilseqExc (tmp);
362
0
#endif
363
364
0
#if defined(ENOSYS)
365
0
        case ENOSYS: throw EnosysExc (tmp);
366
0
#endif
367
368
0
#if defined(ELOOP)
369
0
        case ELOOP: throw EloopExc (tmp);
370
0
#endif
371
372
0
#if defined(ERESTART)
373
0
        case ERESTART: throw ErestartExc (tmp);
374
0
#endif
375
376
0
#if defined(ESTRPIPE)
377
0
        case ESTRPIPE: throw EstrpipeExc (tmp);
378
0
#endif
379
380
0
#if defined(ENOTEMPTY)
381
0
        case ENOTEMPTY: throw EnotemptyExc (tmp);
382
0
#endif
383
384
0
#if defined(EUSERS)
385
0
        case EUSERS: throw EusersExc (tmp);
386
0
#endif
387
388
0
#if defined(ENOTSOCK)
389
0
        case ENOTSOCK: throw EnotsockExc (tmp);
390
0
#endif
391
392
0
#if defined(EDESTADDRREQ)
393
0
        case EDESTADDRREQ: throw EdestaddrreqExc (tmp);
394
0
#endif
395
396
0
#if defined(EMSGSIZE)
397
0
        case EMSGSIZE: throw EmsgsizeExc (tmp);
398
0
#endif
399
400
0
#if defined(EPROTOTYPE)
401
0
        case EPROTOTYPE: throw EprototypeExc (tmp);
402
0
#endif
403
404
0
#if defined(ENOPROTOOPT)
405
0
        case ENOPROTOOPT: throw EnoprotooptExc (tmp);
406
0
#endif
407
408
0
#if defined(EPROTONOSUPPORT)
409
0
        case EPROTONOSUPPORT: throw EprotonosupportExc (tmp);
410
0
#endif
411
412
0
#if defined(ESOCKTNOSUPPORT)
413
0
        case ESOCKTNOSUPPORT: throw EsocktnosupportExc (tmp);
414
0
#endif
415
416
0
#if defined(EOPNOTSUPP)
417
0
        case EOPNOTSUPP: throw EopnotsuppExc (tmp);
418
0
#endif
419
420
0
#if defined(EPFNOSUPPORT)
421
0
        case EPFNOSUPPORT: throw EpfnosupportExc (tmp);
422
0
#endif
423
424
0
#if defined(EAFNOSUPPORT)
425
0
        case EAFNOSUPPORT: throw EafnosupportExc (tmp);
426
0
#endif
427
428
0
#if defined(EADDRINUSE)
429
0
        case EADDRINUSE: throw EaddrinuseExc (tmp);
430
0
#endif
431
432
0
#if defined(EADDRNOTAVAIL)
433
0
        case EADDRNOTAVAIL: throw EaddrnotavailExc (tmp);
434
0
#endif
435
436
0
#if defined(ENETDOWN)
437
0
        case ENETDOWN: throw EnetdownExc (tmp);
438
0
#endif
439
440
0
#if defined(ENETUNREACH)
441
0
        case ENETUNREACH: throw EnetunreachExc (tmp);
442
0
#endif
443
444
0
#if defined(ENETRESET)
445
0
        case ENETRESET: throw EnetresetExc (tmp);
446
0
#endif
447
448
0
#if defined(ECONNABORTED)
449
0
        case ECONNABORTED: throw EconnabortedExc (tmp);
450
0
#endif
451
452
0
#if defined(ECONNRESET)
453
0
        case ECONNRESET: throw EconnresetExc (tmp);
454
0
#endif
455
456
0
#if defined(ENOBUFS)
457
0
        case ENOBUFS: throw EnobufsExc (tmp);
458
0
#endif
459
460
0
#if defined(EISCONN)
461
0
        case EISCONN: throw EisconnExc (tmp);
462
0
#endif
463
464
0
#if defined(ENOTCONN)
465
0
        case ENOTCONN: throw EnotconnExc (tmp);
466
0
#endif
467
468
0
#if defined(ESHUTDOWN)
469
0
        case ESHUTDOWN: throw EshutdownExc (tmp);
470
0
#endif
471
472
0
#if defined(ETOOMANYREFS)
473
0
        case ETOOMANYREFS: throw EtoomanyrefsExc (tmp);
474
0
#endif
475
476
0
#if defined(ETIMEDOUT)
477
0
        case ETIMEDOUT: throw EtimedoutExc (tmp);
478
0
#endif
479
480
0
#if defined(ECONNREFUSED)
481
0
        case ECONNREFUSED: throw EconnrefusedExc (tmp);
482
0
#endif
483
484
0
#if defined(EHOSTDOWN)
485
0
        case EHOSTDOWN: throw EhostdownExc (tmp);
486
0
#endif
487
488
0
#if defined(EHOSTUNREACH)
489
0
        case EHOSTUNREACH: throw EhostunreachExc (tmp);
490
0
#endif
491
492
0
#if defined(EALREADY)
493
0
        case EALREADY: throw EalreadyExc (tmp);
494
0
#endif
495
496
0
#if defined(EINPROGRESS)
497
0
        case EINPROGRESS: throw EinprogressExc (tmp);
498
0
#endif
499
500
0
#if defined(ESTALE)
501
0
        case ESTALE: throw EstaleExc (tmp);
502
0
#endif
503
504
#if defined(EIORESID)
505
        case EIORESID: throw EioresidExc (tmp);
506
#endif
507
508
0
#if defined(EUCLEAN)
509
0
        case EUCLEAN: throw EucleanExc (tmp);
510
0
#endif
511
512
0
#if defined(ENOTNAM)
513
0
        case ENOTNAM: throw EnotnamExc (tmp);
514
0
#endif
515
516
0
#if defined(ENAVAIL)
517
0
        case ENAVAIL: throw EnavailExc (tmp);
518
0
#endif
519
520
0
#if defined(EISNAM)
521
0
        case EISNAM: throw EisnamExc (tmp);
522
0
#endif
523
524
0
#if defined(EREMOTEIO)
525
0
        case EREMOTEIO: throw EremoteioExc (tmp);
526
0
#endif
527
528
#if defined(EINIT)
529
        case EINIT: throw EinitExc (tmp);
530
#endif
531
532
#if defined(EREMDEV)
533
        case EREMDEV: throw EremdevExc (tmp);
534
#endif
535
536
0
#if defined(ECANCELED)
537
0
        case ECANCELED: throw EcanceledExc (tmp);
538
0
#endif
539
540
#if defined(ENOLIMFILE)
541
        case ENOLIMFILE: throw EnolimfileExc (tmp);
542
#endif
543
544
#if defined(EPROCLIM)
545
        case EPROCLIM: throw EproclimExc (tmp);
546
#endif
547
548
#if defined(EDISJOINT)
549
        case EDISJOINT: throw EdisjointExc (tmp);
550
#endif
551
552
#if defined(ENOLOGIN)
553
        case ENOLOGIN: throw EnologinExc (tmp);
554
#endif
555
556
#if defined(ELOGINLIM)
557
        case ELOGINLIM: throw EloginlimExc (tmp);
558
#endif
559
560
#if defined(EGROUPLOOP)
561
        case EGROUPLOOP: throw EgrouploopExc (tmp);
562
#endif
563
564
#if defined(ENOATTACH)
565
        case ENOATTACH: throw EnoattachExc (tmp);
566
#endif
567
568
0
#if defined(ENOTSUP) && defined(EOPNOTSUPP)
569
#    if ENOTSUP != EOPNOTSUPP
570
        case ENOTSUP: throw EnotsupExc (tmp);
571
#    endif
572
#elif defined(ENOTSUP)
573
        case ENOTSUP: throw EnotsupExc (tmp);
574
#endif
575
576
#if defined(ENOATTR)
577
        case ENOATTR: throw EnoattrExc (tmp);
578
#endif
579
580
#if defined(EDIRCORRUPTED)
581
        case EDIRCORRUPTED: throw EdircorruptedExc (tmp);
582
#endif
583
584
0
#if defined(EDQUOT)
585
0
        case EDQUOT: throw EdquotExc (tmp);
586
0
#endif
587
588
#if defined(ENFSREMOTE)
589
        case ENFSREMOTE: throw EnfsremoteExc (tmp);
590
#endif
591
592
#if defined(ECONTROLLER)
593
        case ECONTROLLER: throw EcontrollerExc (tmp);
594
#endif
595
596
#if defined(ENOTCONTROLLER)
597
        case ENOTCONTROLLER: throw EnotcontrollerExc (tmp);
598
#endif
599
600
#if defined(EENQUEUED)
601
        case EENQUEUED: throw EenqueuedExc (tmp);
602
#endif
603
604
#if defined(ENOTENQUEUED)
605
        case ENOTENQUEUED: throw EnotenqueuedExc (tmp);
606
#endif
607
608
#if defined(EJOINED)
609
        case EJOINED: throw EjoinedExc (tmp);
610
#endif
611
612
#if defined(ENOTJOINED)
613
        case ENOTJOINED: throw EnotjoinedExc (tmp);
614
#endif
615
616
#if defined(ENOPROC)
617
        case ENOPROC: throw EnoprocExc (tmp);
618
#endif
619
620
#if defined(EMUSTRUN)
621
        case EMUSTRUN: throw EmustrunExc (tmp);
622
#endif
623
624
#if defined(ENOTSTOPPED)
625
        case ENOTSTOPPED: throw EnotstoppedExc (tmp);
626
#endif
627
628
#if defined(ECLOCKCPU)
629
        case ECLOCKCPU: throw EclockcpuExc (tmp);
630
#endif
631
632
#if defined(EINVALSTATE)
633
        case EINVALSTATE: throw EinvalstateExc (tmp);
634
#endif
635
636
#if defined(ENOEXIST)
637
        case ENOEXIST: throw EnoexistExc (tmp);
638
#endif
639
640
#if defined(EENDOFMINOR)
641
        case EENDOFMINOR: throw EendofminorExc (tmp);
642
#endif
643
644
#if defined(EBUFSIZE)
645
        case EBUFSIZE: throw EbufsizeExc (tmp);
646
#endif
647
648
#if defined(EEMPTY)
649
        case EEMPTY: throw EemptyExc (tmp);
650
#endif
651
652
#if defined(ENOINTRGROUP)
653
        case ENOINTRGROUP: throw EnointrgroupExc (tmp);
654
#endif
655
656
#if defined(EINVALMODE)
657
        case EINVALMODE: throw EinvalmodeExc (tmp);
658
#endif
659
660
#if defined(ECANTEXTENT)
661
        case ECANTEXTENT: throw EcantextentExc (tmp);
662
#endif
663
664
#if defined(EINVALTIME)
665
        case EINVALTIME: throw EinvaltimeExc (tmp);
666
#endif
667
668
#if defined(EDESTROYED)
669
        case EDESTROYED: throw EdestroyedExc (tmp);
670
#endif
671
0
    }
672
673
0
    throw ErrnoExc (tmp);
674
0
}
675
676
void
677
throwErrnoExc (const std::string& text)
678
0
{
679
0
    throwErrnoExc (text, errno);
680
0
}
681
682
void
683
throwErrnoExc ()
684
0
{
685
0
    std::string txt = "%T.";
686
0
    throwErrnoExc (txt);
687
0
}
688
689
IEX_INTERNAL_NAMESPACE_SOURCE_EXIT