Commit Graph

661 Commits

Author SHA1 Message Date
Bananymous 006a196e4a LibC: optimize strpbrk, str{,c}spn, strtok{,_r}
These matches are now detected with bitmasks instead of looping over the
second string
2025-04-24 01:39:49 +03:00
Bananymous 73f9de6635 Terminal: Add support for ANSI SGR 8bit and 24bit 2025-04-23 22:03:53 +03:00
Bananymous 12b9c82086 Terminal: Don't wrap cursor right after x == cols
This prevents scrolling when bottom right scroll is written to
2025-04-23 22:03:53 +03:00
Bananymous 28bf2d6374 Kernel/Terminal: Add support for ANSI DSR 2025-04-23 06:14:56 +03:00
Bananymous 8a00b53050 Kernel/Terminal: Fix ANSI SGR m for multiple values 2025-04-23 05:29:22 +03:00
Bananymous 8834241417 LibC: Fix scanf %n modifier
Old code was always returning off by one
2025-04-22 09:55:38 +03:00
Bananymous 96740d6be4 LibC: Make `inet_addr` spec compliant
I was not doing any error checking, basically i validated anything that
started with atleast a single digit.
2025-04-22 09:40:46 +03:00
Bananymous 33a0f562d3 resolver: Add support for CNAME
Also rework resolver's send format and convert test-tcp and nslookup to
use getaddrinfo
2025-04-22 08:36:44 +03:00
Bananymous 808c97020a Kernel/LibC: Implement SA_RESTART
I have been thinking how to do this for a long time but I finally
figured out a semi-clean way
2025-04-22 02:42:44 +03:00
Bananymous 34e680d792 ports/ncurses: Set some needed environment variables
ncurses depends on these being set to function properly
2025-04-22 01:56:34 +03:00
Bananymous f467a9a309 resolver: Resolve hostname to loopback address
We don't currently support loopback adapters, but some ports were trying
to resolve it.
2025-04-22 00:48:26 +03:00
Bananymous 5c9710c78b LibC: Implement `strcoll_l` 2025-04-22 00:48:26 +03:00
Bananymous 028c7a822f LibC: Don't define SCHAR_MAX in locale.c 2025-04-21 22:21:40 +03:00
Bananymous 543bb3cc4b LibC: Rework malloc locking add proper realloc 2025-04-21 20:29:28 +03:00
Bananymous b774f147da LibC: Implement dummy pthread_attr_{get,set}detachstate
detached threads are not yet supported, but this allows implementation
to make sure threads are joinable.
2025-04-21 19:58:01 +03:00
Bananymous 2a5921b9c9 LibC: Implement pthread_barrier
This is not fully working but should be fine for most cases
2025-04-21 19:53:38 +03:00
Bananymous 60cb392e97 LibC: Implement pthread_barrier
This is yet another bad sched_yield implementation :D
2025-04-21 19:52:14 +03:00
Bananymous d012c538c3 LibC: Add PTHREAD_SPIN_INITIALIZER
This is not posix, but current implementation allows adding this
2025-04-21 19:47:00 +03:00
Bananymous 1c88d0d7f7 LibC: Implement pthread_rwlock
This uses the same dumb sched_yield instead of actually blocking :D
2025-04-21 18:48:47 +03:00
Bananymous 773b8de8ba LibC: Refactor pthread type definitions 2025-04-21 14:38:40 +03:00
Bananymous 5d8dd090a9 LibC: Implement `pthread_once` 2025-04-21 14:17:17 +03:00
Bananymous 2cbfe70a28 DynamicLoader: Don't leak fds 2025-04-20 18:18:32 +03:00
Bananymous 16dbfbb267 LibC: Make limits.h `*_MAX` usable in #if comparisons 2025-04-20 17:15:20 +03:00
Bananymous 265b4c2b22 LibC: Implement `thread_equal` 2025-04-20 03:27:16 +03:00
Bananymous db9db2cc40 LibC: Implement basic pthread mutexes
This implementation is just calling sched_yield if it could not get
mutex. This is not optimal as it does not allow the CPU to idle, but it
works for now :)

Also I did not test this code at all, but it feels correct :D
2025-04-20 03:27:16 +03:00
Bananymous 3642eabac0 LibC: Use BAN::atomic_* functions in pthread spinlock
This allows us not to reinterpret_cast pthread_spin_t to
BAN::Atomic<pthread_spin_t> which is much better :)
2025-04-20 03:11:41 +03:00
Bananymous 1ccff9478f LibC: Don't define __tls_get_addr if TLS is disabled
This makes linking fail if something tries to use TLS :)
2025-04-20 03:11:41 +03:00
Bananymous 85f9b585f5 LibC: Don't yield on `pthread_spin_lock`
Thats kinda the whole point of spinlocks :D
2025-04-20 03:11:41 +03:00
Bananymous 01626b4c9f LibC: Add stub for `pthread_detach` 2025-04-20 03:11:41 +03:00
Bananymous a85841ca76 LibC: Add stub for `pthread_attr_setstacksize` 2025-04-20 03:11:41 +03:00
Bananymous fe6c4cd0b5 LibC: Implement POSIX TLD area (pthread_key*) 2025-04-20 03:11:41 +03:00
Bananymous f1585d09e1 LibC: Add more integer size definintions to limits.h 2025-04-19 21:50:26 +03:00
Bananymous 6f9dc2a9b8 Kernel/LibC: Implement `fchdir`, cleanup `chdir` and `getcwd` 2025-04-19 21:28:31 +03:00
Bananymous 7edfae8583 Shell: Cleanup `export` builtin 2025-04-19 21:23:26 +03:00
Bananymous 28275d86ea LibC/Shell: set PWD env in Shell, not libc
I have no idea why I was doing it in the libc
2025-04-19 21:16:11 +03:00
Bananymous 2d19b5074e LibC: Implement some missing wchar functions 2025-04-19 20:56:41 +03:00
Bananymous e62cc17797 LibC: Use `nl_langinfo` for strings in `strftime` 2025-04-19 20:03:56 +03:00
Bananymous 407eed212a LibC: Implement nl_langinfo
All values are from POSIX locale except CODESET which can be "UTF-8"
depending on the current locale
2025-04-19 20:02:01 +03:00
Bananymous 12d47858c1 LibC: Fix overflow error in `fread` and `fwrite` 2025-04-19 18:42:12 +03:00
Bananymous dc188e601a LibC: Add definition for LOG_UPTO 2025-04-19 02:48:21 +03:00
Bananymous 8a2df23260 LibC: Define RLIM_NLIMITS 2025-04-19 02:34:56 +03:00
Bananymous 46079a8612 LibC: Implement no-op posix_madvice
Also add non-posix prefixed definitions
2025-04-19 02:07:45 +03:00
Bananymous 8cd2d772b0 Shell: Print error if `execv` fails 2025-04-19 00:39:42 +03:00
Bananymous 2ff3f88b4d LibC: Add support for shebangs
I implemented shebangs in userspace as I don't really see the benefit of
doing it in kernel space. Only benefit I can think of is executing non
readable scripts but I don't really see the benefit in that.
2025-04-19 00:39:42 +03:00
Bananymous ab4dd6a268 LibC: Add ARG_MAX constant 2025-04-19 00:39:42 +03:00
Bananymous 0094efc7f4 LibC: Fix `execl*` memory leak on error 2025-04-18 20:54:53 +03:00
Bananymous d73a270fb1 Shell: Save and restore stdin flags after child returns
If child makes stdin nonblocking, Shell now restores it back to "normal"
flags
2025-04-18 18:26:09 +03:00
Bananymous d9647868cc Terminal: Fix ANSI SGR color invert 2025-04-18 17:32:24 +03:00
Bananymous 4409d0f03f Terminal: Implement ANSI CSI A, B, b, d, @ 2025-04-17 23:16:22 +03:00
Bananymous ebd00b1eb2 Terminal: Implement ANSI SGR 10, 39, 49 2025-04-17 23:15:44 +03:00
Bananymous 3ca0ef1583 LibGUI: Add copy_rect API
This allows moving parts of window around
2025-04-17 23:14:46 +03:00
Bananymous 88abbd90dc LibC: Fix strncat
strncat was using strncpy internally which nullpadded dest until n bytes
were written.

also there was no terminating null byte added if src was shorter than n
bytes
2025-04-17 23:12:40 +03:00
Bananymous bdbde25784 LibC: Rewrite environ handling
environ is only allocated on heap when you insert new variables.

environment variables are only `free`'d if they are `malloc`'d by libc
2025-04-16 21:08:01 +03:00
Bananymous ee9e941a56 LibC: Implement getitimer 2025-04-15 23:35:25 +03:00
Bananymous ac90800c3c Kernel/LibC/DynamicLoader: Implement thread local storage
For some reason this does not work on 32 bit version, so it is disabled
on that platform. I'll have to look into it later to find the bug :)
2025-04-15 23:33:39 +03:00
Bananymous 08f5833ca8 Kernel/LibC: Implement pthread_attr_init 2025-04-15 23:31:17 +03:00
Bananymous 4bcd3ed86f Kernel: Start working on TLS, add SYS_{SET,GET}_TLS 2025-04-15 23:31:17 +03:00
Bananymous 254fd80088 DynamicLoader: Cleanup and prepare for TLS 2025-04-15 23:31:17 +03:00
Bananymous d7e6df1e44 LibELF: Add definitions for ELF TLS values 2025-04-15 23:31:17 +03:00
Bananymous 36baf7b0af Kernel/LibC/DynamicLoader: Update process start ABI
We now use SysV abi for process startup
2025-04-15 23:05:52 +03:00
Bananymous e6026cb0b8 DynamicLoader: Handle circular dependencies 2025-04-15 23:05:52 +03:00
Bananymous cc2b4967ea LibC: Make malloc thread safe with pthread_spinlock 2025-04-15 23:05:52 +03:00
Bananymous cf59f89bfb LibC: Rework constructor/destructor calling
constructors are now called in _init_libc instead of crt0

destructors are now registered with atexit() instead of called manually
2025-04-15 23:05:52 +03:00
Bananymous 066ed7e4a1 LibC: merge atexit and __cxa_atexit into common function 2025-04-15 23:05:52 +03:00
Bananymous 4f49d60e4a DynamicLoader/LibC: lazy malloc environ
This allows DynamicLoader to just set the value of global environ symbol
without libc needing to malloc it at startup
2025-04-15 23:05:52 +03:00
Bananymous 3721dadd72 LibC: Make stdio and malloc initialization constructors 2025-04-15 22:01:57 +03:00
Bananymous 5539d5eed0 LibC: Implement pthread_cleanup_{pop,push} 2025-04-15 21:48:38 +03:00
Bananymous 64002626b9 LibC: Add h_addr definition for hostent backwards compatibility 2025-04-15 21:39:50 +03:00
Bananymous b418683337 LibELF: Add definition and values for auxiliary vectors 2025-04-15 21:31:02 +03:00
Bananymous be786be67d Kernel/LibC: Implement pthread_join 2025-04-02 12:58:39 +03:00
Bananymous e85b18e206 LibC: Fix pthread stack alignment 2025-04-02 12:58:39 +03:00
Bananymous f32f62dfc1 LibC: Implement pthread_spin_* functions 2025-04-02 12:58:39 +03:00
Bananymous 28392050bf LibC: Make pthread_t pid_t 2025-04-02 12:58:39 +03:00
Bananymous b9cc6063ff LibC: Implement stdio FILE locking 2025-04-02 12:58:39 +03:00
Bananymous 9066e62a97 Kernel/LibC: Implement sched_yield 2025-04-02 12:58:39 +03:00
Bananymous 5549696c3a Kernel/LibC: Implement pthread_self 2025-04-02 02:39:29 +03:00
Bananymous 691c9fe8e0 LibC: Fix bsearch
bsearch had unsigned integer underflow which was UB and returned false
positives
2025-04-02 00:03:50 +03:00
Bananymous 04463675c0 LibC: Lock file during gets 2025-04-01 23:26:13 +03:00
Bananymous b9da6a4a5d LibC: Implement getdelim and getline 2025-04-01 23:26:13 +03:00
Bananymous 2ba25b4c28 LibC: Add non standard types/values used by ports 2025-04-01 23:26:13 +03:00
Bananymous c1618e2b5d Kernel/LibC: Add basic support for pthread_{create,exit} 2025-04-01 23:26:13 +03:00
Bananymous 788f5429e1 LibC: Implement spec compliant abort() 2025-04-01 23:09:30 +03:00
Bananymous d8bb0b53f8 LibImage: Fix PNG palette decoding
I was only loading third of the palette to wrong indices :D
2025-02-12 10:09:03 +02:00
Bananymous 17014bb8de LibC: Fix strndup
I did not null terminate short strndup copies :D
2025-01-28 22:40:06 +02:00
Bananymous 7fedd94cc5 ln: Don't require link target to exist for symlinks 2025-01-28 17:46:36 +02:00
Bananymous 48eca3d031 LibC: Make libc usable with tcc
tcc does not provide its own stdint.h but defines everything in
stddef.h. Also tcc does not support [[noreturn]] attribute syntax.
2025-01-28 17:27:41 +02:00
Bananymous 21d3cf91a0 LibC: Implement some missing signal.h functions 2025-01-28 17:27:41 +02:00
Bananymous 7c57d736c6 Kernel/LibC: Fix dirent functions
dirent functions used to fail if a directory contained more than 128
files :D
2025-01-28 17:15:11 +02:00
Bananymous cbe3f2a4ac BuildSystem: Cleanup and fix cmake files
I now set library SONAME so i don't have to build them in build root.

Creating font now makes sure the install directory exists. This allows
building using make files.

LibC now links agains ligcc
2025-01-28 17:11:21 +02:00
Bananymous caa8c1da90 LibC: Add stub implementations for set{rlimit,priority} 2025-01-25 18:15:50 +02:00
Bananymous 60bffb5f49 LibC: Implement `clock` in terms of `clock_gettime`
This allows clock to "just work" after I update clock_gettime to support
CLOCK_PROCESS_CPUTIME_ID.
2025-01-24 19:58:44 +02:00
Bananymous c6cd185cb5 DynamicLoader: Fix copy relocations
Weak symbols are now actually resolved to the same strong symbol between
shared objects and copy relocations now work!
2025-01-24 19:23:33 +02:00
Bananymous b6455e0661 LibC: Implement stub for clock 2025-01-24 19:23:33 +02:00
Bananymous 15021b442c LibC: Fix memchr and memcmp assembly implementations
These functions did not work with size 0 :D
2025-01-23 21:55:26 +02:00
Bananymous 9893c90e74 Kernel: Remove SYS_DUP and implement it using fcntl F_DUPFD 2025-01-17 19:29:47 +02:00
Bananymous 766b8cd62e LibC: Fix stdio FILE operations
Mixing read/write/ungetc was broken. This mostly fixes everything. There
might still be some problems that have to be fixed
2025-01-16 14:57:58 +02:00
Bananymous 72059a9441 LibC: Redefine SEEK_* macros to match common systems
some ports written in assembly seem to depend on this
2025-01-14 22:52:13 +02:00
Bananymous ebecbb69ec LibC: Implement some mem* and str* functions in assembly
This made them a lot faster on modern cpus with optimized rep stos and
rep movs
2025-01-14 22:50:46 +02:00
Bananymous 14c70c5cc8 LibC: Make mem* and str* functions weak symbols
This allows adding architecture dependent implementations while still
providing an general implementation
2025-01-14 18:36:54 +02:00
Bananymous d62a67502e LibC: Remove global -fno-tree-loop-distribute-patterns flag
This is only really needed for string.cpp where mem* and str* functions
are defined
2025-01-14 18:35:33 +02:00