home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tkisrc04.zip / tcl / os2 / tclOS2Error.c < prev    next >
C/C++ Source or Header  |  1998-08-07  |  11KB  |  293 lines

  1. /* 
  2.  * tclOS2Error.c --
  3.  *
  4.  *    This file contains code for converting from OS/2 errors to
  5.  *    errno errors.
  6.  *
  7.  * Copyright (c) 1995-1996 Sun Microsystems, Inc.
  8.  * Copyright (c) 1996-1997 Illya Vaes
  9.  *
  10.  * See the file "license.terms" for information on usage and redistribution
  11.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12.  */
  13.  
  14.  
  15. #include "tclInt.h"
  16. #include "tclPort.h"
  17.  
  18. /*
  19.  * The following table contains the mapping from OS/2 errors to
  20.  * errno errors.
  21.  */
  22.  
  23. static char errorTable[] = {
  24.     0,        /* NO_ERROR            0 */
  25.     EINVAL,    /* ERROR_INVALID_FUNCTION    1 */
  26.     ENOENT,    /* ERROR_FILE_NOT_FOUND        2 */
  27.     ENOENT,    /* ERROR_PATH_NOT_FOUND        3 */
  28.     EMFILE,    /* ERROR_TOO_MANY_OPEN_FILES    4 */
  29.     EACCES,    /* ERROR_ACCESS_DENIED        5 */
  30.     EBADF,    /* ERROR_INVALID_HANDLE        6 */
  31.     ENOMEM,    /* ERROR_ARENA_TRASHED        7 */
  32.     ENOMEM,    /* ERROR_NOT_ENOUGH_MEMORY    8 */
  33.     ENOMEM,    /* ERROR_INVALID_BLOCK        9 */
  34.     E2BIG,    /* ERROR_BAD_ENVIRONMENT    10 */
  35.     ENOEXEC,    /* ERROR_BAD_FORMAT        11 */
  36.     EACCES,    /* ERROR_INVALID_ACCESS        12 */
  37.     EINVAL,    /* ERROR_INVALID_DATA        13 */
  38.     ENOMEM,    /* ERROR_OUT_OF_MEMORY        14 */
  39.     ENOENT,    /* ERROR_INVALID_DRIVE        15 */
  40.     EACCES,    /* ERROR_CURRENT_DIRECTORY    16 */
  41.     EXDEV,    /* ERROR_NOT_SAME_DEVICE    17 */
  42.     ENOENT,    /* ERROR_NO_MORE_FILES        18 */
  43.     EROFS,    /* ERROR_WRITE_PROTECT        19 */
  44.     EIO,    /* ERROR_BAD_UNIT        20 */
  45.     EAGAIN,    /* ERROR_NOT_READY        21 */
  46.     EIO,    /* ERROR_BAD_COMMAND        22 */
  47.     EIO,    /* ERROR_CRC            23 */
  48.     EIO,    /* ERROR_BAD_LENGTH        24 */
  49.     EIO,    /* ERROR_SEEK            25 */
  50.     EIO,    /* ERROR_NOT_DOS_DISK        26 */
  51.     EIO,    /* ERROR_SECTOR_NOT_FOUND    27 */
  52.     EAGAIN,    /* ERROR_OUT_OF_PAPER        28 */
  53.     EIO,    /* ERROR_WRITE_FAULT        29 */
  54.     EIO,    /* ERROR_READ_FAULT        30 */
  55.     EIO,    /* ERROR_GEN_FAILURE        31 */
  56.     EACCES,    /* ERROR_SHARING_VIOLATION    32 */
  57.     EACCES,    /* ERROR_LOCK_VIOLATION        33 */
  58.     EIO,    /* ERROR_WRONG_DISK        34 */
  59.     ENOENT,    /* ERROR_FCB_UNAVAILABLE    35 */
  60.     ENOENT,    /* ERROR_SHARING_BUFFER_EXCEEDED    36 */
  61.     EINVAL,    /* ERROR_CODE_PAGE_MISMATCHED    37 */
  62.     EIO,    /* ERROR_HANDLE_EOF        38 */
  63.     ENOSPC,    /* ERROR_HANDLE_DISK_FULL    39 */
  64.     EINVAL,    /* 40 */
  65.     EINVAL,    /* 41 */
  66.     EINVAL,    /* 42 */
  67.     EINVAL,    /* 43 */
  68.     EINVAL,    /* 44 */
  69.     EINVAL,    /* 45 */
  70.     EINVAL,    /* 46 */
  71.     EINVAL,    /* 47 */
  72.     EINVAL,    /* 48 */
  73.     EINVAL,    /* 49 */
  74.     ENOENT,    /* ERROR_NOT_SUPPORTED        50 */
  75.     EAGAIN,    /* ERROR_REM_NOT_LIST        51 */
  76.     EEXIST,    /* ERROR_DUP_NAME        52 */
  77.     ENOENT,    /* ERROR_BAD_NETPATH        53 */
  78.     EAGAIN,    /* ERROR_NETWORK_BUSY        54 */
  79.     ENOENT,    /* ERROR_DEV_NOT_EXIST        55 */
  80.     EAGAIN,    /* ERROR_TOO_MANY_CMDS        56 */
  81.     EIO,    /* ERROR_ADAP_HDW_ERR        57 */
  82.     EIO,    /* ERROR_BAD_NET_RESP        58 */
  83.     EIO,    /* ERROR_UNEXP_NET_ERR        59 */
  84.     EINVAL,    /* ERROR_BAD_REM_ADAP        60 */
  85.     ENOSPC,    /* ERROR_PRINTQ_FULL        61 */
  86.     ENOSPC,    /* ERROR_NO_SPOOL_SPACE        62 */
  87.     ENOENT,    /* ERROR_PRINT_CANCELLED    63 */
  88.     ENOENT,    /* ERROR_NETNAME_DELETED    64 */
  89.     EACCES,    /* ERROR_NETWORK_ACCESS_DENIED    65 */
  90.     ENOENT,    /* ERROR_BAD_DEV_TYPE        66 */
  91.     ENOENT,    /* ERROR_BAD_NET_NAME        67 */
  92.     ENOENT,    /* ERROR_TOO_MANY_NAMES        68 */
  93.     EIO,    /* ERROR_TOO_MANY_SESS        69 */
  94.     EAGAIN,    /* ERROR_SHARING_PAUSED        70 */
  95.     EINVAL,    /* ERROR_REQ_NOT_ACCEP        71 */
  96.     EAGAIN,    /* ERROR_REDIR_PAUSED        72 */
  97.     EACCES,    /* ERROR_SBCS_ATT_WRITE_PROT    73 */
  98.     EAGAIN,    /* ERROR_SBCS_GENERAL_FAILURE    74 */
  99.     ENOMEM,    /* ERROR_XGA_OUT_MEMORY        75 */
  100.     EINVAL,    /* 76 */
  101.     EINVAL,    /* 77 */
  102.     EINVAL,    /* 78 */
  103.     EINVAL,    /* 79 */
  104.     EEXIST,    /* ERROR_FILE_EXISTS        80 */
  105.     EINVAL,    /* ERROR_DUP_FCB        81 */
  106.     ENOSPC,    /* ERROR_CANNOT_MAKE        82 */
  107.     EIO,    /* ERROR_FAIL_I24        83 */
  108.     ENOENT,    /* ERROR_OUT_OF_STRUCTURES    84 */
  109.     EEXIST,    /* ERROR_ALREADY_ASSIGNED    85 */
  110.     EPERM,    /* ERROR_INVALID_PASSWORD    86 */
  111.     EINVAL,    /* ERROR_INVALID_PARAMETER    87 */
  112.     EIO,    /* ERROR_NET_WRITE_FAULT    88 */
  113.     EAGAIN,    /* ERROR_NO_PROC_SLOTS        89 */
  114.     EINVAL,    /* ERROR_NOT_FROZEN        90 */
  115.     EINVAL,    /* ERR_TSTOVFL            91 */
  116.     EINVAL,    /* ERR_TSTDUP            92 */
  117.     EINVAL,    /* ERROR_NO_ITEMS        93 */
  118.     EINVAL,    /* 94 */
  119.     EINVAL,    /* ERROR_INTERRUPT        95 */
  120.     EINVAL,    /* 96 */
  121.     EINVAL,    /* 97 */
  122.     EINVAL,    /* 98 */
  123.     EAGAIN,    /* ERROR_DEVICE_IN_USE        99 */
  124.     EINVAL,    /* ERROR_TOO_MANY_SEMAPHORES    100 */
  125.     EEXIST,    /* ERROR_EXCL_SEM_ALREADY_OWNED    101 */
  126.     EACCES,    /* ERROR_SEM_IS_SET        102 */
  127.     EINVAL,    /* ERROR_TOO_MANY_SEM_REQUESTS    103 */
  128.     EACCES,    /* ERROR_INVALID_AT_INTERRUPT_TIME    104 */
  129.     EINVAL,    /* ERROR_SEM_OWNER_DIED        105 */
  130.     EINVAL,    /* ERROR_SEM_USER_LIMIT        106 */
  131.     EXDEV,    /* ERROR_DISK_CHANGE        107 */
  132.     EAGAIN,    /* ERROR_DRIVE_LOCKED        108 */
  133.     EPIPE,    /* ERROR_BROKEN_PIPE        109 */
  134.     ENOENT,    /* ERROR_OPEN_FAILED        110 */
  135.     EIO,    /* ERROR_BUFFER_OVERFLOW    111 */
  136.     ENOSPC,    /* ERROR_DISK_FULL        112 */
  137.     EMFILE,    /* ERROR_NO_MORE_SEARCH_HANDLES    113 */
  138.     EBADF,    /* ERROR_INVALID_TARGET_HANDLE    114 */
  139.     EACCES,    /* ERROR_PROTECTION_VIOLATION    115 */
  140.     EINVAL,    /* ERROR_VIOKBD_REQUEST        116 */
  141.     EINVAL,    /* ERROR_INVALID_CATEGORY    117 */
  142.     EINVAL,    /* ERROR_INVALID_VERIFY_SWITCH    118 */
  143.     ENOENT,    /* ERROR_BAD_DRIVER_LEVEL    119 */
  144.     ENOENT,    /* ERROR_CALL_NOT_IMPLEMENTED    120 */
  145.     EINVAL,    /* ERROR_SEM_TIMEOUT        121 */
  146.     EINVAL,    /* ERROR_INSUFFICIENT_BUFFER    122 */
  147.     ENOENT,    /* ERROR_INVALID_NAME        123 */
  148.     ENOENT,    /* ERROR_INVALID_LEVEL        124 */
  149.     ENOENT,    /* ERROR_NO_VOLUME_LABEL    125 */
  150.     ENOENT,    /* ERROR_MOD_NOT_FOUND        126 */
  151.     ESRCH,    /* ERROR_PROC_NOT_FOUND        127 */
  152.     ECHILD,    /* ERROR_WAIT_NO_CHILDREN    128 */
  153.     ECHILD,    /* ERROR_CHILD_NOT_COMPLETE    129 */
  154.     EINVAL,    /* ERROR_DIRECT_ACCESS_HANDLE    130 */
  155.     EACCES,    /* ERROR_NEGATIVE_SEEK        131 */
  156.     ESPIPE,    /* ERROR_SEEK_ON_DEVICE        132 */
  157.     EACCES,    /* ERROR_IS_JOIN_TARGET        133 */
  158.     EACCES,    /* ERROR_IS_JOINED        134 */
  159.     EACCES,    /* ERROR_IS_SUBSTED        135 */
  160.     EACCES,    /* ERROR_NOT_JOINED        136 */
  161.     EACCES,    /* ERROR_NOT_SUBSTED        137 */
  162.     EACCES,    /* ERROR_JOIN_TO_JOIN        138 */
  163.     EACCES,    /* ERROR_SUBST_TO_SUBST        139 */
  164.     EACCES,    /* ERROR_JOIN_TO_SUBST        140 */
  165.     EACCES,    /* ERROR_SUBST_TO_JOIN        141 */
  166.     EAGAIN,    /* ERROR_BUSY_DRIVE        142 */
  167.     EACCES,    /* ERROR_SAME_DRIVE        143 */
  168.     EACCES,    /* ERROR_DIR_NOT_ROOT        144 */
  169.     EACCES,    /* ERROR_DIR_NOT_EMPTY        145 */
  170.     EACCES,    /* ERROR_IS_SUBST_PATH        146 */
  171.     EACCES,    /* ERROR_IS_JOIN_PATH        147 */
  172.     EAGAIN,    /* ERROR_PATH_BUSY        148 */
  173.     EACCES,    /* ERROR_IS_SUBST_TARGET    149 */
  174.     EINVAL,    /* ERROR_SYSTEM_TRACE        150 */
  175.     EINVAL,    /* ERROR_INVALID_EVENT_COUNT    151 */
  176.     EINVAL,    /* ERROR_TOO_MANY_MUXWAITERS    152 */
  177.     EINVAL,    /* ERROR_INVALID_LIST_FORMAT    153 */
  178.     EINVAL,    /* ERROR_LABEL_TOO_LONG        154 */
  179.     EINVAL,    /* ERROR_TOO_MANY_TCBS        155 */
  180.     EACCES,    /* ERROR_SIGNAL_REFUSED        156 */
  181.     EINVAL,    /* ERROR_DISCARDED        157 */
  182.     EACCES,    /* ERROR_NOT_LOCKED        158 */
  183.     ENOENT,    /* ERROR_BAD_THREADID_ADDR    159 */
  184.     ENOENT,    /* ERROR_BAD_ARGUMENTS        160 */
  185.     ENOENT,    /* ERROR_BAD_PATHNAME        161 */
  186.     EINVAL,    /* ERROR_SIGNAL_PENDING        162 */
  187.     EINVAL,    /* ERROR_UNCERTAIN_MEDIA    163 */
  188.     EINVAL,    /* ERROR_MAX_THRDS_REACHED    164 */
  189.     ENOENT,    /* ERROR_MONITORS_NOT_SUPPORTED    165 */
  190.     EINVAL,    /* ERROR_UNC_DRIVER_NOT_INSTALLED    166 */
  191.     EACCES,    /* ERROR_LOCK_FAILED        167 */
  192.     EINVAL,    /* ERROR_SWAPIO_FAILED        168 */
  193.     EINVAL,    /* ERROR_SWAPIN_FAILED        169 */
  194.     EAGAIN,    /* ERROR_BUSY            170 */
  195.     EINVAL,    /* 171 */
  196.     EINVAL,    /* 172 */
  197.     EINVAL,    /* ERROR_CANCEL_VIOLATION    173 */
  198.     ENOENT,    /* ERROR_ATOMIC_LOCK_NOT_SUPPORTED    174 */
  199.     ENOENT,    /* ERROR_READ_LOCKS_NOT_SUPPORTED    175 */
  200.     EINVAL,    /* 176 */
  201.     EINVAL,    /* 177 */
  202.     EINVAL,    /* 178 */
  203.     EINVAL,    /* 179 */
  204.     EINVAL,    /* ERROR_INVALID_SEGMENT_NUMBER    180 */
  205.     EINVAL,    /* ERROR_INVALID_CALLGATE    181 */
  206.     EINVAL,    /* ERROR_INVALID_ORDINAL    182 */
  207.     EEXIST,    /* ERROR_ALREADY_EXISTS        183 */
  208.     ECHILD,    /* ERROR_NO_CHILD_PROCESS    184 */
  209.     EINVAL,    /* ERROR_CHILD_ALIVE_NOWAIT    185 */
  210.     EINVAL,    /* ERROR_INVALID_FLAG_NUMBER    186 */
  211.     EINVAL,    /* ERROR_SEM_NOT_FOUND        187 */
  212.     EINVAL,    /* ERROR_INVALID_STARTING_CODESEG    188 */
  213.     EINVAL,    /* ERROR_INVALID_STACKSEG    189 */
  214.     EINVAL,    /* ERROR_INVALID_MODULETYPE    190 */
  215.     EINVAL,    /* ERROR_INVALID_EXE_SIGNATURE    191 */
  216.     EACCES,    /* ERROR_EXE_MARKED_INVALID    192 */
  217.     EINVAL,    /* ERROR_BAD_EXE_FORMAT        193 */
  218.     ERANGE,    /* ERROR_ITERATED_DATA_EXCEEDS_64K    194 */
  219.     EINVAL,    /* ERROR_INVALID_MINALLOCSIZE    195 */
  220.     EACCES,    /* ERROR_DYNLINK_FROM_INVALID_RING    196 */
  221.     EACCES,    /* ERROR_IOPL_NOT_ENABLED    197 */
  222.     EINVAL,    /* ERROR_INVALID_SEGDPL        198 */
  223.     ERANGE,    /* ERROR_AUTODATASEG_EXCEEDS_64K    199 */
  224.     EINVAL,    /* ERROR_RING2SEG_MUST_BE_MOVABLE    200 */
  225.     EINVAL,    /* ERROR_RELOCSRC_CHAIN_EXCEEDS_SEGLIMIT    201 */
  226.     EINVAL,    /* ERROR_INFLOOP_IN_RELOC_CHAIN    202 */
  227.     EINVAL,    /* ERROR_ENVVAR_NOT_FOUND    203 */
  228.     EINVAL,    /* ERROR_NOT_CURRENT_CTRY    204 */
  229.     EINVAL,    /* ERROR_NO_SIGNAL_SENT        205 */
  230.     ENAMETOOLONG,/* ERROR_FILENAME_EXCED_RANGE    206 */
  231.     EINVAL,    /* ERROR_RING2_STACK_IN_USE    207 */
  232.     ENAMETOOLONG,/* ERROR_META_EXPANSION_TOO_LONG    208 */
  233.     EINVAL,    /* ERROR_INVALID_SIGNAL_NUMBER    209 */
  234.     EINVAL,    /* ERROR_THREAD_1_INACTIVE    210 */
  235.     EINVAL,    /* ERROR_INFO_NOT_AVAIL        211 */
  236.     EACCES,    /* ERROR_LOCKED            212 */
  237.     EINVAL,    /* ERROR_BAD_DYNALINK        213 */
  238.     EINVAL,    /* ERROR_TOO_MANY_MODULES    214 */
  239.     EINVAL,    /* ERROR_NESTING_NOT_ALLOWED    215 */
  240.     EINVAL,    /* ERROR_CANNOT_SHRINK        216 */
  241.     EINVAL,    /* ERROR_ZOMBIE_PROCESS        217 */
  242.     EINVAL,    /* ERROR_STACK_IN_HIGH_MEMORY    218 */
  243.     EINVAL,    /* ERROR_INVALID_EXITROUTINE_RING    219 */
  244.     EINVAL,    /* ERROR_GETBUF_FAILED        220 */
  245.     EINVAL,    /* ERROR_FLUSHBUF_FAILED    221 */
  246.     EINVAL,    /* ERROR_TRANSFER_TOO_LONG    222 */
  247.     EINVAL,    /* ERROR_FORCENOSWAP_FAILED    223 */
  248.     EINVAL,    /* ERROR_SMG_NO_TARGET_WINDOW    224 */
  249.     EINVAL,    /* 225 */
  250.     EINVAL,    /* 226 */
  251.     EINVAL,    /* 227 */
  252.     ECHILD,    /* ERROR_NO_CHILDREN        228 */
  253.     EINVAL,    /* ERROR_INVALID_SCREEN_GROUP    229 */
  254.     EPIPE,    /* ERROR_BAD_PIPE        230 */
  255.     EWOULDBLOCK,    /* ERROR_PIPE_BUSY        231 */
  256.     EINVAL,    /* ERROR_NO_DATA        232 */
  257.     EPIPE,    /* ERROR_PIPE_NOT_CONNECTED    233 */
  258.     EINVAL,    /* ERROR_MORE_DATA        234 */
  259. };
  260.  
  261. static const unsigned int tableLen = sizeof(errorTable);
  262.  
  263.  
  264. /*
  265.  *----------------------------------------------------------------------
  266.  *
  267.  * TclOS2ConvertError --
  268.  *
  269.  *    This routine converts an OS/2 error into an errno value.
  270.  *
  271.  * Results:
  272.  *    None.
  273.  *
  274.  * Side effects:
  275.  *    Sets the errno global variable.
  276.  *
  277.  *----------------------------------------------------------------------
  278.  */
  279.  
  280. void
  281. TclOS2ConvertError(errCode)
  282.     ULONG errCode;        /* OS/2 error code. */
  283. {
  284.     if (errCode >= tableLen) {
  285.     errno = EINVAL;
  286.     } else {
  287.     errno = errorTable[errCode];
  288.     }
  289. #ifdef DEBUG
  290.     printf("TclOS2ConvertError %d => %d\n", errCode, errno);
  291. #endif
  292. }
  293.