Coverage Report

Created: 2024-05-20 06:23

/src/nss/lib/ssl/unix_err.c
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/*
3
 * This file essentially replicates NSPR's source for the functions that
4
 * map system-specific error codes to NSPR error codes.  We would use
5
 * NSPR's functions, instead of duplicating them, but they're private.
6
 * As long as SSL's server session cache code must do platform native I/O
7
 * to accomplish its job, and NSPR's error mapping functions remain private,
8
 * this code will continue to need to be replicated.
9
 *
10
 * This Source Code Form is subject to the terms of the Mozilla Public
11
 * License, v. 2.0. If a copy of the MPL was not distributed with this
12
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
13
14
#if 0
15
#include "primpl.h"
16
#else
17
#define _PR_POLL_AVAILABLE 1
18
#include "prerror.h"
19
#endif
20
21
#if defined(__bsdi__) || defined(NTO) || defined(DARWIN)
22
#undef _PR_POLL_AVAILABLE
23
#endif
24
25
#if defined(_PR_POLL_AVAILABLE)
26
#include <poll.h>
27
#endif
28
#include <errno.h>
29
30
/* forward declarations. */
31
void nss_MD_unix_map_default_error(int err);
32
33
void
34
nss_MD_unix_map_opendir_error(int err)
35
0
{
36
0
    nss_MD_unix_map_default_error(err);
37
0
}
38
39
void
40
nss_MD_unix_map_closedir_error(int err)
41
0
{
42
0
    PRErrorCode prError;
43
0
    switch (err) {
44
0
        case EINVAL:
45
0
            prError = PR_BAD_DESCRIPTOR_ERROR;
46
0
            break;
47
0
        default:
48
0
            nss_MD_unix_map_default_error(err);
49
0
            return;
50
0
    }
51
0
    PR_SetError(prError, err);
52
0
}
53
54
void
55
nss_MD_unix_readdir_error(int err)
56
0
{
57
0
    PRErrorCode prError;
58
59
0
    switch (err) {
60
0
        case ENOENT:
61
0
            prError = PR_NO_MORE_FILES_ERROR;
62
0
            break;
63
0
#ifdef EOVERFLOW
64
0
        case EOVERFLOW:
65
0
            prError = PR_IO_ERROR;
66
0
            break;
67
0
#endif
68
0
        case EINVAL:
69
0
            prError = PR_IO_ERROR;
70
0
            break;
71
0
        case ENXIO:
72
0
            prError = PR_IO_ERROR;
73
0
            break;
74
0
        default:
75
0
            nss_MD_unix_map_default_error(err);
76
0
            return;
77
0
    }
78
0
    PR_SetError(prError, err);
79
0
}
80
81
void
82
nss_MD_unix_map_unlink_error(int err)
83
0
{
84
0
    PRErrorCode prError;
85
0
    switch (err) {
86
0
        case EPERM:
87
0
            prError = PR_IS_DIRECTORY_ERROR;
88
0
            break;
89
0
        default:
90
0
            nss_MD_unix_map_default_error(err);
91
0
            return;
92
0
    }
93
0
    PR_SetError(prError, err);
94
0
}
95
96
void
97
nss_MD_unix_map_stat_error(int err)
98
0
{
99
0
    PRErrorCode prError;
100
0
    switch (err) {
101
0
        case ETIMEDOUT:
102
0
            prError = PR_REMOTE_FILE_ERROR;
103
0
            break;
104
0
        default:
105
0
            nss_MD_unix_map_default_error(err);
106
0
            return;
107
0
    }
108
0
    PR_SetError(prError, err);
109
0
}
110
111
void
112
nss_MD_unix_map_fstat_error(int err)
113
0
{
114
0
    PRErrorCode prError;
115
0
    switch (err) {
116
0
        case ETIMEDOUT:
117
0
            prError = PR_REMOTE_FILE_ERROR;
118
0
            break;
119
0
        default:
120
0
            nss_MD_unix_map_default_error(err);
121
0
            return;
122
0
    }
123
0
    PR_SetError(prError, err);
124
0
}
125
126
void
127
nss_MD_unix_map_rename_error(int err)
128
0
{
129
0
    PRErrorCode prError;
130
0
    switch (err) {
131
0
        case EEXIST:
132
0
            prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
133
0
            break;
134
0
        default:
135
0
            nss_MD_unix_map_default_error(err);
136
0
            return;
137
0
    }
138
0
    PR_SetError(prError, err);
139
0
}
140
141
void
142
nss_MD_unix_map_access_error(int err)
143
0
{
144
0
    PRErrorCode prError;
145
0
    switch (err) {
146
0
        case ETIMEDOUT:
147
0
            prError = PR_REMOTE_FILE_ERROR;
148
0
            break;
149
0
        default:
150
0
            nss_MD_unix_map_default_error(err);
151
0
            return;
152
0
    }
153
0
    PR_SetError(prError, err);
154
0
}
155
156
void
157
nss_MD_unix_map_mkdir_error(int err)
158
0
{
159
0
    nss_MD_unix_map_default_error(err);
160
0
}
161
162
void
163
nss_MD_unix_map_rmdir_error(int err)
164
0
{
165
0
    PRErrorCode prError;
166
167
0
    switch (err) {
168
0
        case EEXIST:
169
0
            prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
170
0
            break;
171
0
        case EINVAL:
172
0
            prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
173
0
            break;
174
0
        case ETIMEDOUT:
175
0
            prError = PR_REMOTE_FILE_ERROR;
176
0
            break;
177
0
        default:
178
0
            nss_MD_unix_map_default_error(err);
179
0
            return;
180
0
    }
181
0
    PR_SetError(prError, err);
182
0
}
183
184
void
185
nss_MD_unix_map_read_error(int err)
186
0
{
187
0
    PRErrorCode prError;
188
0
    switch (err) {
189
0
        case EINVAL:
190
0
            prError = PR_INVALID_METHOD_ERROR;
191
0
            break;
192
0
        case ENXIO:
193
0
            prError = PR_INVALID_ARGUMENT_ERROR;
194
0
            break;
195
0
        default:
196
0
            nss_MD_unix_map_default_error(err);
197
0
            return;
198
0
    }
199
0
    PR_SetError(prError, err);
200
0
}
201
202
void
203
nss_MD_unix_map_write_error(int err)
204
0
{
205
0
    PRErrorCode prError;
206
0
    switch (err) {
207
0
        case EINVAL:
208
0
            prError = PR_INVALID_METHOD_ERROR;
209
0
            break;
210
0
        case ENXIO:
211
0
            prError = PR_INVALID_METHOD_ERROR;
212
0
            break;
213
0
        case ETIMEDOUT:
214
0
            prError = PR_REMOTE_FILE_ERROR;
215
0
            break;
216
0
        default:
217
0
            nss_MD_unix_map_default_error(err);
218
0
            return;
219
0
    }
220
0
    PR_SetError(prError, err);
221
0
}
222
223
void
224
nss_MD_unix_map_lseek_error(int err)
225
0
{
226
0
    nss_MD_unix_map_default_error(err);
227
0
}
228
229
void
230
nss_MD_unix_map_fsync_error(int err)
231
0
{
232
0
    PRErrorCode prError;
233
0
    switch (err) {
234
0
        case ETIMEDOUT:
235
0
            prError = PR_REMOTE_FILE_ERROR;
236
0
            break;
237
0
        case EINVAL:
238
0
            prError = PR_INVALID_METHOD_ERROR;
239
0
            break;
240
0
        default:
241
0
            nss_MD_unix_map_default_error(err);
242
0
            return;
243
0
    }
244
0
    PR_SetError(prError, err);
245
0
}
246
247
void
248
nss_MD_unix_map_close_error(int err)
249
0
{
250
0
    PRErrorCode prError;
251
0
    switch (err) {
252
0
        case ETIMEDOUT:
253
0
            prError = PR_REMOTE_FILE_ERROR;
254
0
            break;
255
0
        default:
256
0
            nss_MD_unix_map_default_error(err);
257
0
            return;
258
0
    }
259
0
    PR_SetError(prError, err);
260
0
}
261
262
void
263
nss_MD_unix_map_socket_error(int err)
264
0
{
265
0
    PRErrorCode prError;
266
0
    switch (err) {
267
0
        case ENOMEM:
268
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
269
0
            break;
270
0
        default:
271
0
            nss_MD_unix_map_default_error(err);
272
0
            return;
273
0
    }
274
0
    PR_SetError(prError, err);
275
0
}
276
277
void
278
nss_MD_unix_map_socketavailable_error(int err)
279
0
{
280
0
    PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
281
0
}
282
283
void
284
nss_MD_unix_map_recv_error(int err)
285
0
{
286
0
    nss_MD_unix_map_default_error(err);
287
0
}
288
289
void
290
nss_MD_unix_map_recvfrom_error(int err)
291
0
{
292
0
    nss_MD_unix_map_default_error(err);
293
0
}
294
295
void
296
nss_MD_unix_map_send_error(int err)
297
0
{
298
0
    nss_MD_unix_map_default_error(err);
299
0
}
300
301
void
302
nss_MD_unix_map_sendto_error(int err)
303
0
{
304
0
    nss_MD_unix_map_default_error(err);
305
0
}
306
307
void
308
nss_MD_unix_map_writev_error(int err)
309
0
{
310
0
    nss_MD_unix_map_default_error(err);
311
0
}
312
313
void
314
nss_MD_unix_map_accept_error(int err)
315
0
{
316
0
    PRErrorCode prError;
317
0
    switch (err) {
318
0
        case ENODEV:
319
0
            prError = PR_NOT_TCP_SOCKET_ERROR;
320
0
            break;
321
0
        default:
322
0
            nss_MD_unix_map_default_error(err);
323
0
            return;
324
0
    }
325
0
    PR_SetError(prError, err);
326
0
}
327
328
void
329
nss_MD_unix_map_connect_error(int err)
330
0
{
331
0
    PRErrorCode prError;
332
0
    switch (err) {
333
0
        case EACCES:
334
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
335
0
            break;
336
#if defined(UNIXWARE) || defined(SNI) || defined(NEC)
337
        /*
338
         * On some platforms, if we connect to a port on the local host
339
         * (the loopback address) that no process is listening on, we get
340
         * EIO instead of ECONNREFUSED.
341
         */
342
        case EIO:
343
            prError = PR_CONNECT_REFUSED_ERROR;
344
            break;
345
#endif
346
0
        case ELOOP:
347
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
348
0
            break;
349
0
        case ENOENT:
350
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
351
0
            break;
352
0
        case ENXIO:
353
0
            prError = PR_IO_ERROR;
354
0
            break;
355
0
        default:
356
0
            nss_MD_unix_map_default_error(err);
357
0
            return;
358
0
    }
359
0
    PR_SetError(prError, err);
360
0
}
361
362
void
363
nss_MD_unix_map_bind_error(int err)
364
0
{
365
0
    PRErrorCode prError;
366
0
    switch (err) {
367
0
        case EINVAL:
368
0
            prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR;
369
0
            break;
370
        /*
371
             * UNIX domain sockets are not supported in NSPR
372
             */
373
0
        case EIO:
374
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
375
0
            break;
376
0
        case EISDIR:
377
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
378
0
            break;
379
0
        case ELOOP:
380
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
381
0
            break;
382
0
        case ENOENT:
383
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
384
0
            break;
385
0
        case ENOTDIR:
386
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
387
0
            break;
388
0
        case EROFS:
389
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
390
0
            break;
391
0
        default:
392
0
            nss_MD_unix_map_default_error(err);
393
0
            return;
394
0
    }
395
0
    PR_SetError(prError, err);
396
0
}
397
398
void
399
nss_MD_unix_map_listen_error(int err)
400
0
{
401
0
    nss_MD_unix_map_default_error(err);
402
0
}
403
404
void
405
nss_MD_unix_map_shutdown_error(int err)
406
0
{
407
0
    nss_MD_unix_map_default_error(err);
408
0
}
409
410
void
411
nss_MD_unix_map_socketpair_error(int err)
412
0
{
413
0
    PRErrorCode prError;
414
0
    switch (err) {
415
0
        case ENOMEM:
416
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
417
0
            break;
418
0
        default:
419
0
            nss_MD_unix_map_default_error(err);
420
0
            return;
421
0
    }
422
0
    PR_SetError(prError, err);
423
0
}
424
425
void
426
nss_MD_unix_map_getsockname_error(int err)
427
0
{
428
0
    PRErrorCode prError;
429
0
    switch (err) {
430
0
        case ENOMEM:
431
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
432
0
            break;
433
0
        default:
434
0
            nss_MD_unix_map_default_error(err);
435
0
            return;
436
0
    }
437
0
    PR_SetError(prError, err);
438
0
}
439
440
void
441
nss_MD_unix_map_getpeername_error(int err)
442
0
{
443
0
    PRErrorCode prError;
444
445
0
    switch (err) {
446
0
        case ENOMEM:
447
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
448
0
            break;
449
0
        default:
450
0
            nss_MD_unix_map_default_error(err);
451
0
            return;
452
0
    }
453
0
    PR_SetError(prError, err);
454
0
}
455
456
void
457
nss_MD_unix_map_getsockopt_error(int err)
458
0
{
459
0
    PRErrorCode prError;
460
0
    switch (err) {
461
0
        case EINVAL:
462
0
            prError = PR_BUFFER_OVERFLOW_ERROR;
463
0
            break;
464
0
        case ENOMEM:
465
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
466
0
            break;
467
0
        default:
468
0
            nss_MD_unix_map_default_error(err);
469
0
            return;
470
0
    }
471
0
    PR_SetError(prError, err);
472
0
}
473
474
void
475
nss_MD_unix_map_setsockopt_error(int err)
476
0
{
477
0
    PRErrorCode prError;
478
0
    switch (err) {
479
0
        case EINVAL:
480
0
            prError = PR_BUFFER_OVERFLOW_ERROR;
481
0
            break;
482
0
        case ENOMEM:
483
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
484
0
            break;
485
0
        default:
486
0
            nss_MD_unix_map_default_error(err);
487
0
            return;
488
0
    }
489
0
    PR_SetError(prError, err);
490
0
}
491
492
void
493
nss_MD_unix_map_open_error(int err)
494
0
{
495
0
    PRErrorCode prError;
496
0
    switch (err) {
497
0
        case EAGAIN:
498
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
499
0
            break;
500
0
        case EBUSY:
501
0
            prError = PR_IO_ERROR;
502
0
            break;
503
0
        case ENODEV:
504
0
            prError = PR_FILE_NOT_FOUND_ERROR;
505
0
            break;
506
0
        case ENOMEM:
507
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
508
0
            break;
509
0
        case ETIMEDOUT:
510
0
            prError = PR_REMOTE_FILE_ERROR;
511
0
            break;
512
0
        default:
513
0
            nss_MD_unix_map_default_error(err);
514
0
            return;
515
0
    }
516
0
    PR_SetError(prError, err);
517
0
}
518
519
void
520
nss_MD_unix_map_mmap_error(int err)
521
0
{
522
0
    PRErrorCode prError;
523
0
    switch (err) {
524
0
        case EAGAIN:
525
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
526
0
            break;
527
0
        case EMFILE:
528
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
529
0
            break;
530
0
        case ENODEV:
531
0
            prError = PR_OPERATION_NOT_SUPPORTED_ERROR;
532
0
            break;
533
0
        case ENXIO:
534
0
            prError = PR_INVALID_ARGUMENT_ERROR;
535
0
            break;
536
0
        default:
537
0
            nss_MD_unix_map_default_error(err);
538
0
            return;
539
0
    }
540
0
    PR_SetError(prError, err);
541
0
}
542
543
void
544
nss_MD_unix_map_gethostname_error(int err)
545
0
{
546
0
    nss_MD_unix_map_default_error(err);
547
0
}
548
549
void
550
nss_MD_unix_map_select_error(int err)
551
0
{
552
0
    nss_MD_unix_map_default_error(err);
553
0
}
554
555
#ifdef _PR_POLL_AVAILABLE
556
void
557
nss_MD_unix_map_poll_error(int err)
558
0
{
559
0
    PRErrorCode prError;
560
561
0
    switch (err) {
562
0
        case EAGAIN:
563
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
564
0
            break;
565
0
        default:
566
0
            nss_MD_unix_map_default_error(err);
567
0
            return;
568
0
    }
569
0
    PR_SetError(prError, err);
570
0
}
571
572
void
573
nss_MD_unix_map_poll_revents_error(int err)
574
0
{
575
0
    if (err & POLLNVAL)
576
0
        PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
577
0
    else if (err & POLLHUP)
578
0
        PR_SetError(PR_CONNECT_RESET_ERROR, EPIPE);
579
0
    else if (err & POLLERR)
580
0
        PR_SetError(PR_IO_ERROR, EIO);
581
0
    else
582
0
        PR_SetError(PR_UNKNOWN_ERROR, err);
583
0
}
584
#endif /* _PR_POLL_AVAILABLE */
585
586
void
587
nss_MD_unix_map_flock_error(int err)
588
0
{
589
0
    PRErrorCode prError;
590
0
    switch (err) {
591
0
        case EINVAL:
592
0
            prError = PR_BAD_DESCRIPTOR_ERROR;
593
0
            break;
594
0
        case EWOULDBLOCK:
595
0
            prError = PR_FILE_IS_LOCKED_ERROR;
596
0
            break;
597
0
        default:
598
0
            nss_MD_unix_map_default_error(err);
599
0
            return;
600
0
    }
601
0
    PR_SetError(prError, err);
602
0
}
603
604
void
605
nss_MD_unix_map_lockf_error(int err)
606
0
{
607
0
    PRErrorCode prError;
608
0
    switch (err) {
609
0
        case EACCES:
610
0
            prError = PR_FILE_IS_LOCKED_ERROR;
611
0
            break;
612
0
        case EDEADLK:
613
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
614
0
            break;
615
0
        default:
616
0
            nss_MD_unix_map_default_error(err);
617
0
            return;
618
0
    }
619
0
    PR_SetError(prError, err);
620
0
}
621
622
#ifdef HPUX11
623
void
624
nss_MD_hpux_map_sendfile_error(int err)
625
{
626
    nss_MD_unix_map_default_error(err);
627
}
628
#endif /* HPUX11 */
629
630
void
631
nss_MD_unix_map_default_error(int err)
632
0
{
633
0
    PRErrorCode prError;
634
0
    switch (err) {
635
0
        case EACCES:
636
0
            prError = PR_NO_ACCESS_RIGHTS_ERROR;
637
0
            break;
638
0
        case EADDRINUSE:
639
0
            prError = PR_ADDRESS_IN_USE_ERROR;
640
0
            break;
641
0
        case EADDRNOTAVAIL:
642
0
            prError = PR_ADDRESS_NOT_AVAILABLE_ERROR;
643
0
            break;
644
0
        case EAFNOSUPPORT:
645
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
646
0
            break;
647
0
        case EAGAIN:
648
0
            prError = PR_WOULD_BLOCK_ERROR;
649
0
            break;
650
/*
651
     * On QNX and Neutrino, EALREADY is defined as EBUSY.
652
     */
653
0
#if EALREADY != EBUSY
654
0
        case EALREADY:
655
0
            prError = PR_ALREADY_INITIATED_ERROR;
656
0
            break;
657
0
#endif
658
0
        case EBADF:
659
0
            prError = PR_BAD_DESCRIPTOR_ERROR;
660
0
            break;
661
0
#ifdef EBADMSG
662
0
        case EBADMSG:
663
0
            prError = PR_IO_ERROR;
664
0
            break;
665
0
#endif
666
0
        case EBUSY:
667
0
            prError = PR_FILESYSTEM_MOUNTED_ERROR;
668
0
            break;
669
0
        case ECONNREFUSED:
670
0
            prError = PR_CONNECT_REFUSED_ERROR;
671
0
            break;
672
0
        case ECONNRESET:
673
0
            prError = PR_CONNECT_RESET_ERROR;
674
0
            break;
675
0
        case EDEADLK:
676
0
            prError = PR_DEADLOCK_ERROR;
677
0
            break;
678
#ifdef EDIRCORRUPTED
679
        case EDIRCORRUPTED:
680
            prError = PR_DIRECTORY_CORRUPTED_ERROR;
681
            break;
682
#endif
683
0
#ifdef EDQUOT
684
0
        case EDQUOT:
685
0
            prError = PR_NO_DEVICE_SPACE_ERROR;
686
0
            break;
687
0
#endif
688
0
        case EEXIST:
689
0
            prError = PR_FILE_EXISTS_ERROR;
690
0
            break;
691
0
        case EFAULT:
692
0
            prError = PR_ACCESS_FAULT_ERROR;
693
0
            break;
694
0
        case EFBIG:
695
0
            prError = PR_FILE_TOO_BIG_ERROR;
696
0
            break;
697
0
        case EINPROGRESS:
698
0
            prError = PR_IN_PROGRESS_ERROR;
699
0
            break;
700
0
        case EINTR:
701
0
            prError = PR_PENDING_INTERRUPT_ERROR;
702
0
            break;
703
0
        case EINVAL:
704
0
            prError = PR_INVALID_ARGUMENT_ERROR;
705
0
            break;
706
0
        case EIO:
707
0
            prError = PR_IO_ERROR;
708
0
            break;
709
0
        case EISCONN:
710
0
            prError = PR_IS_CONNECTED_ERROR;
711
0
            break;
712
0
        case EISDIR:
713
0
            prError = PR_IS_DIRECTORY_ERROR;
714
0
            break;
715
0
        case ELOOP:
716
0
            prError = PR_LOOP_ERROR;
717
0
            break;
718
0
        case EMFILE:
719
0
            prError = PR_PROC_DESC_TABLE_FULL_ERROR;
720
0
            break;
721
0
        case EMLINK:
722
0
            prError = PR_MAX_DIRECTORY_ENTRIES_ERROR;
723
0
            break;
724
0
        case EMSGSIZE:
725
0
            prError = PR_INVALID_ARGUMENT_ERROR;
726
0
            break;
727
0
#ifdef EMULTIHOP
728
0
        case EMULTIHOP:
729
0
            prError = PR_REMOTE_FILE_ERROR;
730
0
            break;
731
0
#endif
732
0
        case ENAMETOOLONG:
733
0
            prError = PR_NAME_TOO_LONG_ERROR;
734
0
            break;
735
0
        case ENETUNREACH:
736
0
            prError = PR_NETWORK_UNREACHABLE_ERROR;
737
0
            break;
738
0
        case ENFILE:
739
0
            prError = PR_SYS_DESC_TABLE_FULL_ERROR;
740
0
            break;
741
0
#if !defined(SCO)
742
0
        case ENOBUFS:
743
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
744
0
            break;
745
0
#endif
746
0
        case ENODEV:
747
0
            prError = PR_FILE_NOT_FOUND_ERROR;
748
0
            break;
749
0
        case ENOENT:
750
0
            prError = PR_FILE_NOT_FOUND_ERROR;
751
0
            break;
752
0
        case ENOLCK:
753
0
            prError = PR_FILE_IS_LOCKED_ERROR;
754
0
            break;
755
0
#ifdef ENOLINK
756
0
        case ENOLINK:
757
0
            prError = PR_REMOTE_FILE_ERROR;
758
0
            break;
759
0
#endif
760
0
        case ENOMEM:
761
0
            prError = PR_OUT_OF_MEMORY_ERROR;
762
0
            break;
763
0
        case ENOPROTOOPT:
764
0
            prError = PR_INVALID_ARGUMENT_ERROR;
765
0
            break;
766
0
        case ENOSPC:
767
0
            prError = PR_NO_DEVICE_SPACE_ERROR;
768
0
            break;
769
0
#ifdef ENOSR
770
0
        case ENOSR:
771
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
772
0
            break;
773
0
#endif
774
0
        case ENOTCONN:
775
0
            prError = PR_NOT_CONNECTED_ERROR;
776
0
            break;
777
0
        case ENOTDIR:
778
0
            prError = PR_NOT_DIRECTORY_ERROR;
779
0
            break;
780
0
        case ENOTSOCK:
781
0
            prError = PR_NOT_SOCKET_ERROR;
782
0
            break;
783
0
        case ENXIO:
784
0
            prError = PR_FILE_NOT_FOUND_ERROR;
785
0
            break;
786
0
        case EOPNOTSUPP:
787
0
            prError = PR_NOT_TCP_SOCKET_ERROR;
788
0
            break;
789
0
#ifdef EOVERFLOW
790
0
        case EOVERFLOW:
791
0
            prError = PR_BUFFER_OVERFLOW_ERROR;
792
0
            break;
793
0
#endif
794
0
        case EPERM:
795
0
            prError = PR_NO_ACCESS_RIGHTS_ERROR;
796
0
            break;
797
0
        case EPIPE:
798
0
            prError = PR_CONNECT_RESET_ERROR;
799
0
            break;
800
0
#ifdef EPROTO
801
0
        case EPROTO:
802
0
            prError = PR_IO_ERROR;
803
0
            break;
804
0
#endif
805
0
        case EPROTONOSUPPORT:
806
0
            prError = PR_PROTOCOL_NOT_SUPPORTED_ERROR;
807
0
            break;
808
0
        case EPROTOTYPE:
809
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
810
0
            break;
811
0
        case ERANGE:
812
0
            prError = PR_INVALID_METHOD_ERROR;
813
0
            break;
814
0
        case EROFS:
815
0
            prError = PR_READ_ONLY_FILESYSTEM_ERROR;
816
0
            break;
817
0
        case ESPIPE:
818
0
            prError = PR_INVALID_METHOD_ERROR;
819
0
            break;
820
0
        case ETIMEDOUT:
821
0
            prError = PR_IO_TIMEOUT_ERROR;
822
0
            break;
823
#if EWOULDBLOCK != EAGAIN
824
        case EWOULDBLOCK:
825
            prError = PR_WOULD_BLOCK_ERROR;
826
            break;
827
#endif
828
0
        case EXDEV:
829
0
            prError = PR_NOT_SAME_DEVICE_ERROR;
830
0
            break;
831
832
0
        default:
833
0
            prError = PR_UNKNOWN_ERROR;
834
0
            break;
835
0
    }
836
0
    PR_SetError(prError, err);
837
0
}