ioerror.cas
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:7k
源码类别:

DVD

开发平台:

Others

  1. /*
  2.  *      Paradigm C/C++ Run-Time Library - Version 5.0
  3.  *
  4.  *      Copyright (c) 1998 Paradigm Systems.  All rights reserved.
  5.  *      Portions Copyright (c) 1996 Borland International.
  6.  *
  7.  *      $Revision: 7 $
  8.  *      $Workfile: ioerror.cas $
  9.  *
  10.  * function(s)
  11.  *        __IOerror - set error variables, return -1
  12.  *        __DOSerror - set error variables, return _doserrno
  13.  */
  14. #pragma inline
  15. #include "ServicesIncludeasmrules.h"
  16. #include "ServicesInclude_io.h"
  17. #include <errno.h>
  18. #include "IncludeSysDefs.h"
  19. #pragma codeseg _TEXT "CODE"
  20. int     _doserrno = 0 ;
  21. extern CONST int _I49sys_nerr;
  22. CONST char    _dosErrorToSV [] =
  23. {
  24.     0,                  /*  0 - OK                   */
  25.     EINVAL,             /*  1 - e_badFunction        */
  26.     ENOENT,             /*  2 - e_fileNotFound       */
  27.     ENOENT,             /*  3 - e_pathNotFound       */
  28.     EMFILE,             /*  4 - e_tooManyOpen        */
  29.     EACCES,             /*  5 - e_accessDenied       */
  30.     EBADF,              /*  6 - e_badHandle          */
  31.     ENOMEM,             /*  7 - e_mcbDestroyed       */
  32.     ENOMEM,             /*  8 - e_outOfMemory        */
  33.     ENOMEM,             /*  9 - e_badBlock           */
  34.     E2BIG,              /* 10  e_badEnviron         */
  35.     ENOEXEC,            /* 11  e_badFormat          */
  36.     EACCES,             /* 12  e_badAccess          */
  37.     EINVAL,             /* 13  e_badData            */
  38.     EFAULT,             /* 14  reserved             */
  39.     EACCES,             /* 15  e_badDrive           */
  40.     EACCES,             /* 16  e_isCurrentDir       */
  41.     ENOTSAM,            /* 17  e_notSameDevice      */
  42.     ENOENT,             /* 18  e_noMoreFiles        */
  43.     EROFS,              /* 19  e_readOnly           */
  44.     ENXIO,              /* 20  e_unknownUnit        */
  45.     EBUSY,              /* 21  e_notReady           */
  46.     EIO,                /* 22  e_unknownCommand     */
  47.     EIO,                /* 23  e_dataError          */
  48.     EIO,                /* 24  e_badRequestLength   */
  49.     EIO,                /* 25  e_seekError          */
  50.     EIO,                /* 26  e_unknownMedia       */
  51.     ENXIO,              /* 27  e_sectorNotFound     */
  52.     EBUSY,              /* 28  e_outOfPaper         */
  53.     EIO,                /* 29  e_writeFault         */
  54.     EIO,                /* 30  e_readFault          */
  55.     EIO,                /* 31  e_generalFault       */
  56.     EACCES,             /* 32  e_sharing            */
  57.     EACCES,             /* 33  e_lock               */
  58.     ENXIO,              /* 34  e_diskChange         */
  59.     ENFILE,             /* 35  e_FCBunavailable     */
  60.     ENFILE,             /* 36  e_sharingOverflow    */
  61.     EFAULT, EFAULT,
  62.     EFAULT, EFAULT,
  63.     EFAULT, EFAULT,
  64.     EFAULT, EFAULT,
  65.     EFAULT, EFAULT,
  66.     EFAULT, EFAULT,
  67.     EFAULT,             /* 37-49  reserved          */
  68.     ENODEV,             /* 50  e_networkUnsupported */
  69.     EBUSY,              /* 51  e_notListening       */
  70.     EEXIST,             /* 52  e_dupNameOnNet       */
  71.     ENOENT,             /* 53  e_nameNotOnNet       */
  72.     EBUSY,              /* 54  e_netBusy            */
  73.     ENODEV,             /* 55  e_netDeviceGone      */
  74.     EAGAIN,             /* 56  e_netCommandLimit    */
  75.     EIO,                /* 57  e_netHardError       */
  76.     EIO,                /* 58  e_wrongNetResponse   */
  77.     EIO,                /* 59  e_netError           */
  78.     EINVAL,             /* 60  e_remoteIncompatible */
  79.     EFBIG,              /* 61  e_printQueueFull     */
  80.     ENOSPC,             /* 62  e_printFileSpace     */
  81.     ENOENT,             /* 63  e_printFileDeleted   */
  82.     ENOENT,             /* 64  e_netNameDeleted     */
  83.     EACCES,             /* 65  e_netAccessDenied    */
  84.     ENODEV,             /* 66  e_netDeviceWrong     */
  85.     ENOENT,             /* 67  e_netNameNotFound    */
  86.     ENFILE,             /* 68  e_netNameLimit       */
  87.     EIO,                /* 69  e_netBIOSlimit       */
  88.     EAGAIN,             /* 70  e_paused             */
  89.     EINVAL,             /* 71  e_netRequestRefused  */
  90.     EAGAIN,             /* 72  e_redirectionPaused  */
  91.     EFAULT, EFAULT,
  92.     EFAULT, EFAULT,
  93.     EFAULT, EFAULT,
  94.     EFAULT,             /* 73- 79  reserved         */
  95.     EEXIST,             /* 80  e_fileExists         */
  96.     EFAULT,             /* 81  reserved             */
  97.     ENOSPC,             /* 82  e_cannotMake         */
  98.     EIO,                /* 83  e_failInt24          */
  99.     ENFILE,             /* 84  e_redirectionLimit   */
  100.     EEXIST,             /* 85  e_dupRedirection     */
  101.     EPERM,              /* 86  e_password           */
  102.     EINVAL,             /* 87  e_parameter          */
  103.     EIO,                /* 88  e_netDevice          */
  104. };
  105. /*-----------------------------------------------------------------------*
  106. Name            __IOerror - set error variables
  107. Usage           #include <_io.h>
  108.                 int  pascal  __IOerror (int dosErr);
  109. Prototype in    _io.h
  110. Description     dosErr  is  a  MSDOS  error  number,  or,  if negative, the
  111.                 negative of a System V error number.
  112.                 __IOerror  sets the  error  number  into  _doserrno. If not
  113.                 negative then  translate it into  System V equivalent.  Put
  114.                 (translated) value into _errno.
  115. Return value    __IOerror returns -1, the usual RTL error return.
  116. *------------------------------------------------------------------------*/
  117. int pascal near __IOerror(int dosErr)
  118. {
  119.         int     val = dosErr;
  120.         if (val < 0)
  121.                 goto ser_maybeSVerr;
  122.         if (val <= e_dosFinalError)
  123.                 goto ser_dosError;
  124. /*
  125.   Being defensive, we must assume that the error routine can be passed
  126.   a bad argument.  In such circumstances, complaining about the
  127.   parameter seems the most reasonable thing to do.
  128. */
  129. ser_errorFault:
  130.         val = e_parameter;
  131. ser_dosError:
  132.         _doserrno = val;
  133.         val = _dosErrorToSV[val];
  134.         goto ser_end;
  135. /*
  136.   This function may be called with a negated System V error code when
  137.   no appropriate MSDOS error code exists.  In such cases the doserrno
  138.   is set to non-zero, but using a number which has no known cause.
  139. */
  140. ser_maybeSVerr:
  141.         val = -val;
  142.         if (val > _I49sys_nerr)
  143.                 goto ser_errorFault;
  144.         _doserrno = -1;
  145. ser_end:
  146.         errno = val;
  147.         return -1;
  148. }
  149. /*-----------------------------------------------------------------------*
  150. Name            __DOSerror - set error variables
  151. Usage           #include <_io.h>
  152.                 int  pascal  __DOSerror (int dosErr);
  153. Prototype in    _io.h
  154. Description     __DOSerror is identical to __IOerror, except that
  155.                 it returns the DOS error code passed to it, instead
  156.                 of -1.
  157. Return value    __DOSerror returns dosErr.
  158. *------------------------------------------------------------------------*/
  159. int pascal near __DOSerror(int dosErr)
  160. {
  161.     __IOerror(dosErr);
  162.     return (dosErr);
  163. }