nsprpub/pr/src/md/unix/unix_errors.c

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include "primpl.h"
     7 #if defined(_PR_POLL_AVAILABLE)
     8 #include <poll.h>
     9 #endif
    10 #include <errno.h>
    12 void _MD_unix_map_default_error(int err)
    13 {
    14     PRErrorCode prError;
    16     switch (err ) {
    17         case EACCES:
    18             prError = PR_NO_ACCESS_RIGHTS_ERROR;
    19             break;
    20         case EADDRINUSE:
    21             prError = PR_ADDRESS_IN_USE_ERROR;
    22             break;
    23         case EADDRNOTAVAIL:
    24             prError = PR_ADDRESS_NOT_AVAILABLE_ERROR;
    25             break;
    26         case EAFNOSUPPORT:
    27             prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
    28             break;
    29         case EAGAIN:
    30             prError = PR_WOULD_BLOCK_ERROR;
    31             break;
    32         /*
    33          * On QNX and Neutrino, EALREADY is defined as EBUSY.
    34          */
    35 #if EALREADY != EBUSY
    36         case EALREADY:
    37             prError = PR_ALREADY_INITIATED_ERROR;
    38             break;
    39 #endif
    40         case EBADF:
    41             prError = PR_BAD_DESCRIPTOR_ERROR;
    42             break;
    43 #ifdef EBADMSG
    44         case EBADMSG:
    45             prError = PR_IO_ERROR;
    46             break;
    47 #endif
    48         case EBUSY:
    49             prError = PR_FILESYSTEM_MOUNTED_ERROR;
    50             break;
    51         case ECONNABORTED:
    52             prError = PR_CONNECT_ABORTED_ERROR;
    53             break;
    54         case ECONNREFUSED:
    55             prError = PR_CONNECT_REFUSED_ERROR;
    56             break;
    57         case ECONNRESET:
    58             prError = PR_CONNECT_RESET_ERROR;
    59             break;
    60         case EDEADLK:
    61             prError = PR_DEADLOCK_ERROR;
    62             break;
    63 #ifdef EDIRCORRUPTED
    64         case EDIRCORRUPTED:
    65             prError = PR_DIRECTORY_CORRUPTED_ERROR;
    66             break;
    67 #endif
    68 #ifdef EDQUOT
    69         case EDQUOT:
    70             prError = PR_NO_DEVICE_SPACE_ERROR;
    71             break;
    72 #endif
    73         case EEXIST:
    74             prError = PR_FILE_EXISTS_ERROR;
    75             break;
    76         case EFAULT:
    77             prError = PR_ACCESS_FAULT_ERROR;
    78             break;
    79         case EFBIG:
    80             prError = PR_FILE_TOO_BIG_ERROR;
    81             break;
    82         case EHOSTUNREACH:
    83         case EHOSTDOWN:
    84             prError = PR_HOST_UNREACHABLE_ERROR;
    85             break;
    86         case EINPROGRESS:
    87             prError = PR_IN_PROGRESS_ERROR;
    88             break;
    89         case EINTR:
    90             prError = PR_PENDING_INTERRUPT_ERROR;
    91             break;
    92         case EINVAL:
    93             prError = PR_INVALID_ARGUMENT_ERROR;
    94             break;
    95         case EIO:
    96             prError = PR_IO_ERROR;
    97             break;
    98         case EISCONN:
    99             prError = PR_IS_CONNECTED_ERROR;
   100             break;
   101         case EISDIR:
   102             prError = PR_IS_DIRECTORY_ERROR;
   103             break;
   104         case ELOOP:
   105             prError = PR_LOOP_ERROR;
   106             break;
   107         case EMFILE:
   108             prError = PR_PROC_DESC_TABLE_FULL_ERROR;
   109             break;
   110         case EMLINK:
   111             prError = PR_MAX_DIRECTORY_ENTRIES_ERROR;
   112             break;
   113         case EMSGSIZE:
   114             prError = PR_INVALID_ARGUMENT_ERROR;
   115             break;
   116 #ifdef EMULTIHOP
   117         case EMULTIHOP:
   118             prError = PR_REMOTE_FILE_ERROR;
   119             break;
   120 #endif
   121         case ENAMETOOLONG:
   122             prError = PR_NAME_TOO_LONG_ERROR;
   123             break;
   124         case ENETUNREACH:
   125             prError = PR_NETWORK_UNREACHABLE_ERROR;
   126             break;
   127         case ENFILE:
   128             prError = PR_SYS_DESC_TABLE_FULL_ERROR;
   129             break;
   130         /*
   131          * On SCO OpenServer 5, ENOBUFS is defined as ENOSR.
   132          */
   133 #if defined(ENOBUFS) && (ENOBUFS != ENOSR)
   134         case ENOBUFS:
   135             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   136             break;
   137 #endif
   138         case ENODEV:
   139             prError = PR_FILE_NOT_FOUND_ERROR;
   140             break;
   141         case ENOENT:
   142             prError = PR_FILE_NOT_FOUND_ERROR;
   143             break;
   144         case ENOLCK:
   145             prError = PR_FILE_IS_LOCKED_ERROR;
   146             break;
   147 #ifdef ENOLINK 
   148         case ENOLINK:
   149             prError = PR_REMOTE_FILE_ERROR;
   150             break;
   151 #endif
   152         case ENOMEM:
   153             prError = PR_OUT_OF_MEMORY_ERROR;
   154             break;
   155         case ENOPROTOOPT:
   156             prError = PR_INVALID_ARGUMENT_ERROR;
   157             break;
   158         case ENOSPC:
   159             prError = PR_NO_DEVICE_SPACE_ERROR;
   160             break;
   161 #ifdef ENOSR
   162         case ENOSR:
   163             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   164             break;
   165 #endif
   166         case ENOSYS:
   167             prError = PR_NOT_IMPLEMENTED_ERROR;
   168             break;
   169         case ENOTCONN:
   170             prError = PR_NOT_CONNECTED_ERROR;
   171             break;
   172         case ENOTDIR:
   173             prError = PR_NOT_DIRECTORY_ERROR;
   174             break;
   175         case ENOTSOCK:
   176             prError = PR_NOT_SOCKET_ERROR;
   177             break;
   178         case ENXIO:
   179             prError = PR_FILE_NOT_FOUND_ERROR;
   180             break;
   181         case EOPNOTSUPP:
   182             prError = PR_NOT_TCP_SOCKET_ERROR;
   183             break;
   184 #ifdef EOVERFLOW
   185         case EOVERFLOW:
   186             prError = PR_BUFFER_OVERFLOW_ERROR;
   187             break;
   188 #endif
   189         case EPERM:
   190             prError = PR_NO_ACCESS_RIGHTS_ERROR;
   191             break;
   192         case EPIPE:
   193             prError = PR_CONNECT_RESET_ERROR;
   194             break;
   195 #ifdef EPROTO
   196         case EPROTO:
   197             prError = PR_IO_ERROR;
   198             break;
   199 #endif
   200         case EPROTONOSUPPORT:
   201             prError = PR_PROTOCOL_NOT_SUPPORTED_ERROR;
   202             break;
   203         case EPROTOTYPE:
   204             prError = PR_ADDRESS_NOT_SUPPORTED_ERROR;
   205             break;
   206         case ERANGE:
   207             prError = PR_INVALID_METHOD_ERROR;
   208             break;
   209         case EROFS:
   210             prError = PR_READ_ONLY_FILESYSTEM_ERROR;
   211             break;
   212         case ESPIPE:
   213             prError = PR_INVALID_METHOD_ERROR;
   214             break;
   215         case ETIMEDOUT:
   216             prError = PR_IO_TIMEOUT_ERROR;
   217             break;
   218 #if EWOULDBLOCK != EAGAIN
   219         case EWOULDBLOCK:
   220             prError = PR_WOULD_BLOCK_ERROR;
   221             break;
   222 #endif
   223         case EXDEV:
   224             prError = PR_NOT_SAME_DEVICE_ERROR;
   225             break;
   226         default:
   227             prError = PR_UNKNOWN_ERROR;
   228             break;
   229     }
   230     PR_SetError(prError, err);
   231 }
   233 void _MD_unix_map_opendir_error(int err)
   234 {
   235     _MD_unix_map_default_error(err);
   236 }
   238 void _MD_unix_map_closedir_error(int err)
   239 {
   240     PRErrorCode prError;
   242     switch (err) {
   243         case EINVAL:
   244             prError = PR_BAD_DESCRIPTOR_ERROR;
   245             break;
   246         default:
   247             _MD_unix_map_default_error(err);
   248             return;
   249     }
   250     PR_SetError(prError, err);
   251 }
   253 void _MD_unix_readdir_error(int err)
   254 {
   255     PRErrorCode prError;
   257     switch (err) {
   258         case 0:
   259         case ENOENT:
   260             prError = PR_NO_MORE_FILES_ERROR;
   261             break;
   262 #ifdef EOVERFLOW
   263         case EOVERFLOW:
   264             prError = PR_IO_ERROR;
   265             break;
   266 #endif
   267         case EINVAL:
   268             prError = PR_IO_ERROR;
   269             break;
   270         case ENXIO:
   271             prError = PR_IO_ERROR;
   272             break;
   273         default:
   274             _MD_unix_map_default_error(err);
   275             return;
   276     }
   277     PR_SetError(prError, err);
   278 }
   280 void _MD_unix_map_unlink_error(int err)
   281 {
   282     PRErrorCode prError;
   284     switch (err) {
   285         case EPERM:
   286             prError = PR_IS_DIRECTORY_ERROR;
   287             break;
   288         default:
   289             _MD_unix_map_default_error(err);
   290             return;
   291     }
   292     PR_SetError(prError, err);
   293 }
   295 void _MD_unix_map_stat_error(int err)
   296 {
   297     PRErrorCode prError;
   299     switch (err) {
   300         case ETIMEDOUT:
   301             prError = PR_REMOTE_FILE_ERROR;
   302             break;
   303         default:
   304             _MD_unix_map_default_error(err);
   305             return;
   306     }
   307     PR_SetError(prError, err);
   308 }
   310 void _MD_unix_map_fstat_error(int err)
   311 {
   312     PRErrorCode prError;
   314     switch (err) {
   315         case ETIMEDOUT:
   316             prError = PR_REMOTE_FILE_ERROR;
   317             break;
   318         default:
   319             _MD_unix_map_default_error(err);
   320             return;
   321     }
   322     PR_SetError(prError, err);
   323 }
   325 void _MD_unix_map_rename_error(int err)
   326 {
   327     PRErrorCode prError;
   329     switch (err) {
   330         case EEXIST:
   331             prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
   332             break;
   333         default:
   334             _MD_unix_map_default_error(err);
   335             return;
   336     }
   337     PR_SetError(prError, err);
   338 }
   340 void _MD_unix_map_access_error(int err)
   341 {
   342     PRErrorCode prError;
   344     switch (err) {
   345         case ETIMEDOUT:
   346             prError = PR_REMOTE_FILE_ERROR;
   347             break;
   348         default:
   349             _MD_unix_map_default_error(err);
   350             return;
   351     }
   352     PR_SetError(prError, err);
   353 }
   355 void _MD_unix_map_mkdir_error(int err)
   356 {
   357     _MD_unix_map_default_error(err);
   358 }
   360 void _MD_unix_map_rmdir_error(int err)
   361 {
   362     PRErrorCode prError;
   364     switch (err) {
   365         /*
   366          * On AIX 4.3, ENOTEMPTY is defined as EEXIST.
   367          */
   368 #if ENOTEMPTY != EEXIST
   369         case ENOTEMPTY:
   370             prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
   371             break;
   372 #endif
   373         case EEXIST:
   374             prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
   375             break;
   376         case EINVAL:
   377             prError = PR_DIRECTORY_NOT_EMPTY_ERROR;
   378             break;
   379         case ETIMEDOUT:
   380             prError = PR_REMOTE_FILE_ERROR;
   381             break;
   382         default:
   383             _MD_unix_map_default_error(err);
   384             return;
   385     }
   386     PR_SetError(prError, err);
   387 }
   389 void _MD_unix_map_read_error(int err)
   390 {
   391     PRErrorCode prError;
   393     switch (err) {
   394         case EINVAL:
   395             prError = PR_INVALID_METHOD_ERROR;
   396             break;
   397         case ENXIO:
   398             prError = PR_INVALID_ARGUMENT_ERROR;
   399             break;
   400         default:
   401             _MD_unix_map_default_error(err);
   402             return;
   403     }
   404     PR_SetError(prError, err);
   405 }
   407 void _MD_unix_map_write_error(int err)
   408 {
   409     PRErrorCode prError;
   411     switch (err) {
   412         case EINVAL:
   413             prError = PR_INVALID_METHOD_ERROR;
   414             break;
   415         case ENXIO:
   416             prError = PR_INVALID_METHOD_ERROR;
   417             break;
   418         case ETIMEDOUT:
   419             prError = PR_REMOTE_FILE_ERROR;
   420             break;
   421         default:
   422             _MD_unix_map_default_error(err);
   423             return;
   424     }
   425     PR_SetError(prError, err);
   426 }
   428 void _MD_unix_map_lseek_error(int err)
   429 {
   430     _MD_unix_map_default_error(err);
   431 }
   433 void _MD_unix_map_fsync_error(int err)
   434 {
   435     PRErrorCode prError;
   437     switch (err) {
   438         case ETIMEDOUT:
   439             prError = PR_REMOTE_FILE_ERROR;
   440             break;
   441         case EINVAL:
   442             prError = PR_INVALID_METHOD_ERROR;
   443             break;
   444         default:
   445             _MD_unix_map_default_error(err);
   446             return;
   447     }
   448     PR_SetError(prError, err);
   449 }
   451 void _MD_unix_map_close_error(int err)
   452 {
   453     PRErrorCode prError;
   455     switch (err) {
   456         case ETIMEDOUT:
   457             prError = PR_REMOTE_FILE_ERROR;
   458             break;
   459         default:
   460             _MD_unix_map_default_error(err);
   461             return;
   462     }
   463     PR_SetError(prError, err);
   464 }
   466 void _MD_unix_map_socket_error(int err)
   467 {
   468     PRErrorCode prError;
   470     switch (err) {
   471         case ENOMEM:
   472             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   473             break;
   474         default:
   475             _MD_unix_map_default_error(err);
   476             return;
   477     }
   478     PR_SetError(prError, err);
   479 }
   481 void _MD_unix_map_socketavailable_error(int err)
   482 {
   483     PR_SetError(PR_BAD_DESCRIPTOR_ERROR, err);
   484 }
   486 void _MD_unix_map_recv_error(int err)
   487 {
   488     _MD_unix_map_default_error(err);
   489 }
   491 void _MD_unix_map_recvfrom_error(int err)
   492 {
   493     _MD_unix_map_default_error(err);
   494 }
   496 void _MD_unix_map_send_error(int err)
   497 {
   498     _MD_unix_map_default_error(err);
   499 }
   501 void _MD_unix_map_sendto_error(int err)
   502 {
   503     _MD_unix_map_default_error(err);
   504 }
   506 void _MD_unix_map_writev_error(int err)
   507 {
   508     _MD_unix_map_default_error(err);
   509 }
   511 void _MD_unix_map_accept_error(int err)
   512 {
   513     PRErrorCode prError;
   515     switch (err) {
   516         case ENODEV:
   517             prError = PR_NOT_TCP_SOCKET_ERROR;
   518             break;
   519         default:
   520             _MD_unix_map_default_error(err);
   521             return;
   522     }
   523     PR_SetError(prError, err);
   524 }
   526 void _MD_unix_map_connect_error(int err)
   527 {
   528     PRErrorCode prError;
   530     switch (err) {
   531 #if defined(UNIXWARE)
   532         /*
   533          * On some platforms, if we connect to a port on the local host 
   534          * (the loopback address) that no process is listening on, we get 
   535          * EIO instead of ECONNREFUSED.
   536          */
   537         case EIO:
   538             prError = PR_CONNECT_REFUSED_ERROR;
   539             break;
   540 #endif
   541         case ENXIO:
   542             prError = PR_IO_ERROR;
   543             break;
   544         default:
   545             _MD_unix_map_default_error(err);
   546             return;
   547     }
   548     PR_SetError(prError, err);
   549 }
   551 void _MD_unix_map_bind_error(int err)
   552 {
   553     PRErrorCode prError;
   555     switch (err) {
   556         case EINVAL:
   557             prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR;
   558             break;
   559         default:
   560             _MD_unix_map_default_error(err);
   561             return;
   562     }
   563     PR_SetError(prError, err);
   564 }
   566 void _MD_unix_map_listen_error(int err)
   567 {
   568     _MD_unix_map_default_error(err);
   569 }
   571 void _MD_unix_map_shutdown_error(int err)
   572 {
   573     _MD_unix_map_default_error(err);
   574 }
   576 void _MD_unix_map_socketpair_error(int err)
   577 {
   578     PRErrorCode prError;
   580     switch (err) {
   581         case ENOMEM:
   582             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   583             break;
   584         default:
   585             _MD_unix_map_default_error(err);
   586             return;
   587     }
   588     PR_SetError(prError, err);
   589 }
   591 void _MD_unix_map_getsockname_error(int err)
   592 {
   593     PRErrorCode prError;
   595     switch (err) {
   596         case ENOMEM:
   597             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   598             break;
   599         default:
   600             _MD_unix_map_default_error(err);
   601             return;
   602     }
   603     PR_SetError(prError, err);
   604 }
   606 void _MD_unix_map_getpeername_error(int err)
   607 {
   608     PRErrorCode prError;
   610     switch (err) {
   611         case ENOMEM:
   612             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   613             break;
   614         default:
   615             _MD_unix_map_default_error(err);
   616             return;
   617     }
   618     PR_SetError(prError, err);
   619 }
   621 void _MD_unix_map_getsockopt_error(int err)
   622 {
   623     PRErrorCode prError;
   625     switch (err) {
   626         case EINVAL:
   627             prError = PR_BUFFER_OVERFLOW_ERROR;
   628             break;
   629         case ENOMEM:
   630             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   631             break;
   632         default:
   633             _MD_unix_map_default_error(err);
   634             return;
   635     }
   636     PR_SetError(prError, err);
   637 }
   639 void _MD_unix_map_setsockopt_error(int err)
   640 {
   641     PRErrorCode prError;
   643     switch (err) {
   644         case EINVAL:
   645             prError = PR_BUFFER_OVERFLOW_ERROR;
   646             break;
   647         case ENOMEM:
   648             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   649             break;
   650         default:
   651             _MD_unix_map_default_error(err);
   652             return;
   653     }
   654     PR_SetError(prError, err);
   655 }
   657 void _MD_unix_map_open_error(int err)
   658 {
   659     PRErrorCode prError;
   661     switch (err) {
   662         case EAGAIN:
   663             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   664             break;
   665         case EBUSY:
   666             prError = PR_IO_ERROR;
   667             break;
   668         case ENODEV:
   669             prError = PR_FILE_NOT_FOUND_ERROR;
   670             break;
   671         case ENOMEM:
   672             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   673             break;
   674 #ifdef EOVERFLOW
   675         case EOVERFLOW:
   676             prError = PR_FILE_TOO_BIG_ERROR;
   677             break;
   678 #endif
   679         case ETIMEDOUT:
   680             prError = PR_REMOTE_FILE_ERROR;
   681             break;
   682         default:
   683             _MD_unix_map_default_error(err);
   684             return;
   685     }
   686     PR_SetError(prError, err);
   687 }
   689 void _MD_unix_map_mmap_error(int err)
   690 {
   691     PRErrorCode prError;
   693     switch (err) {
   694         case EAGAIN:
   695             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   696             break;
   697         case EMFILE:
   698             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   699             break;
   700         case ENODEV:
   701             prError = PR_OPERATION_NOT_SUPPORTED_ERROR;
   702             break;
   703         case ENXIO:
   704             prError = PR_INVALID_ARGUMENT_ERROR;
   705             break;
   706         default:
   707             _MD_unix_map_default_error(err);
   708             return;
   709     }
   710     PR_SetError(prError, err);
   711 }
   713 void _MD_unix_map_gethostname_error(int err)
   714 {
   715     _MD_unix_map_default_error(err);
   716 }
   718 void _MD_unix_map_select_error(int err)
   719 {
   720     _MD_unix_map_default_error(err);
   721 }
   723 #if defined(_PR_POLL_AVAILABLE) || defined(_PR_NEED_FAKE_POLL)
   724 void _MD_unix_map_poll_error(int err)
   725 {
   726     PRErrorCode prError;
   728     switch (err) {
   729         case EAGAIN:
   730             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   731             break;
   732         default:
   733             _MD_unix_map_default_error(err);
   734             return;
   735     }
   736     PR_SetError(prError, err);
   737 }
   739 void _MD_unix_map_poll_revents_error(int err)
   740 {
   741     if (err & POLLNVAL)
   742         PR_SetError(PR_BAD_DESCRIPTOR_ERROR, EBADF);
   743     else if (err & POLLHUP)
   744         PR_SetError(PR_CONNECT_RESET_ERROR, EPIPE);
   745     else if (err & POLLERR)
   746         PR_SetError(PR_IO_ERROR, EIO);
   747     else
   748         PR_SetError(PR_UNKNOWN_ERROR, err);
   749 }
   750 #endif /* _PR_POLL_AVAILABLE || _PR_NEED_FAKE_POLL */
   753 void _MD_unix_map_flock_error(int err)
   754 {
   755     PRErrorCode prError;
   757     switch (err) {
   758         case EINVAL:
   759             prError = PR_BAD_DESCRIPTOR_ERROR;
   760             break;
   761         case EWOULDBLOCK:
   762             prError = PR_FILE_IS_LOCKED_ERROR;
   763             break;
   764         default:
   765             _MD_unix_map_default_error(err);
   766             return;
   767     }
   768     PR_SetError(prError, err);
   769 }
   771 void _MD_unix_map_lockf_error(int err)
   772 {
   773     PRErrorCode prError;
   775     switch (err) {
   776         case EACCES:
   777             prError = PR_FILE_IS_LOCKED_ERROR;
   778             break;
   779         case EDEADLK:
   780             prError = PR_INSUFFICIENT_RESOURCES_ERROR;
   781             break;
   782         default:
   783             _MD_unix_map_default_error(err);
   784             return;
   785     }
   786     PR_SetError(prError, err);
   787 }
   789 #ifdef AIX
   790 void _MD_aix_map_sendfile_error(int err)
   791 {
   792     _MD_unix_map_default_error(err);
   793 }
   794 #endif /* AIX */
   796 #ifdef HPUX11
   797 void _MD_hpux_map_sendfile_error(int err)
   798 {
   799     _MD_unix_map_default_error(err);
   800 }
   801 #endif /* HPUX11 */
   803 #ifdef SOLARIS
   804 void _MD_solaris_map_sendfile_error(int err)
   805 {
   806     PRErrorCode prError;
   808     switch (err) {
   809         /*
   810          * Solaris defines a 0 return value for sendfile to mean end-of-file.
   811          */
   812         case 0:
   813             prError = PR_END_OF_FILE_ERROR;
   814             break;
   816         default:
   817             _MD_unix_map_default_error(err) ;
   818             return;
   819     }
   820     PR_SetError(prError, err);
   821 }
   822 #endif /* SOLARIS */
   824 #ifdef LINUX
   825 void _MD_linux_map_sendfile_error(int err)
   826 {
   827     _MD_unix_map_default_error(err) ;
   828 }
   829 #endif /* LINUX */

mercurial