There were none: fcntl answered F_SETLK with EINVAL and flock was not a system call. Alpine's apk, which runs unmodified on SchOS through Alpine's own musl, locks its database before reading it and stopped there. kernel/fs/lock.c keeps one table of advisory locks keyed by (dev, inum): flock() for the whole file, owned by the open file description; F_SETLK/F_SETLKW/F_GETLK for byte ranges, owned by the process and released when it closes any descriptor on the file or exits; and the F_OFD_* forms, ranges owned by the description. flock and record locks do not see each other, as on Linux. Waiters sleep until any release and are interrupted by a signal. cmd/locktest checks each between a parent and a child, including range splitting, F_GETLK's report, and a blocked waiter being woken. shell.nix gains pkg-config, meson, ninja, m4, bison, flex and xz, for the X ports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
67 lines
3.3 KiB
C
67 lines
3.3 KiB
C
// Error numbers, matching the Linux x86_64 ABI values so that musl-linked
|
|
// programs interpret syscall failures correctly. Kernel code returns these
|
|
// negated (e.g. `return -ENOSYS;`), exactly like Linux does internally.
|
|
#ifndef SCHOS_ERRNO_H
|
|
#define SCHOS_ERRNO_H
|
|
|
|
#define EPERM 1 // Operation not permitted
|
|
#define ENOENT 2 // No such file or directory
|
|
#define ESRCH 3 // No such process
|
|
#define EINTR 4 // Interrupted system call
|
|
#define EIO 5 // I/O error
|
|
#define ENXIO 6 // No such device or address
|
|
#define E2BIG 7 // Argument list too long
|
|
#define ENOEXEC 8 // Exec format error
|
|
#define EBADF 9 // Bad file descriptor
|
|
#define ECHILD 10 // No child processes
|
|
#define EAGAIN 11 // Try again
|
|
#define ENOMEM 12 // Out of memory
|
|
#define EACCES 13 // Permission denied
|
|
#define EFAULT 14 // Bad address
|
|
#define ENOTBLK 15 // Block device required
|
|
#define EBUSY 16 // Device or resource busy
|
|
#define EEXIST 17 // File exists
|
|
#define EXDEV 18 // Cross-device link
|
|
#define ENODEV 19 // No such device
|
|
#define ENOTDIR 20 // Not a directory
|
|
#define EISDIR 21 // Is a directory
|
|
#define EINVAL 22 // Invalid argument
|
|
#define ENFILE 23 // File table overflow
|
|
#define EMFILE 24 // Too many open files
|
|
#define ENOTTY 25 // Not a typewriter
|
|
#define EFBIG 27 // File too large
|
|
#define ENOSPC 28 // No space left on device
|
|
#define ESPIPE 29 // Illegal seek
|
|
#define EROFS 30 // Read-only file system
|
|
#define EMLINK 31 // Too many links
|
|
#define EPIPE 32 // Broken pipe
|
|
#define ERANGE 34 // Math result not representable
|
|
#define ENAMETOOLONG 36 // File name too long
|
|
#define ENOLCK 37 // No record locks available
|
|
#define ENOSYS 38 // Function not implemented
|
|
#define ENOTEMPTY 39 // Directory not empty
|
|
#define ELOOP 40 // Too many symbolic links encountered
|
|
|
|
// Sockets. Same Linux x86_64 values, so strerror() in a musl-linked program
|
|
// prints the message the programmer expected rather than a neighbouring one.
|
|
#define ENOTSOCK 88 // Socket operation on non-socket
|
|
#define EDESTADDRREQ 89 // Destination address required
|
|
#define EMSGSIZE 90 // Message too long
|
|
#define EPROTOTYPE 91 // Protocol wrong type for socket
|
|
#define ENOPROTOOPT 92 // Protocol not available
|
|
#define EPROTONOSUPPORT 93 // Protocol not supported
|
|
#define EOPNOTSUPP 95 // Operation not supported on transport endpoint
|
|
#define EAFNOSUPPORT 97 // Address family not supported by protocol
|
|
#define EADDRINUSE 98 // Address already in use
|
|
#define EADDRNOTAVAIL 99 // Cannot assign requested address
|
|
#define ECONNRESET 104 // Connection reset by peer
|
|
#define EISCONN 106 // Transport endpoint is already connected
|
|
#define ENODATA 61 // No data available -- no such attribute
|
|
#define ENOBUFS 105 // No buffer space available
|
|
#define ENOTSUP 95 // Operation not supported
|
|
#define ENETDOWN 100 // Network is down
|
|
#define ENETUNREACH 101 // Network is unreachable
|
|
#define ENOTCONN 107 // Transport endpoint is not connected
|
|
#define ECONNREFUSED 111 // Connection refused
|
|
|
|
#endif // SCHOS_ERRNO_H
|