Coverage Report

Created: 2025-09-17 07:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/nss/lib/ssl/unix_err.c
Line
Count
Source
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
0
        case ELOOP:
337
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
338
0
            break;
339
0
        case ENOENT:
340
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
341
0
            break;
342
0
        case ENXIO:
343
0
            prError = PR_IO_ERROR;
344
0
            break;
345
0
        default:
346
0
            nss_MD_unix_map_default_error(err);
347
0
            return;
348
0
    }
349
0
    PR_SetError(prError, err);
350
0
}
351
352
void
353
nss_MD_unix_map_bind_error(int err)
354
0
{
355
0
    PRErrorCode prError;
356
0
    switch (err) {
357
0
        case EINVAL:
358
0
            prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR;
359
0
            break;
360
        /*
361
         * UNIX domain sockets are not supported in NSPR
362
         */
363
0
        case EIO:
364
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
365
0
            break;
366
0
        case EISDIR:
367
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
368
0
            break;
369
0
        case ELOOP:
370
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
371
0
            break;
372
0
        case ENOENT:
373
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
374
0
            break;
375
0
        case ENOTDIR:
376
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
377
0
            break;
378
0
        case EROFS:
379
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
380
0
            break;
381
0
        default:
382
0
            nss_MD_unix_map_default_error(err);
383
0
            return;
384
0
    }
385
0
    PR_SetError(prError, err);
386
0
}
387
388
void
389
nss_MD_unix_map_listen_error(int err)
390
0
{
391
0
    nss_MD_unix_map_default_error(err);
392
0
}
393
394
void
395
nss_MD_unix_map_shutdown_error(int err)
396
0
{
397
0
    nss_MD_unix_map_default_error(err);
398
0
}
399
400
void
401
nss_MD_unix_map_socketpair_error(int err)
402
0
{
403
0
    PRErrorCode prError;
404
0
    switch (err) {
405
0
        case ENOMEM:
406
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
407
0
            break;
408
0
        default:
409
0
            nss_MD_unix_map_default_error(err);
410
0
            return;
411
0
    }
412
0
    PR_SetError(prError, err);
413
0
}
414
415
void
416
nss_MD_unix_map_getsockname_error(int err)
417
0
{
418
0
    PRErrorCode prError;
419
0
    switch (err) {
420
0
        case ENOMEM:
421
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
422
0
            break;
423
0
        default:
424
0
            nss_MD_unix_map_default_error(err);
425
0
            return;
426
0
    }
427
0
    PR_SetError(prError, err);
428
0
}
429
430
void
431
nss_MD_unix_map_getpeername_error(int err)
432
0
{
433
0
    PRErrorCode prError;
434
435
0
    switch (err) {
436
0
        case ENOMEM:
437
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
438
0
            break;
439
0
        default:
440
0
            nss_MD_unix_map_default_error(err);
441
0
            return;
442
0
    }
443
0
    PR_SetError(prError, err);
444
0
}
445
446
void
447
nss_MD_unix_map_getsockopt_error(int err)
448
0
{
449
0
    PRErrorCode prError;
450
0
    switch (err) {
451
0
        case EINVAL:
452
0
            prError = PR_BUFFER_OVERFLOW_ERROR;
453
0
            break;
454
0
        case ENOMEM:
455
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
456
0
            break;
457
0
        default:
458
0
            nss_MD_unix_map_default_error(err);
459
0
            return;
460
0
    }
461
0
    PR_SetError(prError, err);
462
0
}
463
464
void
465
nss_MD_unix_map_setsockopt_error(int err)
466
0
{
467
0
    PRErrorCode prError;
468
0
    switch (err) {
469
0
        case EINVAL:
470
0
            prError = PR_BUFFER_OVERFLOW_ERROR;
471
0
            break;
472
0
        case ENOMEM:
473
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
474
0
            break;
475
0
        default:
476
0
            nss_MD_unix_map_default_error(err);
477
0
            return;
478
0
    }
479
0
    PR_SetError(prError, err);
480
0
}
481
482
void
483
nss_MD_unix_map_open_error(int err)
484
0
{
485
0
    PRErrorCode prError;
486
0
    switch (err) {
487
0
        case EAGAIN:
488
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
489
0
            break;
490
0
        case EBUSY:
491
0
            prError = PR_IO_ERROR;
492
0
            break;
493
0
        case ENODEV:
494
0
            prError = PR_FILE_NOT_FOUND_ERROR;
495
0
            break;
496
0
        case ENOMEM:
497
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
498
0
            break;
499
0
        case ETIMEDOUT:
500
0
            prError = PR_REMOTE_FILE_ERROR;
501
0
            break;
502
0
        default:
503
0
            nss_MD_unix_map_default_error(err);
504
0
            return;
505
0
    }
506
0
    PR_SetError(prError, err);
507
0
}
508
509
void
510
nss_MD_unix_map_mmap_error(int err)
511
0
{
512
0
    PRErrorCode prError;
513
0
    switch (err) {
514
0
        case EAGAIN:
515
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
516
0
            break;
517
0
        case EMFILE:
518
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
519
0
            break;
520
0
        case ENODEV:
521
0
            prError = PR_OPERATION_NOT_SUPPORTED_ERROR;
522
0
            break;
523
0
        case ENXIO:
524
0
            prError = PR_INVALID_ARGUMENT_ERROR;
525
0
            break;
526
0
        default:
527
0
            nss_MD_unix_map_default_error(err);
528
0
            return;
529
0
    }
530
0
    PR_SetError(prError, err);
531
0
}
532
533
void
534
nss_MD_unix_map_gethostname_error(int err)
535
0
{
536
0
    nss_MD_unix_map_default_error(err);
537
0
}
538
539
void
540
nss_MD_unix_map_select_error(int err)
541
0
{
542
0
    nss_MD_unix_map_default_error(err);
543
0
}
544
545
#ifdef _PR_POLL_AVAILABLE
546
void
547
nss_MD_unix_map_poll_error(int err)
548
0
{
549
0
    PRErrorCode prError;
550
551
0
    switch (err) {
552
0
        case EAGAIN:
553
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
554
0
            break;
555
0
        default:
556
0
            nss_MD_unix_map_default_error(err);
557
0
            return;
558
0
    }
559
0
    PR_SetError(prError, err);
560
0
}
561
562
void
563
nss_MD_unix_map_poll_revents_error(int err)
564
0
{
565
0
    if (err & POLLNVAL)
566
0
        PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
567
0
    else if (err & POLLHUP)
568
0
        PR_SetError(PR_CONNECT_RESET_ERROR, EPIPE);
569
0
    else if (err & POLLERR)
570
0
        PR_SetError(PR_IO_ERROR, EIO);
571
0
    else
572
0
        PR_SetError(PR_UNKNOWN_ERROR, err);
573
0
}
574
#endif /* _PR_POLL_AVAILABLE */
575
576
void
577
nss_MD_unix_map_flock_error(int err)
578
0
{
579
0
    PRErrorCode prError;
580
0
    switch (err) {
581
0
        case EINVAL:
582
0
            prError = PR_BAD_DESCRIPTOR_ERROR;
583
0
            break;
584
0
        case EWOULDBLOCK:
585
0
            prError = PR_FILE_IS_LOCKED_ERROR;
586
0
            break;
587
0
        default:
588
0
            nss_MD_unix_map_default_error(err);
589
0
            return;
590
0
    }
591
0
    PR_SetError(prError, err);
592
0
}
593
594
void
595
nss_MD_unix_map_lockf_error(int err)
596
0
{
597
0
    PRErrorCode prError;
598
0
    switch (err) {
599
0
        case EACCES:
600
0
            prError = PR_FILE_IS_LOCKED_ERROR;
601
0
            break;
602
0
        case EDEADLK:
603
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
604
0
            break;
605
0
        default:
606
0
            nss_MD_unix_map_default_error(err);
607
0
            return;
608
0
    }
609
0
    PR_SetError(prError, err);
610
0
}
611
612
#ifdef HPUX11
613
void
614
nss_MD_hpux_map_sendfile_error(int err)
615
{
616
    nss_MD_unix_map_default_error(err);
617
}
618
#endif /* HPUX11 */
619
620
void
621
nss_MD_unix_map_default_error(int err)
622
0
{
623
0
    PRErrorCode prError;
624
0
    switch (err) {
625
0
        case EACCES:
626
0
            prError = PR_NO_ACCESS_RIGHTS_ERROR;
627
0
            break;
628
0
        case EADDRINUSE:
629
0
            prError = PR_ADDRESS_IN_USE_ERROR;
630
0
            break;
631
0
        case EADDRNOTAVAIL:
632
0
            prError = PR_ADDRESS_NOT_AVAILABLE_ERROR;
633
0
            break;
634
0
        case EAFNOSUPPORT:
635
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
636
0
            break;
637
0
        case EAGAIN:
638
0
            prError = PR_WOULD_BLOCK_ERROR;
639
0
            break;
640
/*
641
 * On QNX and Neutrino, EALREADY is defined as EBUSY.
642
 */
643
0
#if EALREADY != EBUSY
644
0
        case EALREADY:
645
0
            prError = PR_ALREADY_INITIATED_ERROR;
646
0
            break;
647
0
#endif
648
0
        case EBADF:
649
0
            prError = PR_BAD_DESCRIPTOR_ERROR;
650
0
            break;
651
0
#ifdef EBADMSG
652
0
        case EBADMSG:
653
0
            prError = PR_IO_ERROR;
654
0
            break;
655
0
#endif
656
0
        case EBUSY:
657
0
            prError = PR_FILESYSTEM_MOUNTED_ERROR;
658
0
            break;
659
0
        case ECONNREFUSED:
660
0
            prError = PR_CONNECT_REFUSED_ERROR;
661
0
            break;
662
0
        case ECONNRESET:
663
0
            prError = PR_CONNECT_RESET_ERROR;
664
0
            break;
665
0
        case EDEADLK:
666
0
            prError = PR_DEADLOCK_ERROR;
667
0
            break;
668
#ifdef EDIRCORRUPTED
669
        case EDIRCORRUPTED:
670
            prError = PR_DIRECTORY_CORRUPTED_ERROR;
671
            break;
672
#endif
673
0
#ifdef EDQUOT
674
0
        case EDQUOT:
675
0
            prError = PR_NO_DEVICE_SPACE_ERROR;
676
0
            break;
677
0
#endif
678
0
        case EEXIST:
679
0
            prError = PR_FILE_EXISTS_ERROR;
680
0
            break;
681
0
        case EFAULT:
682
0
            prError = PR_ACCESS_FAULT_ERROR;
683
0
            break;
684
0
        case EFBIG:
685
0
            prError = PR_FILE_TOO_BIG_ERROR;
686
0
            break;
687
0
        case EINPROGRESS:
688
0
            prError = PR_IN_PROGRESS_ERROR;
689
0
            break;
690
0
        case EINTR:
691
0
            prError = PR_PENDING_INTERRUPT_ERROR;
692
0
            break;
693
0
        case EINVAL:
694
0
            prError = PR_INVALID_ARGUMENT_ERROR;
695
0
            break;
696
0
        case EIO:
697
0
            prError = PR_IO_ERROR;
698
0
            break;
699
0
        case EISCONN:
700
0
            prError = PR_IS_CONNECTED_ERROR;
701
0
            break;
702
0
        case EISDIR:
703
0
            prError = PR_IS_DIRECTORY_ERROR;
704
0
            break;
705
0
        case ELOOP:
706
0
            prError = PR_LOOP_ERROR;
707
0
            break;
708
0
        case EMFILE:
709
0
            prError = PR_PROC_DESC_TABLE_FULL_ERROR;
710
0
            break;
711
0
        case EMLINK:
712
0
            prError = PR_MAX_DIRECTORY_ENTRIES_ERROR;
713
0
            break;
714
0
        case EMSGSIZE:
715
0
            prError = PR_INVALID_ARGUMENT_ERROR;
716
0
            break;
717
0
#ifdef EMULTIHOP
718
0
        case EMULTIHOP:
719
0
            prError = PR_REMOTE_FILE_ERROR;
720
0
            break;
721
0
#endif
722
0
        case ENAMETOOLONG:
723
0
            prError = PR_NAME_TOO_LONG_ERROR;
724
0
            break;
725
0
        case ENETUNREACH:
726
0
            prError = PR_NETWORK_UNREACHABLE_ERROR;
727
0
            break;
728
0
        case ENFILE:
729
0
            prError = PR_SYS_DESC_TABLE_FULL_ERROR;
730
0
            break;
731
0
        case ENOBUFS:
732
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
733
0
            break;
734
0
        case ENODEV:
735
0
            prError = PR_FILE_NOT_FOUND_ERROR;
736
0
            break;
737
0
        case ENOENT:
738
0
            prError = PR_FILE_NOT_FOUND_ERROR;
739
0
            break;
740
0
        case ENOLCK:
741
0
            prError = PR_FILE_IS_LOCKED_ERROR;
742
0
            break;
743
0
#ifdef ENOLINK
744
0
        case ENOLINK:
745
0
            prError = PR_REMOTE_FILE_ERROR;
746
0
            break;
747
0
#endif
748
0
        case ENOMEM:
749
0
            prError = PR_OUT_OF_MEMORY_ERROR;
750
0
            break;
751
0
        case ENOPROTOOPT:
752
0
            prError = PR_INVALID_ARGUMENT_ERROR;
753
0
            break;
754
0
        case ENOSPC:
755
0
            prError = PR_NO_DEVICE_SPACE_ERROR;
756
0
            break;
757
0
#ifdef ENOSR
758
0
        case ENOSR:
759
0
            prError = PR_INSUFFICIENT_RESOURCES_ERROR;
760
0
            break;
761
0
#endif
762
0
        case ENOTCONN:
763
0
            prError = PR_NOT_CONNECTED_ERROR;
764
0
            break;
765
0
        case ENOTDIR:
766
0
            prError = PR_NOT_DIRECTORY_ERROR;
767
0
            break;
768
0
        case ENOTSOCK:
769
0
            prError = PR_NOT_SOCKET_ERROR;
770
0
            break;
771
0
        case ENXIO:
772
0
            prError = PR_FILE_NOT_FOUND_ERROR;
773
0
            break;
774
0
        case EOPNOTSUPP:
775
0
            prError = PR_NOT_TCP_SOCKET_ERROR;
776
0
            break;
777
0
#ifdef EOVERFLOW
778
0
        case EOVERFLOW:
779
0
            prError = PR_BUFFER_OVERFLOW_ERROR;
780
0
            break;
781
0
#endif
782
0
        case EPERM:
783
0
            prError = PR_NO_ACCESS_RIGHTS_ERROR;
784
0
            break;
785
0
        case EPIPE:
786
0
            prError = PR_CONNECT_RESET_ERROR;
787
0
            break;
788
0
#ifdef EPROTO
789
0
        case EPROTO:
790
0
            prError = PR_IO_ERROR;
791
0
            break;
792
0
#endif
793
0
        case EPROTONOSUPPORT:
794
0
            prError = PR_PROTOCOL_NOT_SUPPORTED_ERROR;
795
0
            break;
796
0
        case EPROTOTYPE:
797
0
            prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
798
0
            break;
799
0
        case ERANGE:
800
0
            prError = PR_INVALID_METHOD_ERROR;
801
0
            break;
802
0
        case EROFS:
803
0
            prError = PR_READ_ONLY_FILESYSTEM_ERROR;
804
0
            break;
805
0
        case ESPIPE:
806
0
            prError = PR_INVALID_METHOD_ERROR;
807
0
            break;
808
0
        case ETIMEDOUT:
809
0
            prError = PR_IO_TIMEOUT_ERROR;
810
0
            break;
811
#if EWOULDBLOCK != EAGAIN
812
        case EWOULDBLOCK:
813
            prError = PR_WOULD_BLOCK_ERROR;
814
            break;
815
#endif
816
0
        case EXDEV:
817
0
            prError = PR_NOT_SAME_DEVICE_ERROR;
818
0
            break;
819
820
0
        default:
821
0
            prError = PR_UNKNOWN_ERROR;
822
0
            break;
823
0
    }
824
0
    PR_SetError(prError, err);
825
0
}