123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451(*
* Copyright (c) 2014-2015 David Sheets <sheets@alum.mit.edu>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*)moduleType=Unix_errno_types.C(Unix_errno_types_detected)moduleC=Unix_errno_bindings.C(Unix_errno_generated)lethost=letoptioni=Someiinletplatformi=Signed.SInt.(ifi=minus_onethenNoneelseSomei)inletdefns=Errno.(Type.({e2big=optione2big;eacces=optioneacces;eaddrinuse=optioneaddrinuse;eaddrnotavail=optioneaddrnotavail;eafnosupport=optioneafnosupport;eagain=optioneagain;ealready=optionealready;ebadf=optionebadf;ebadmsg=optionebadmsg;ebusy=optionebusy;ecanceled=optionecanceled;echild=optionechild;econnaborted=optioneconnaborted;econnrefused=optioneconnrefused;econnreset=optioneconnreset;edeadlk=optionedeadlk;edestaddrreq=optionedestaddrreq;edom=optionedom;edquot=optionedquot;eexist=optioneexist;efault=optionefault;efbig=optionefbig;ehostdown=optionehostdown;ehostunreach=optionehostunreach;eidrm=optioneidrm;eilseq=optioneilseq;einprogress=optioneinprogress;eintr=optioneintr;einval=optioneinval;eio=optioneio;eisconn=optioneisconn;eisdir=optioneisdir;eloop=optioneloop;emfile=optionemfile;emlink=optionemlink;emsgsize=optionemsgsize;emultihop=optionemultihop;enametoolong=optionenametoolong;enetdown=optionenetdown;enetreset=optionenetreset;enetunreach=optionenetunreach;enfile=optionenfile;enobufs=optionenobufs;enodev=optionenodev;enoent=optionenoent;enoexec=optionenoexec;enolck=optionenolck;enolink=optionenolink;enomem=optionenomem;enomsg=optionenomsg;enoprotoopt=optionenoprotoopt;enospc=optionenospc;enosys=optionenosys;enotblk=optionenotblk;enotconn=optionenotconn;enotdir=optionenotdir;enotempty=optionenotempty;enotrecoverable=optionenotrecoverable;enotsock=optionenotsock;enotsup=optionenotsup;enotty=optionenotty;enxio=optionenxio;eopnotsupp=optioneopnotsupp;eoverflow=optioneoverflow;eownerdead=optioneownerdead;eperm=optioneperm;epfnosupport=optionepfnosupport;epipe=optionepipe;eproto=optioneproto;eprotonosupport=optioneprotonosupport;eprototype=optioneprototype;erange=optionerange;eremote=optioneremote;erofs=optionerofs;eshutdown=optioneshutdown;esocktnosupport=optionesocktnosupport;espipe=optionespipe;esrch=optionesrch;estale=optionestale;etimedout=optionetimedout;etoomanyrefs=optionetoomanyrefs;etxtbsy=optionetxtbsy;eusers=optioneusers;ewouldblock=optionewouldblock;exdev=optionexdev;echrng=platform(C.echrng());el2nsync=platform(C.el2nsync());el3hlt=platform(C.el3hlt());el3rst=platform(C.el3rst());elnrng=platform(C.elnrng());eunatch=platform(C.eunatch());enocsi=platform(C.enocsi());el2hlt=platform(C.el2hlt());ebade=platform(C.ebade());ebadr=platform(C.ebadr());exfull=platform(C.exfull());enoano=platform(C.enoano());ebadrqc=platform(C.ebadrqc());ebadslt=platform(C.ebadslt());ebfont=platform(C.ebfont());enonet=platform(C.enonet());enopkg=platform(C.enopkg());eadv=platform(C.eadv());esrmnt=platform(C.esrmnt());ecomm=platform(C.ecomm());edotdot=platform(C.edotdot());enotuniq=platform(C.enotuniq());ebadfd=platform(C.ebadfd());eremchg=platform(C.eremchg());elibacc=platform(C.elibacc());elibbad=platform(C.elibbad());elibscn=platform(C.elibscn());elibmax=platform(C.elibmax());elibexec=platform(C.elibexec());erestart=platform(C.erestart());estrpipe=platform(C.estrpipe());euclean=platform(C.euclean());enotnam=platform(C.enotnam());enavail=platform(C.enavail());eisnam=platform(C.eisnam());eremoteio=platform(C.eremoteio());enomedium=platform(C.enomedium());emediumtype=platform(C.emediumtype());enokey=platform(C.enokey());ekeyexpired=platform(C.ekeyexpired());ekeyrevoked=platform(C.ekeyrevoked());ekeyrejected=platform(C.ekeyrejected());erfkill=platform(C.erfkill());ehwpoison=platform(C.ehwpoison());epwroff=platform(C.epwroff());edeverr=platform(C.edeverr());ebadexec=platform(C.ebadexec());ebadarch=platform(C.ebadarch());eshlibvers=platform(C.eshlibvers());ebadmacho=platform(C.ebadmacho());enopolicy=platform(C.enopolicy());eqfull=platform(C.eqfull());edoofus=platform(C.edoofus());enotcapable=platform(C.enotcapable());ecapmode=platform(C.ecapmode());eproclim=platform(C.eproclim());ebadrpc=platform(C.ebadrpc());erpcmismatch=platform(C.erpcmismatch());eprogunavail=platform(C.eprogunavail());eprogmismatch=platform(C.eprogmismatch());eprocunavail=platform(C.eprocunavail());eftype=platform(C.eftype());eauth=platform(C.eauth());eneedauth=platform(C.eneedauth());enoattr=platform(C.enoattr());enostr=platform(C.enostr());enodata=platform(C.enodata());etime=platform(C.etime());enosr=platform(C.enosr());}))inErrno.Host.of_defnsdefnsletoptional_unknown~hosterrno=matchErrno.to_code~hosterrnowith|Somei->Some(Unix.EUNKNOWNERR(Signed.SInt.to_inti))|None->Noneletto_unix?(host=host)=Errno.(function|E2BIG->SomeUnix.E2BIG|EACCES->SomeUnix.EACCES|EADDRINUSE->SomeUnix.EADDRINUSE|EADDRNOTAVAIL->SomeUnix.EADDRNOTAVAIL|EAFNOSUPPORT->SomeUnix.EAFNOSUPPORT|EAGAIN->SomeUnix.EAGAIN|EALREADY->SomeUnix.EALREADY|EBADF->SomeUnix.EBADF|EBADMSG->optional_unknown~hostEBADMSG|EBUSY->SomeUnix.EBUSY|ECANCELED->optional_unknown~hostECANCELED|ECHILD->SomeUnix.ECHILD|ECONNABORTED->SomeUnix.ECONNABORTED|ECONNREFUSED->SomeUnix.ECONNREFUSED|ECONNRESET->SomeUnix.ECONNRESET|EDEADLK->SomeUnix.EDEADLK|EDESTADDRREQ->SomeUnix.EDESTADDRREQ|EDOM->SomeUnix.EDOM|EDQUOT->optional_unknown~hostEDQUOT|EEXIST->SomeUnix.EEXIST|EFAULT->SomeUnix.EFAULT|EFBIG->SomeUnix.EFBIG|EHOSTDOWN->SomeUnix.EHOSTDOWN|EHOSTUNREACH->SomeUnix.EHOSTUNREACH|EIDRM->optional_unknown~hostEIDRM|EILSEQ->optional_unknown~hostEILSEQ|EINPROGRESS->SomeUnix.EINPROGRESS|EINTR->SomeUnix.EINTR|EINVAL->SomeUnix.EINVAL|EIO->SomeUnix.EIO|EISCONN->SomeUnix.EISCONN|EISDIR->SomeUnix.EISDIR|ELOOP->SomeUnix.ELOOP|EMFILE->SomeUnix.EMFILE|EMLINK->SomeUnix.EMLINK|EMSGSIZE->SomeUnix.EMSGSIZE|EMULTIHOP->optional_unknown~hostEMULTIHOP|ENAMETOOLONG->SomeUnix.ENAMETOOLONG|ENETDOWN->SomeUnix.ENETDOWN|ENETRESET->SomeUnix.ENETRESET|ENETUNREACH->SomeUnix.ENETUNREACH|ENFILE->SomeUnix.ENFILE|ENOBUFS->SomeUnix.ENOBUFS|ENODEV->SomeUnix.ENODEV|ENOENT->SomeUnix.ENOENT|ENOEXEC->SomeUnix.ENOEXEC|ENOLCK->SomeUnix.ENOLCK|ENOLINK->optional_unknown~hostENOLINK|ENOMEM->SomeUnix.ENOMEM|ENOMSG->optional_unknown~hostENOMSG|ENOPROTOOPT->SomeUnix.ENOPROTOOPT|ENOSPC->SomeUnix.ENOSPC|ENOSYS->SomeUnix.ENOSYS|ENOTBLK->optional_unknown~hostENOTBLK|ENOTCONN->SomeUnix.ENOTCONN|ENOTDIR->SomeUnix.ENOTDIR|ENOTEMPTY->SomeUnix.ENOTEMPTY|ENOTRECOVERABLE->optional_unknown~hostENOTRECOVERABLE|ENOTSOCK->SomeUnix.ENOTSOCK|ENOTSUP->optional_unknown~hostENOTSUP|ENOTTY->SomeUnix.ENOTTY|ENXIO->SomeUnix.ENXIO|EOPNOTSUPP->SomeUnix.EOPNOTSUPP|EOVERFLOW->SomeUnix.EOVERFLOW|EOWNERDEAD->optional_unknown~hostEOWNERDEAD|EPERM->SomeUnix.EPERM|EPFNOSUPPORT->SomeUnix.EPFNOSUPPORT|EPIPE->SomeUnix.EPIPE|EPROTO->optional_unknown~hostEPROTO|EPROTONOSUPPORT->SomeUnix.EPROTONOSUPPORT|EPROTOTYPE->SomeUnix.EPROTOTYPE|ERANGE->SomeUnix.ERANGE|EREMOTE->optional_unknown~hostEREMOTE|EROFS->SomeUnix.EROFS|ESHUTDOWN->SomeUnix.ESHUTDOWN|ESOCKTNOSUPPORT->SomeUnix.ESOCKTNOSUPPORT|ESPIPE->SomeUnix.ESPIPE|ESRCH->SomeUnix.ESRCH|ESTALE->optional_unknown~hostESTALE|ETIMEDOUT->SomeUnix.ETIMEDOUT|ETOOMANYREFS->SomeUnix.ETOOMANYREFS|ETXTBSY->optional_unknown~hostETXTBSY|EUSERS->optional_unknown~hostEUSERS|EWOULDBLOCK->SomeUnix.EWOULDBLOCK|EXDEV->SomeUnix.EXDEV|ECHRNG->optional_unknown~hostECHRNG|EL2NSYNC->optional_unknown~hostEL2NSYNC|EL3HLT->optional_unknown~hostEL3HLT|EL3RST->optional_unknown~hostEL3RST|ELNRNG->optional_unknown~hostELNRNG|EUNATCH->optional_unknown~hostEUNATCH|ENOCSI->optional_unknown~hostENOCSI|EL2HLT->optional_unknown~hostEL2HLT|EBADE->optional_unknown~hostEBADE|EBADR->optional_unknown~hostEBADR|EXFULL->optional_unknown~hostEXFULL|ENOANO->optional_unknown~hostENOANO|EBADRQC->optional_unknown~hostEBADRQC|EBADSLT->optional_unknown~hostEBADSLT|EBFONT->optional_unknown~hostEBFONT|ENONET->optional_unknown~hostENONET|ENOPKG->optional_unknown~hostENOPKG|EADV->optional_unknown~hostEADV|ESRMNT->optional_unknown~hostESRMNT|ECOMM->optional_unknown~hostECOMM|EDOTDOT->optional_unknown~hostEDOTDOT|ENOTUNIQ->optional_unknown~hostENOTUNIQ|EBADFD->optional_unknown~hostEBADFD|EREMCHG->optional_unknown~hostEREMCHG|ELIBACC->optional_unknown~hostELIBACC|ELIBBAD->optional_unknown~hostELIBBAD|ELIBSCN->optional_unknown~hostELIBSCN|ELIBMAX->optional_unknown~hostELIBMAX|ELIBEXEC->optional_unknown~hostELIBEXEC|ERESTART->optional_unknown~hostERESTART|ESTRPIPE->optional_unknown~hostESTRPIPE|EUCLEAN->optional_unknown~hostEUCLEAN|ENOTNAM->optional_unknown~hostENOTNAM|ENAVAIL->optional_unknown~hostENAVAIL|EISNAM->optional_unknown~hostEISNAM|EREMOTEIO->optional_unknown~hostEREMOTEIO|ENOMEDIUM->optional_unknown~hostENOMEDIUM|EMEDIUMTYPE->optional_unknown~hostEMEDIUMTYPE|ENOKEY->optional_unknown~hostENOKEY|EKEYEXPIRED->optional_unknown~hostEKEYEXPIRED|EKEYREVOKED->optional_unknown~hostEKEYREVOKED|EKEYREJECTED->optional_unknown~hostEKEYREJECTED|ERFKILL->optional_unknown~hostERFKILL|EHWPOISON->optional_unknown~hostEHWPOISON|EPWROFF->optional_unknown~hostEPWROFF|EDEVERR->optional_unknown~hostEDEVERR|EBADEXEC->optional_unknown~hostEBADEXEC|EBADARCH->optional_unknown~hostEBADARCH|ESHLIBVERS->optional_unknown~hostESHLIBVERS|EBADMACHO->optional_unknown~hostEBADMACHO|ENOPOLICY->optional_unknown~hostENOPOLICY|EQFULL->optional_unknown~hostEQFULL|EDOOFUS->optional_unknown~hostEDOOFUS|ENOTCAPABLE->optional_unknown~hostENOTCAPABLE|ECAPMODE->optional_unknown~hostECAPMODE|EPROCLIM->optional_unknown~hostEPROCLIM|EBADRPC->optional_unknown~hostEBADRPC|ERPCMISMATCH->optional_unknown~hostERPCMISMATCH|EPROGUNAVAIL->optional_unknown~hostEPROGUNAVAIL|EPROGMISMATCH->optional_unknown~hostEPROGMISMATCH|EPROCUNAVAIL->optional_unknown~hostEPROCUNAVAIL|EFTYPE->optional_unknown~hostEFTYPE|EAUTH->optional_unknown~hostEAUTH|ENEEDAUTH->optional_unknown~hostENEEDAUTH|ENOATTR->optional_unknown~hostENOATTR|ENOSTR->optional_unknown~hostENOSTR|ENODATA->optional_unknown~hostENODATA|ETIME->optional_unknown~hostETIME|ENOSR->optional_unknown~hostENOSR|EUNKNOWNERRx->Some(Unix.EUNKNOWNERR(Signed.SInt.to_intx)))letof_unix?(host=host)=Unix.(function|E2BIG->[Errno.E2BIG]|EACCES->[Errno.EACCES]|EADDRINUSE->[Errno.EADDRINUSE]|EADDRNOTAVAIL->[Errno.EADDRNOTAVAIL]|EAFNOSUPPORT->[Errno.EAFNOSUPPORT]|EAGAIN->[Errno.EAGAIN]|EALREADY->[Errno.EALREADY]|EBADF->[Errno.EBADF]|EBUSY->[Errno.EBUSY]|ECHILD->[Errno.ECHILD]|ECONNABORTED->[Errno.ECONNABORTED]|ECONNREFUSED->[Errno.ECONNREFUSED]|ECONNRESET->[Errno.ECONNRESET]|EDEADLK->[Errno.EDEADLK]|EDESTADDRREQ->[Errno.EDESTADDRREQ]|EDOM->[Errno.EDOM]|EEXIST->[Errno.EEXIST]|EFAULT->[Errno.EFAULT]|EFBIG->[Errno.EFBIG]|EHOSTDOWN->[Errno.EHOSTDOWN]|EHOSTUNREACH->[Errno.EHOSTUNREACH]|EINPROGRESS->[Errno.EINPROGRESS]|EINTR->[Errno.EINTR]|EINVAL->[Errno.EINVAL]|EIO->[Errno.EIO]|EISCONN->[Errno.EISCONN]|EISDIR->[Errno.EISDIR]|ELOOP->[Errno.ELOOP]|EMFILE->[Errno.EMFILE]|EMLINK->[Errno.EMLINK]|EMSGSIZE->[Errno.EMSGSIZE]|ENAMETOOLONG->[Errno.ENAMETOOLONG]|ENETDOWN->[Errno.ENETDOWN]|ENETRESET->[Errno.ENETRESET]|ENETUNREACH->[Errno.ENETUNREACH]|ENFILE->[Errno.ENFILE]|ENOBUFS->[Errno.ENOBUFS]|ENODEV->[Errno.ENODEV]|ENOENT->[Errno.ENOENT]|ENOEXEC->[Errno.ENOEXEC]|ENOLCK->[Errno.ENOLCK]|ENOMEM->[Errno.ENOMEM]|ENOPROTOOPT->[Errno.ENOPROTOOPT]|ENOSPC->[Errno.ENOSPC]|ENOSYS->[Errno.ENOSYS]|ENOTCONN->[Errno.ENOTCONN]|ENOTDIR->[Errno.ENOTDIR]|ENOTEMPTY->[Errno.ENOTEMPTY]|ENOTSOCK->[Errno.ENOTSOCK]|ENOTTY->[Errno.ENOTTY]|ENXIO->[Errno.ENXIO]|EOPNOTSUPP->[Errno.EOPNOTSUPP]|EOVERFLOW->[Errno.EOVERFLOW]|EPERM->[Errno.EPERM]|EPFNOSUPPORT->[Errno.EPFNOSUPPORT]|EPIPE->[Errno.EPIPE]|EPROTONOSUPPORT->[Errno.EPROTONOSUPPORT]|EPROTOTYPE->[Errno.EPROTOTYPE]|ERANGE->[Errno.ERANGE]|EROFS->[Errno.EROFS]|ESHUTDOWN->[Errno.ESHUTDOWN]|ESOCKTNOSUPPORT->[Errno.ESOCKTNOSUPPORT]|ESPIPE->[Errno.ESPIPE]|ESRCH->[Errno.ESRCH]|ETIMEDOUT->[Errno.ETIMEDOUT]|ETOOMANYREFS->[Errno.ETOOMANYREFS]|EWOULDBLOCK->[Errno.EWOULDBLOCK]|EXDEV->[Errno.EXDEV]|EUNKNOWNERRx->Errno.of_code~host(Signed.SInt.of_intx))letget_errno=C.get_errnoletreset_errno=C.reset_errnoletraise_errno?(call="")?(label="")code=raiseErrno.(Error{errno=of_code~hostcode;call;label;})letraise_on_errno?(call="")?(label="")fn=reset_errno();matchfn()with|Somer->r|None->raise_errno~call~label(get_errno())letto_errno_exn=function|Unix.Unix_error(err,call,label)->leterrno=of_unixerrinErrno.Error{Errno.errno;call;label}|exn->exnletwith_errno_exnfn=tryfn()withe->raise(to_errno_exne)letrecunix_error_of_errno=function|[]->None|err::rest->matchto_unixerrwith|Someerr->Someerr|None->unix_error_of_errnorestletto_unix_exn=function|Errno.Error{Errno.errno;call;label}ase->beginmatchunix_error_of_errnoerrnowith|Someerr->Unix.Unix_error(err,call,label)|None->eend|exn->exnletwith_unix_exnfn=tryfn()withe->raise(to_unix_exne)