Commit Graph

832 Commits

Author SHA1 Message Date
Jonas 'Sortie' Termansen 85bad22f34 fixup! Recognize and advertise POSIX 2024 support. 2024-06-23 23:19:16 +02:00
Jonas 'Sortie' Termansen 3474d7f674 Add PTHREAD_NULL. 2024-06-23 23:04:04 +02:00
Jonas 'Sortie' Termansen 020c263d5d Add nl_langinfo(3) ALTMON_* and ABALTMON_*. 2024-06-23 22:32:13 +02:00
Jonas 'Sortie' Termansen 8210ac97d3 fixup! Add sig2str(3) and str2sig(3). 2024-06-23 20:34:40 +02:00
Jonas 'Sortie' Termansen 5c896e027a Add ESOCKTNOSUPPORT. 2024-06-23 19:56:50 +02:00
Jonas 'Sortie' Termansen 23bce072c0 Reject the obsolescent inet_addr and inet_ntoa. 2024-06-23 19:48:50 +02:00
Jonas 'Sortie' Termansen 16abe619e6 fixup! Implement dladdr(3). 2024-06-23 19:45:58 +02:00
Jonas 'Sortie' Termansen 535ee9649f Add sig2str(3) and str2sig(3). 2024-06-23 19:38:24 +02:00
Jonas 'Sortie' Termansen 64fc6b5f6d Add thread wait functions with clock support.
- pthread_cond_clockwait(2)
- pthread_mutex_clocklock(2)
- pthread_mutex_timedlock(2)
- pthread_rwlock_clockrdlock(2)
- pthread_rwlock_clockwrlock(2)
- pthread_rwlock_timedrdlock(2)
- pthread_rwlock_timedwrlock(2)
- sem_clockwait(2)
2024-06-23 19:05:04 +02:00
Jonas 'Sortie' Termansen f460bb78aa fixup! Add memmem(3). 2024-06-23 19:01:51 +02:00
Jonas 'Sortie' Termansen 0f5aaed789 Add memmem(3). 2024-06-23 17:28:53 +02:00
Jonas 'Sortie' Termansen 8f68ea49ce Add getlocalename_l(3). 2024-06-23 17:28:08 +02:00
Jonas 'Sortie' Termansen 240d227be8 Implement dladdr(3). 2024-06-23 13:48:48 +02:00
Jonas 'Sortie' Termansen c4a44531bf Add _Fork(2). 2024-06-23 13:40:39 +02:00
Jonas 'Sortie' Termansen 82fd2d4c92 Recognize and advertise POSIX 2024 support.
Update feature macros for interfaces added to POSIX 2024.

This commit begins the work of implementing POSIX 2024, which was
largely already implemented as extensions.
2024-06-23 13:33:55 +02:00
Jonas 'Sortie' Termansen 50792cb986 Remove unused alternative const safe sortix string functions. 2024-06-23 12:10:18 +02:00
Jonas 'Sortie' Termansen 6e51c1ae51 Add init groups.
Every process now has an init process like it has a session, and each
session belong to an init. Orphaned processes are reparented to its init
process. All descendent processes are SIGKILL'd when an init process exits
and creating additional processes/threads fails.

Add setinit(2) for becoming the init process for your child processes and
add getinit(2) for locating your init process.

Add TIOCSCTTY force flag that releases a terminal from its current session
and makes it the controlling terminal for the current session. This ioctl
is essential to transferring the controlling terminal to a nested init,
which has its own session.

Add TIOCUCTTY that releases the terminal as the controlling terminal for
its current session.

Remove INIT_PID as it is replaced by getinit(2).
2024-06-22 18:25:49 +02:00
Jonas 'Sortie' Termansen eb1f28c738 Add kernel heap allocation tracing debug facility. 2024-06-22 18:25:48 +02:00
Jonas 'Sortie' Termansen 27275e151d Fix bugs in glob(3). 2024-05-22 13:26:56 +02:00
Jonas 'Sortie' Termansen 04b605477e Add IFF_UP to getifaddrs(3). 2024-03-25 23:11:36 +01:00
Juhani Krekelä 610b51ffdc Fix getopt_long(3) handling of required argument at the end of argv.
Previously if argv ended with a long option that required an argument
followed by said argument, getopt_long(3) would generate an error saying
that the option requires an argument even though it was provided. This
was because the comparison of optind against argc did not account for
the fact that optind had already been incremented, causing an
off-by-one.
2023-05-16 02:17:22 +03:00
Jonas 'Sortie' Termansen af92d5cae8 Fix strftime(3) %I off by one. 2023-04-04 20:44:38 +02:00
Jonas 'Sortie' Termansen 9033153c47 Add sub_leap_seconds(3) and add_leap_seconds(3).
Advertise leap seconds being counted via CLOCK_REALTIME_HAS_LEAP_SECONDS.
2023-03-27 00:06:33 +02:00
Jonas 'Sortie' Termansen 97c57ca604 Add strptime(3). 2023-03-22 00:16:15 +01:00
Jonas 'Sortie' Termansen 4ac7072f2a Add AI_ADDRCONFIG to getaddrinfo(3). 2023-03-19 21:56:54 +01:00
Jonas 'Sortie' Termansen c57ff050e9 Add include and comment support to passwd(5) and group(5). 2023-03-19 21:53:21 +01:00
Jonas 'Sortie' Termansen e9877d8080 Fix fmemopen(3) fseeko(3) overflow detection. 2023-03-19 11:08:01 +01:00
Jonas 'Sortie' Termansen 47e1cc439a Add glob(3).
Switch sh(1) to use glob(3).

Remove compatibility for no glob(3) from the ports.
2023-03-16 00:20:43 +01:00
Jonas 'Sortie' Termansen 2cd7361294 Add memusage(2).
Switch xz to memusage(2) and fix native self-cross issue.

This is a compatible ABI change.
2023-03-09 20:27:17 +01:00
Jonas 'Sortie' Termansen 7963da689d Fix internal types in fgetpwent_r and fgetgrent_r. 2023-03-06 20:18:33 +01:00
Jonas 'Sortie' Termansen b9a72bbfbc Add ssh port. 2023-02-26 15:13:19 +01:00
Pedro Falcato be563c165e Fix ptsname_r return value
Per POSIX, it should return 0 on success and errno (!= 0) on error.
2023-02-22 17:25:01 +00:00
Pedro Falcato e2c57ad789 Fix ttyname_r error return values
POSIX specifies ttyname_r should return errno and not do the usual
return errno = error, -1;

Fixes #732
2023-02-21 23:22:11 +00:00
Jonas 'Sortie' Termansen 4379ca962a Add dhclient(8).
Co-authored-by: Juhani Krekelä <juhani@krekelä.fi>
2023-02-21 23:24:06 +01:00
Jonas 'Sortie' Termansen 08ddcc89b8 Add domain name system support to getaddrinfo(3). 2023-01-10 23:19:17 +01:00
Jonas 'Sortie' Termansen 580b71ae89 Add getifaddrs(3) and freeifaddrs(3). 2023-01-10 22:31:48 +01:00
Jonas 'Sortie' Termansen cbf0c1dc97 Fix endian swapping classes reading volatile values twice. 2023-01-09 23:44:40 +01:00
Jonas 'Sortie' Termansen 3997116656 Add if_nameindex(3). 2022-12-16 23:44:50 +01:00
Jonas 'Sortie' Termansen 2ef6804ead Add networking stack.
This change adds all the kernel parts of a network stack. The network stack
is partial but implements many of the important parts.

Add if(4) network interface abstraction. Network interfaces are registered
in a global list that can be iterated and each assigned an unique integer
identifier.

Add reference counted packets with a cache that recycles recent packets.

Add support for lo(4) loopback and ether(4) ethernet network interfaces.
The /dev/lo0 loopback device is created automatically on boot.

Add arp(4) address resolution protocol driver for translation of inet(4)
network layer addresses into ether(4) link layer addresses. arp(4) entries
are cached and evicted from the cache when needed or when the entry has not
been used for a while. The cache is limited to 256 entries for now.

Add ip(4) internet protocol version 4 support. IP fragmentation and options
are not implemented yet.

Add tcp(4) transmission control protocol sockets for a reliable transport
layer protocol that provides a reliable byte stream connection between two
hosts. The implementation is incomplete and does not yet implement out of
band data, options, and high performance extensions.

Add udp(4) user datagram protocol sockets for a connectionless transport
layer that provides best-effort delivery of datagrams.

Add ping(4) sockets for a best-effort delivery of echo datagrams.

Change type of sa_family_t from unsigned short to uint16_t.

Add --disable-network-drivers to the kernel(7) options and expose it with a
bootloader menu. tix-iso-bootconfig can set this option by default.

Import CRC32 code from libz for the Ethernet checksum.

This is a compatible ABI change that adds features to socket(2) (AF_INET,
IPPROTO_TCP, IPPROTO_UDP, IPPROTO_PING), the ioctls for if(4), socket
options, and the lo0 loopback interface.

This commit is based on work by Meisaka Yukara contributed as the commit
bbf7f1e8a5238a2bd1fe8eb1d2cc5c9c2421e2c4. Almost no lines of this work
remains in this final commit as it has been rewritten or refactored away
over the years, see the individual file headers for which files contain
remnants of this work.

Co-authored-by: Meisaka Yukara <Meisaka.Yukara@gmail.com>
2022-12-11 13:40:34 +01:00
Jonas 'Sortie' Termansen 3154492dcf Fix deadlocks and lost wakeups in threading primitives.
The futex and kutex implementations used the same linked list for waiting,
however the futex implementation used kutexs and the same thread could be in
the same list twice in the case of contention. This case corrupted the wait
lists and led to deadlocks and lost wakeups. This change fixes the problem
by having separate data structures for futexes and kutexes.

Mutexes contended by multiple threads could lead to lost wakeups since only
one contended thread was awoken and subsequent unlocks are unaware of the
unawakened contended threads. This change fixes the problem with a temporary
solution of waking all the contended threads until a better design is
implemented.

Additional details are tweaked to be more reliable and simpler.
2022-12-10 21:29:23 +01:00
Jonas 'Sortie' Termansen 006145d335 Add EHOSTDOWN. 2022-12-04 23:18:17 +01:00
Jonas 'Sortie' Termansen 050ba71ca0 Fix utime(3) not handling times being NULL. 2022-09-18 23:21:04 +02:00
Juhani Krekelä e4c8d42b7c Update to dbus-1.14.0. 2022-07-11 00:25:00 +02:00
Jonas 'Sortie' Termansen 611dc22e73 Standardize header include guards.
This change makes all the standard library and kernel headers use header
guards with a consistent scheme within the reserved namespace to avoid
conflicts with non-standard-library-implementation code.
2022-07-09 20:51:13 +02:00
Jonas 'Sortie' Termansen 85e9fcde94 Change strverscmp(3) non-digit behavior to match GNU sort -V.
This behavior differs from glibc strverscmp(3) but is useful and matches
the behavior of GNU sort -V and musl strverscmp(3.
2022-07-09 20:51:13 +02:00
Jonas 'Sortie' Termansen fe729d6032 Fix typo in <malloc.h>. 2022-04-26 01:08:31 +02:00
Jonas 'Sortie' Termansen 322c8317d6 Fix non-throwing operator new failure checks being optimized away. 2022-04-26 01:08:19 +02:00
Juhani Krekelä e9c4946ff7 Document getdnsconfig(2) and setdnsconfig(2). 2022-03-06 16:18:12 +02:00
Jonas 'Sortie' Termansen ac9c24219b Implement RFC5424 syslog version 1. 2022-01-05 22:00:53 +01:00
Jonas 'Sortie' Termansen 3c43f71084 Implement file descriptor passing.
This change refactors the Unix socket / pipe backend to have a ring buffer
containing segments, where each segment has an optional leading ancillary
buffer containing control messages followed by a normal data buffer.

The SCM_RIGHTS control message has been implemented which transfers file
descriptors to the receiving process. File descriptors are reference counted
and cycles are prevented using the following restrictions:

1) Unix sockets cannot be sent on themselves (on either end).
2) Unix sockets themselves being sent cannot be sent on.
3) Unix sockets cannot send a Unix socket being sent on.

This is a compatible ABI change.
2021-12-31 22:24:11 +01:00