wasCSharpSQLite – Rev 1
?pathlinks?
/*
* TclPosixException.java --
*
* This file implements the TclPosixException class, used to report posix
* errors in Tcl scripts.
*
* Copyright (c) 1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
* Included in SQLite3 port to C# for use in testharness only; 2008 Noah B Hart
*
* RCS @(#) $Id: TclPosixException.java,v 1.2 2001/11/22 00:08:36 mdejong Exp $
*
*/
using System;
namespace tcl.lang
{
/*
* This class implements exceptions used to report posix errors in Tcl scripts.
*/
class TclPosixException : TclException
{
internal const int EPERM = 1; /* Operation not permitted */
internal const int ENOENT = 2; /* No such file or directory */
internal const int ESRCH = 3; /* No such process */
internal const int EINTR = 4; /* Interrupted system call */
internal const int EIO = 5; /* Input/output error */
internal const int ENXIO = 6; /* Device not configured */
internal const int E2BIG = 7; /* Argument list too long */
internal const int ENOEXEC = 8; /* Exec format error */
internal const int EBADF = 9; /* Bad file descriptor */
internal const int ECHILD = 10; /* No child processes */
internal const int EDEADLK = 11; /* Resource deadlock avoided */
/* 11 was EAGAIN */
internal const int ENOMEM = 12; /* Cannot allocate memory */
internal const int EACCES = 13; /* Permission denied */
internal const int EFAULT = 14; /* Bad address */
internal const int ENOTBLK = 15; /* Block device required */
internal const int EBUSY = 16; /* Device busy */
internal const int EEXIST = 17; /* File exists */
internal const int EXDEV = 18; /* Cross-device link */
internal const int ENODEV = 19; /* Operation not supported by device */
internal const int ENOTDIR = 20; /* Not a directory */
internal const int EISDIR = 21; /* Is a directory */
internal const int EINVAL = 22; /* Invalid argument */
internal const int ENFILE = 23; /* Too many open files in system */
internal const int EMFILE = 24; /* Too many open files */
internal const int ENOTTY = 25; /* Inappropriate ioctl for device */
internal const int ETXTBSY = 26; /* Text file busy */
internal const int EFBIG = 27; /* File too large */
internal const int ENOSPC = 28; /* No space left on device */
internal const int ESPIPE = 29; /* Illegal seek */
internal const int EROFS = 30; /* Read-only file system */
internal const int EMLINK = 31; /* Too many links */
internal const int EPIPE = 32; /* Broken pipe */
internal const int EDOM = 33; /* Numerical argument out of domain */
internal const int ERANGE = 34; /* Result too large */
internal const int EAGAIN = 35; /* Resource temporarily unavailable */
internal const int EWOULDBLOCK = EAGAIN; /* Operation would block */
internal const int EINPROGRESS = 36; /* Operation now in progress */
internal const int EALREADY = 37; /* Operation already in progress */
internal const int ENOTSOCK = 38; /* Socket operation on non-socket */
internal const int EDESTADDRREQ = 39; /* Destination address required */
internal const int EMSGSIZE = 40; /* Message too long */
internal const int EPROTOTYPE = 41; /* Protocol wrong type for socket */
internal const int ENOPROTOOPT = 42; /* Protocol not available */
internal const int EPROTONOSUPPORT = 43; /* Protocol not supported */
internal const int ESOCKTNOSUPPORT = 44; /* Socket type not supported */
internal const int EOPNOTSUPP = 45; /* Operation not supported on socket */
internal const int EPFNOSUPPORT = 46; /* Protocol family not supported */
internal const int EAFNOSUPPORT = 47; /* Address family not supported by
/* protocol family */
internal const int EADDRINUSE = 48; /* Address already in use */
internal const int EADDRNOTAVAIL = 49; /* Can't assign requested
/* address */
internal const int ENETDOWN = 50; /* Network is down */
internal const int ENETUNREACH = 51; /* Network is unreachable */
internal const int ENETRESET = 52; /* Network dropped connection on reset */
internal const int ECONNABORTED = 53; /* Software caused connection abort */
internal const int ECONNRESET = 54; /* Connection reset by peer */
internal const int ENOBUFS = 55; /* No buffer space available */
internal const int EISCONN = 56; /* Socket is already connected */
internal const int ENOTCONN = 57; /* Socket is not connected */
internal const int ESHUTDOWN = 58; /* Can't send after socket shutdown */
internal const int ETOOMANYREFS = 59; /* Too many references: can't splice */
internal const int ETIMEDOUT = 60; /* Connection timed out */
internal const int ECONNREFUSED = 61; /* Connection refused */
internal const int ELOOP = 62; /* Too many levels of symbolic links */
internal const int ENAMETOOLONG = 63; /* File name too long */
internal const int EHOSTDOWN = 64; /* Host is down */
internal const int EHOSTUNREACH = 65; /* No route to host */
internal const int ENOTEMPTY = 66; /* Directory not empty */
internal const int EPROCLIM = 67; /* Too many processes */
internal const int EUSERS = 68; /* Too many users */
internal const int EDQUOT = 69; /* Disc quota exceeded */
internal const int ESTALE = 70; /* Stale NFS file handle */
internal const int EREMOTE = 71; /* Too many levels of remote in path */
internal const int EBADRPC = 72; /* RPC struct is bad */
internal const int ERPCMISMATCH = 73; /* RPC version wrong */
internal const int EPROGUNAVAIL = 74; /* RPC prog. not avail */
internal const int EPROGMISMATCH = 75; /* Program version wrong */
internal const int EPROCUNAVAIL = 76; /* Bad procedure for program */
internal const int ENOLCK = 77; /* No locks available */
internal const int ENOSYS = 78; /* Function not implemented */
internal const int EFTYPE = 79; /* Inappropriate file type or format */
public TclPosixException( Interp interp, int errno, string errorMsg )
: base( TCL.CompletionCode.ERROR )
{
string msg = getPosixMsg( errno );
TclObject threeEltListObj = TclList.newInstance();
TclList.append( interp, threeEltListObj, TclString.newInstance( "POSIX" ) );
TclList.append( interp, threeEltListObj, TclString.newInstance( getPosixId( errno ) ) );
TclList.append( interp, threeEltListObj, TclString.newInstance( msg ) );
interp.setErrorCode( threeEltListObj );
if ( interp != null )
{
interp.setResult( errorMsg );
}
}
public TclPosixException( Interp interp, int errno, bool appendPosixMsg, string errorMsg )
: base( TCL.CompletionCode.ERROR )
{
string msg = getPosixMsg( errno );
TclObject threeEltListObj = TclList.newInstance();
TclList.append( interp, threeEltListObj, TclString.newInstance( "POSIX" ) );
TclList.append( interp, threeEltListObj, TclString.newInstance( getPosixId( errno ) ) );
TclList.append( interp, threeEltListObj, TclString.newInstance( msg ) );
interp.setErrorCode( threeEltListObj );
if ( interp != null )
{
if ( appendPosixMsg )
{
interp.setResult( errorMsg + ": " + msg );
}
else
{
interp.setResult( errorMsg );
}
}
}
private static string getPosixId( int errno )
// Code of posix error.
{
switch ( errno )
{
case E2BIG:
return "E2BIG";
case EACCES:
return "EACCES";
case EADDRINUSE:
return "EADDRINUSE";
case EADDRNOTAVAIL:
return "EADDRNOTAVAIL";
//case EADV: return "EADV";
case EAFNOSUPPORT:
return "EAFNOSUPPORT";
case EAGAIN:
return "EAGAIN";
//case EALIGN: return "EALIGN";
case EALREADY:
return "EALREADY";
//case EBADE: return "EBADE";
case EBADF:
return "EBADF";
//case EBADFD: return "EBADFD";
//case EBADMSG: return "EBADMSG";
//case EBADR: return "EBADR";
case EBADRPC:
return "EBADRPC";
//case EBADRQC: return "EBADRQC";
//case EBADSLT: return "EBADSLT";
//case EBFONT: return "EBFONT";
case EBUSY:
return "EBUSY";
case ECHILD:
return "ECHILD";
//case ECHRNG: return "ECHRNG";
//case ECOMM: return "ECOMM";
case ECONNABORTED:
return "ECONNABORTED";
case ECONNREFUSED:
return "ECONNREFUSED";
case ECONNRESET:
return "ECONNRESET";
case EDEADLK:
return "EDEADLK";
//case EDEADLOCK: return "EDEADLOCK";
case EDESTADDRREQ:
return "EDESTADDRREQ";
//case EDIRTY: return "EDIRTY";
case EDOM:
return "EDOM";
//case EDOTDOT: return "EDOTDOT";
case EDQUOT:
return "EDQUOT";
//case EDUPPKG: return "EDUPPKG";
case EEXIST:
return "EEXIST";
case EFAULT:
return "EFAULT";
case EFBIG:
return "EFBIG";
case EHOSTDOWN:
return "EHOSTDOWN";
case EHOSTUNREACH:
return "EHOSTUNREACH";
//case EIDRM: return "EIDRM";
//case EINIT: return "EINIT";
case EINPROGRESS:
return "EINPROGRESS";
case EINTR:
return "EINTR";
case EINVAL:
return "EINVAL";
case EIO:
return "EIO";
case EISCONN:
return "EISCONN";
case EISDIR:
return "EISDIR";
//case EISNAM: return "EISNAM";
//case ELBIN: return "ELBIN";
//case EL2HLT: return "EL2HLT";
//case EL2NSYNC: return "EL2NSYNC";
//case EL3HLT: return "EL3HLT";
//case EL3RST: return "EL3RST";
//case ELIBACC: return "ELIBACC";
//case ELIBBAD: return "ELIBBAD";
//case ELIBEXEC: return "ELIBEXEC";
//case ELIBMAX: return "ELIBMAX";
//case ELIBSCN: return "ELIBSCN";
//case ELNRNG: return "ELNRNG";
case ELOOP:
return "ELOOP";
case EMLINK:
return "EMLINK";
case EMSGSIZE:
return "EMSGSIZE";
//case EMULTIHOP: return "EMULTIHOP";
case ENAMETOOLONG:
return "ENAMETOOLONG";
//case ENAVAIL: return "ENAVAIL";
//case ENET: return "ENET";
case ENETDOWN:
return "ENETDOWN";
case ENETRESET:
return "ENETRESET";
case ENETUNREACH:
return "ENETUNREACH";
case ENFILE:
return "ENFILE";
//case ENOANO: return "ENOANO";
case ENOBUFS:
return "ENOBUFS";
//case ENOCSI: return "ENOCSI";
//case ENODATA: return "ENODATA";
case ENODEV:
return "ENODEV";
case ENOENT:
return "ENOENT";
case ENOEXEC:
return "ENOEXEC";
case ENOLCK:
return "ENOLCK";
//case ENOLINK: return "ENOLINK";
case ENOMEM:
return "ENOMEM";
//case ENOMSG: return "ENOMSG";
//case ENONET: return "ENONET";
//case ENOPKG: return "ENOPKG";
case ENOPROTOOPT:
return "ENOPROTOOPT";
case ENOSPC:
return "ENOSPC";
//case ENOSR: return "ENOSR";
//case ENOSTR: return "ENOSTR";
//case ENOSYM: return "ENOSYM";
case ENOSYS:
return "ENOSYS";
case ENOTBLK:
return "ENOTBLK";
case ENOTCONN:
return "ENOTCONN";
case ENOTDIR:
return "ENOTDIR";
case ENOTEMPTY:
return "ENOTEMPTY";
//case ENOTNAM: return "ENOTNAM";
case ENOTSOCK:
return "ENOTSOCK";
//case ENOTSUP: return "ENOTSUP";
case ENOTTY:
return "ENOTTY";
//case ENOTUNIQ: return "ENOTUNIQ";
case ENXIO:
return "ENXIO";
case EOPNOTSUPP:
return "EOPNOTSUPP";
case EPERM:
return "EPERM";
case EPFNOSUPPORT:
return "EPFNOSUPPORT";
case EPIPE:
return "EPIPE";
case EPROCLIM:
return "EPROCLIM";
case EPROCUNAVAIL:
return "EPROCUNAVAIL";
case EPROGMISMATCH:
return "EPROGMISMATCH";
case EPROGUNAVAIL:
return "EPROGUNAVAIL";
//case EPROTO: return "EPROTO";
case EPROTONOSUPPORT:
return "EPROTONOSUPPORT";
case EPROTOTYPE:
return "EPROTOTYPE";
case ERANGE:
return "ERANGE";
//case EREFUSED: return "EREFUSED";
//case EREMCHG: return "EREMCHG";
//case EREMDEV: return "EREMDEV";
case EREMOTE:
return "EREMOTE";
//case EREMOTEIO: return "EREMOTEIO";
//case EREMOTERELEASE: return "EREMOTERELEASE";
case EROFS:
return "EROFS";
case ERPCMISMATCH:
return "ERPCMISMATCH";
//case ERREMOTE: return "ERREMOTE";
case ESHUTDOWN:
return "ESHUTDOWN";
case ESOCKTNOSUPPORT:
return "ESOCKTNOSUPPORT";
case ESPIPE:
return "ESPIPE";
case ESRCH:
return "ESRCH";
//case ESRMNT: return "ESRMNT";
case ESTALE:
return "ESTALE";
//case ESUCCESS: return "ESUCCESS";
//case ETIME: return "ETIME";
case ETIMEDOUT:
return "ETIMEDOUT";
case ETOOMANYREFS:
return "ETOOMANYREFS";
case ETXTBSY:
return "ETXTBSY";
//case EUCLEAN: return "EUCLEAN";
//case EUNATCH: return "EUNATCH";
case EUSERS:
return "EUSERS";
//case EVERSION: return "EVERSION";
//case EWOULDBLOCK: return "EWOULDBLOCK";
case EXDEV:
return "EXDEV";
//case EXFULL: return "EXFULL";
}
return "unknown error";
}
internal static string getPosixMsg( int errno )
// Code of posix error.
{
switch ( errno )
{
case E2BIG:
return "argument list too long";
case EACCES:
return "permission denied";
case EADDRINUSE:
return "address already in use";
case EADDRNOTAVAIL:
return "can't assign requested address";
//case EADV: return "advertise error";
case EAFNOSUPPORT:
return "address family not supported by protocol family";
case EAGAIN:
return "resource temporarily unavailable";
//case EALIGN: return "EALIGN";
case EALREADY:
return "operation already in progress";
//case EBADE: return "bad exchange descriptor";
case EBADF:
return "bad file number";
//case EBADFD: return "file descriptor in bad state";
//case EBADMSG: return "not a data message";
//case EBADR: return "bad request descriptor";
case EBADRPC:
return "RPC structure is bad";
//case EBADRQC: return "bad request code";
//case EBADSLT: return "invalid slot";
//case EBFONT: return "bad font file format";
case EBUSY:
return "file busy";
case ECHILD:
return "no children";
//case ECHRNG: return "channel number out of range";
//case ECOMM: return "communication error on send";
case ECONNABORTED:
return "software caused connection abort";
case ECONNREFUSED:
return "connection refused";
case ECONNRESET:
return "connection reset by peer";
case EDEADLK:
return "resource deadlock avoided";
//case EDEADLOCK: return "resource deadlock avoided";
case EDESTADDRREQ:
return "destination address required";
//case EDIRTY: return "mounting a dirty fs w/o force";
case EDOM:
return "math argument out of range";
//case EDOTDOT: return "cross mount point";
case EDQUOT:
return "disk quota exceeded";
//case EDUPPKG: return "duplicate package name";
case EEXIST:
return "file already exists";
case EFAULT:
return "bad address in system call argument";
case EFBIG:
return "file too large";
case EHOSTDOWN:
return "host is down";
case EHOSTUNREACH:
return "host is unreachable";
//case EIDRM: return "identifier removed";
//case EINIT: return "initialization error";
case EINPROGRESS:
return "operation now in progress";
case EINTR:
return "interrupted system call";
case EINVAL:
return "invalid argument";
case EIO:
return "I/O error";
case EISCONN:
return "socket is already connected";
case EISDIR:
return "illegal operation on a directory";
//case EISNAM: return "is a name file";
//case ELBIN: return "ELBIN";
//case EL2HLT: return "level 2 halted";
//case EL2NSYNC: return "level 2 not synchronized";
//case EL3HLT: return "level 3 halted";
//case EL3RST: return "level 3 reset";
//case ELIBACC: return "can not access a needed shared library";
//case ELIBBAD: return "accessing a corrupted shared library";
//case ELIBEXEC: return "can not exec a shared library directly";
//case ELIBMAX: return
//"attempting to link in more shared libraries than system limit";
//case ELIBSCN: return ".lib section in a.out corrupted";
//case ELNRNG: return "link number out of range";
case ELOOP:
return "too many levels of symbolic links";
case EMFILE:
return "too many open files";
case EMLINK:
return "too many links";
case EMSGSIZE:
return "message too long";
//case EMULTIHOP: return "multihop attempted";
case ENAMETOOLONG:
return "file name too long";
//case ENAVAIL: return "not available";
//case ENET: return "ENET";
case ENETDOWN:
return "network is down";
case ENETRESET:
return "network dropped connection on reset";
case ENETUNREACH:
return "network is unreachable";
case ENFILE:
return "file table overflow";
//case ENOANO: return "anode table overflow";
case ENOBUFS:
return "no buffer space available";
//case ENOCSI: return "no CSI structure available";
//case ENODATA: return "no data available";
case ENODEV:
return "no such device";
case ENOENT:
return "no such file or directory";
case ENOEXEC:
return "exec format error";
case ENOLCK:
return "no locks available";
//case ENOLINK: return "link has be severed";
case ENOMEM:
return "not enough memory";
//case ENOMSG: return "no message of desired type";
//case ENONET: return "machine is not on the network";
//case ENOPKG: return "package not installed";
case ENOPROTOOPT:
return "bad proocol option";
case ENOSPC:
return "no space left on device";
//case ENOSR: return "out of stream resources";
//case ENOSTR: return "not a stream device";
//case ENOSYM: return "unresolved symbol name";
case ENOSYS:
return "function not implemented";
case ENOTBLK:
return "block device required";
case ENOTCONN:
return "socket is not connected";
case ENOTDIR:
return "not a directory";
case ENOTEMPTY:
return "directory not empty";
//case ENOTNAM: return "not a name file";
case ENOTSOCK:
return "socket operation on non-socket";
//case ENOTSUP: return "operation not supported";
case ENOTTY:
return "inappropriate device for ioctl";
//case ENOTUNIQ: return "name not unique on network";
case ENXIO:
return "no such device or address";
case EOPNOTSUPP:
return "operation not supported on socket";
case EPERM:
return "not owner";
case EPFNOSUPPORT:
return "protocol family not supported";
case EPIPE:
return "broken pipe";
case EPROCLIM:
return "too many processes";
case EPROCUNAVAIL:
return "bad procedure for program";
case EPROGMISMATCH:
return "program version wrong";
case EPROGUNAVAIL:
return "RPC program not available";
//case EPROTO: return "protocol error";
case EPROTONOSUPPORT:
return "protocol not suppored";
case EPROTOTYPE:
return "protocol wrong type for socket";
case ERANGE:
return "math result unrepresentable";
//case EREFUSED: return "EREFUSED";
//case EREMCHG: return "remote address changed";
//case EREMDEV: return "remote device";
case EREMOTE:
return "pathname hit remote file system";
//case EREMOTEIO: return "remote i/o error";
//case EREMOTERELEASE: return "EREMOTERELEASE";
case EROFS:
return "read-only file system";
case ERPCMISMATCH:
return "RPC version is wrong";
//case ERREMOTE: return "object is remote";
case ESHUTDOWN:
return "can't send afer socket shutdown";
case ESOCKTNOSUPPORT:
return "socket type not supported";
case ESPIPE:
return "invalid seek";
case ESRCH:
return "no such process";
//case ESRMNT: return "srmount error";
case ESTALE:
return "stale remote file handle";
//case ESUCCESS: return "Error 0";
//case ETIME: return "timer expired";
case ETIMEDOUT:
return "connection timed out";
case ETOOMANYREFS:
return "too many references: can't splice";
case ETXTBSY:
return "text file or pseudo-device busy";
//case EUCLEAN: return "structure needs cleaning";
//case EUNATCH: return "protocol driver not attached";
case EUSERS:
return "too many users";
//case EVERSION: return "version mismatch";
//case EWOULDBLOCK: return "operation would block";
case EXDEV:
return "cross-domain link";
//case EXFULL: return "message tables full";
default:
return "unknown POSIX error";
}
}
} // end TclPosixException class
}