#!/bin/sh # # This generates runtime/mercury_errno_name.c # set -eu # This list is taken from: # - Cosmopolitan libc # https://github.com/jart/cosmopolitan/blob/master/libc/sysv/consts.sh # - moreutils `errno -l' output on Linux # names=" ENOSYS EPERM ENOENT ESRCH EINTR EIO ENXIO E2BIG ENOEXEC EBADF ECHILD EAGAIN ENOMEM EACCES EFAULT ENOTBLK EBUSY EEXIST EXDEV ENODEV ENOTDIR EISDIR EINVAL ENFILE EMFILE ENOTTY ETXTBSY EFBIG ENOSPC EDQUOT ESPIPE EROFS EMLINK EPIPE EDOM ERANGE EDEADLK ENAMETOOLONG ENOLCK ENOTEMPTY ELOOP ENOMSG EIDRM ETIME EPROTO EOVERFLOW EILSEQ EUSERS ENOTSOCK EDESTADDRREQ EMSGSIZE EPROTOTYPE ENOPROTOOPT EPROTONOSUPPORT ESOCKTNOSUPPORT EOPNOTSUPP EPFNOSUPPORT EAFNOSUPPORT EADDRINUSE EADDRNOTAVAIL ENETDOWN ENETUNREACH ENETRESET ECONNABORTED ECONNRESET ENOBUFS EISCONN ENOTCONN ESHUTDOWN ETOOMANYREFS ETIMEDOUT ECONNREFUSED EHOSTDOWN EHOSTUNREACH EALREADY EINPROGRESS ESTALE EREMOTE EBADRPC ERPCMISMATCH EPROGUNAVAIL EPROGMISMATCH EPROCUNAVAIL EFTYPE EAUTH ENEEDAUTH EPROCLIM ENOATTR EPWROFF EDEVERR EBADEXEC EBADARCH ESHLIBVERS EBADMACHO ENOPOLICY EBADMSG ECANCELED EOWNERDEAD ENOTRECOVERABLE ENONET ERESTART ENODATA ENOSR ENOSTR EMULTIHOP ENOLINK ENOMEDIUM EMEDIUMTYPE EBADFD ECHRNG EL2NSYNC EL3HLT EL3RST ELNRNG EUNATCH ENOCSI EL2HLT EBADE EBADR EXFULL ENOANO EBADRQC EBADSLT ENOPKG EADV ESRMNT ECOMM EDOTDOT ENOTUNIQ EREMCHG ELIBACC ELIBBAD ELIBSCN ELIBMAX ELIBEXEC ESTRPIPE EUCLEAN ENOTNAM ENAVAIL EISNAM EREMOTEIO ENOKEY EKEYEXPIRED EKEYREVOKED EKEYREJECTED ERFKILL EHWPOISON EBFONT " cat < #include #include "mercury_errno_name.h" const char * MR_errno_name(int errnum) { switch (errnum) { EOF for name in $names ; do echo "#ifdef $name" echo " case $name: return \"$name\";" echo "#endif" done # Handle potential aliases: # - EWOULDBLOCK should be the same as EAGAIN # - EDEADLOCK should be the same as EDEADLK # - ENOTSUP may be the same as EOPNOTSUPP on some platforms handle_alias() { echo "#if defined($1) && !defined($2)" echo " case $1: return \"$1\";" echo "#endif" } handle_alias EWOULDBLOCK EAGAIN handle_alias EDEADLOCK EDEADLK handle_alias ENOTSUP EOPNOTSUPP cat <