-- "Standard" errno values -- Copied from newlib /usr/include/sys/errno.h
-- Copyright (C)2016-2023, Philip Munts dba Munts Technologies.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are met:
--
-- * Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- POSSIBILITY OF SUCH DAMAGE.
WITH Interfaces.C.Strings;
PACKAGE errno IS
EOK : CONSTANT := 0; -- Success
EPERM : CONSTANT := 1; -- Not super-user
ENOENT : CONSTANT := 2; -- No such file or directory
ESRCH : CONSTANT := 3; -- No such process
EINTR : CONSTANT := 4; -- Interrupted system call
EIO : CONSTANT := 5; -- I/O error
ENXIO : CONSTANT := 6; -- No such device or address
E2BIG : CONSTANT := 7; -- Arg list too long
ENOEXEC : CONSTANT := 8; -- Exec format error
EBADF : CONSTANT := 9; -- Bad file number
ECHILD : CONSTANT := 10; -- No children
EAGAIN : CONSTANT := 11; -- No more processes
ENOMEM : CONSTANT := 12; -- Not enough core
EACCES : CONSTANT := 13; -- Permission denied
EFAULT : CONSTANT := 14; -- Bad address
ENOTBLK : CONSTANT := 15; -- Block device required
EBUSY : CONSTANT := 16; -- Mount device busy
EEXIST : CONSTANT := 17; -- File exists
EXDEV : CONSTANT := 18; -- Cross-device link
ENODEV : CONSTANT := 19; -- No such device
ENOTDIR : CONSTANT := 20; -- Not a directory
EISDIR : CONSTANT := 21; -- Is a directory
EINVAL : CONSTANT := 22; -- Invalid argument
ENFILE : CONSTANT := 23; -- Too many open files in system
EMFILE : CONSTANT := 24; -- Too many open files
ENOTTY : CONSTANT := 25; -- Not a typewriter
ETXTBSY : CONSTANT := 26; -- Text file busy
EFBIG : CONSTANT := 27; -- File too large
ENOSPC : CONSTANT := 28; -- No space left on device
ESPIPE : CONSTANT := 29; -- Illegal seek
EROFS : CONSTANT := 30; -- Read only file system
EMLINK : CONSTANT := 31; -- Too many links
EPIPE : CONSTANT := 32; -- Broken pipe
EDOM : CONSTANT := 33; -- Math arg out of domain of func
ERANGE : CONSTANT := 34; -- Math result not representable
ECONNRESET : CONSTANT := 104; -- Connection reset by peer
-- Binding to C standard library strerror()
FUNCTION libc_strerror(error : Integer) RETURN Interfaces.C.Strings.chars_ptr;
PRAGMA Import (C, libc_strerror, "strerror");
-- Fetch the error message associated with an errno value
FUNCTION strerror(error : Integer) RETURN String IS
(Interfaces.C.Strings.Value(libc_strerror(error)));
-- Get the current errno value
FUNCTION Get RETURN Integer;
PRAGMA Import(C, Get, "__get_errno");
END errno;