Hare 0.24.2-rc1
This is the first release candidate for Hare 0.24.2. Highlights of this
release include:
* NetBSD support
* for-each loops and the "done" type
* Optional parameters for functions
* Support for shared memory and memfds on supported platforms
* Revised and improved APIs for unix::*
* Improved performance for bufio and related APIs
* regex:: now supports multiple alternation (i.e. (x|y|z))
* New cryptography APIs:
* crypto::ec
* crypto::ecdh
* crypto::ecdsa
This release includes a number of breaking changes.
The introduction of the "done" type to improve the iterator pattern
introduces the following changes:
* "done" is now a reserved word and cannot be used in user-defined names
* The following standard library symbols have been updated to use done
types in their API:
* bytes::next_token/bytes::prev_token
* encoding::utf8
* fs::next
* glob::next
* io::EOF
* mime
* path::nextiter
* strings::next/strings::prev
* strings::next_token/strings::prev_token
* In short, if your program matches on a function using the iterator
pattern with "void" and this causes an error from 0.24.2, the
correct solution is likely to rewrite it to use a for-each loop, or
replace "void" with "done" in the relevant match case.
bytes::tokenize now accepts multiple single-byte delimiters and removes
support for multi-byte delimiters. strings::tokenize accepts multiple
delimiters, limited to the set of ASCII characters.
The following APIs have been overhauled and programs depending on them
may need to be refactored:
* unix::hosts
* unix::passwd
Several breaking changes have been made to time:
* time::date now accepts a zone offset (zoff) parameter in
time::date::reckon and time::date::truncate.
* time::date::calculus has been renamed to time::date::rflag.
* time::date::realize requires .vloc to be set, and no longer defaults
to UTC.
* time::date::now() is renamed to time::date::localnow() and
time::date::nowutc() is renamed to time::date::now()
* time::date::EPOCHAL_JULIAN and EPOCHAL_GREGORIAN have been renamed to
EPOCHDAY_JULIAN and EPOCHDAY_GREGORIAN respectively
* time::chrono::eq has been removed and replaced with
time::chrono::simultaneous and time::chrono::coincident
* time::chrono::mzone has been renamed to time::chrono::ozone
* The type of time::date::parsefail has been chnaged from rune (storing
the offending format specifier) to (size, rune), which adds the index
of the position where the parsing failure occured.
* Several constants for format layouts in time::date have been renamed:
[[EMAILZ]] => [[EMAILZONE]]
[[STAMP_NANO]] => [[STAMPNANO]]
[[STAMP_ZOFF]] => [[STAMPZOFF]]
[[STAMP_ZONE]] => [[STAMPZONE]]
[[STAMP_NOZL]] => [[STAMPLOC]]
strconv's "b" family of functions (those which accept a base for the
conversion) have been removed, and the remaining functions accept the
desired base as an optional parameter.
The following modules have been removed from the standard library and
placed in the extended library:
* crypto::bcrypt
https://git.sr.ht/~sircmpwn/hare-bcrypt
* format::tar
https://git.sr.ht/~sircmpwn/hare-tar
Adnan Maolood (3):
errors::strerror: handle errors::refused
cmd/hare: implement compile-only builds
regex: Handle escaped characters in brackets
Ajay R (17):
encoding: implemented the base-32 encoding scheme as defined by RFC 4648
strings: fix iter documentation
encoding::base32: add ASCII check for encoding alphabet
encoding::base64: new design
fs: (move) remove new file if error occurs
base32 and base64: fix iteration variable's decrement logic
encoding::base32: add convenience functions similar to base64
encoding::base32: place encode above decode for consistency with base64
fix errors after disallowing assignment of non-void types to void
base32 and base64: return correct number of bytes processed by encode_writer
encoding::base32: propagate error instead of ! in encode_closer
encoding::hex: make stream oriented
temp: update +freebsd.ha to use new hex module design
encoding::hex: add README
encoding::base32: new_{encoder, decoder} -> new{encoder, newdecoder}
encoding::base32: update README
encoding::base64: update README
Ajay Raghavan (1):
encoding/base64: Corrected encode() test function; Removed unused variable
Alexey Yerin (191):
fs: implement chmod
fs: implement chown
bufio: add scan* functions
lex: replace io::getrune by bufio::scanrune
getopt: update getopts -> getopt in the example
bufio(scan): return io::EOF if nothing was read
Add unix::passwd module for /etc/passwd parsing
Add encoding::hex::dump
unix/passwd: split out error type to types.ha
unix/passwd: add /etc/group parser
unix/passwd: update abort message to be consistent
Fix use-after-free in unix::passwd
unix/passwd: return user list as []str in grent
hare/parse,unparse: add support for len expression
hare/parse,unparse: add size expression
hare/parse: enclose expected tokens in ''
hare/parse,unparse: add assertion expressions
Update match statements according to spec update
hare/parse,unparse: add match expressions
haredoc: show usage if given not enough arguments
unix/passwd: update refs to look better in haredoc
path: remove unnecessary strings::toutf8
haredoc/html: highlight most of the types
hare::parse: handle pointer types in match cases
Fix module::identpath memory leaks
hare::module: fix sha256 leak
hare::module: fix bufio::scanline leak
hare::module: free tags on return
rt: add flag parameter to fch{own,mod}at syscalls
crypto/md5,sha1: fix sha256 and sha512 references
haredoc/html: highlight union types
Update IRC channel according to move to Libera
linux::io_uring: fix typos in docs
fs: return errors::unsupported instead of abort()ing
strconv: allow leading '+' in stoi*
linux::io_uring: use error instead of errors::error
hare::unit: use match insead of mutating body
getopt: fix typo
getopt: do not add newline when there are no arguments
cmd/haredoc: emit error types in -Fhare
hare::unparse: move '!' to the beginning
cmd/haredoc: implement TTY output
cmd/haredoc/html: move alias types into type_html
unix::tty: open /dev/tty as writable
cmd/haredoc/tty: make comments bold instead of gray
cmd/haredoc: hide undocumented members unless -a is specified
cmd/haredoc: show README as a comment in -F{hare,tty}
cmd/haredoc/hare: add missing space between // and README
unix::tty: remove stdout fall-back for open()
unix::tty: improve documentation a bit
cmd/haredoc/hare: add an empty line after README
cmd/haredoc: error out on non-existent declarations
cmd/haredoc: set -a when looking up a symbol directly
os::exec: fix non-exhaustive match
cmd/hare: move archive files to the end of ld command
format::ini: new module
math: only build testdata on +test
cmd/haredoc: implement constants (def) in -Fhare and -Ftty
time: add documentation for constants
types: add strflag reflection helper
types: strflag: special case 0 value to not match on anything
types: add tests for reflection helpers
hare::{parse,ast}: add NONE=0 to bitfield enums
hare::types: add NONE=0 to func_flags to match hare::ast
all: add 0 value to enums used as flags
types+test: use '&' on literals instead of temporary variable
format::ini: correct format string in strerror()
iobus: export setuser and getuser
format::ini: remove obsolete comment
iobus: update documentation and assertion messages for open/create
getopt: update switch syntax in example
cmd/haredoc: don't try to search for unexported declarations
iobus: free the bus object itself in destroy()
rt: drop types::ENUM
unix::tty: add initial termios support
shlex: new module
shlex: fix whitespace folding
shlex: rewrite and fix some regressions
fs::mem: fix unitialized inode in create()
all: fix incomplete structs
hare::module: export parse_name
cmd/hare: track tags of hare.sc script
Initial support for +libc
cmd/hare: implement -l
strings: make dupall return a new slice, add freeall
shlex: drop splitfree in favor of strings::freeall
unix::tty: add termios support on +freebsd
cmd/haredoc: tty: fix enum unparsing
shlex: correctly handle leading whitespace
io: remove unused strings import
io::limit{reader,writer}: take an io::handle
strio: use caller allocation
bufio: use caller allocation
Fix up tests using bufio
os+linux: fix stdout handle
os+freebsd: update to reflect bufio changes
format::elf: fix typo
iobus::io_uring: correctly dispatch internal SQEs
path::{dir,base}name: fix dup reference
path::extension: accept a (str | *buffer)
+libc: fix regressions caused by unique @init names
strings: use alloc([...], len) syntax instead of rt::malloc
cmd/harec: update for new QBE linkage syntax
cmd/hare: add a progress indicator when building
cmd/hare: clear progress indicator after build finishes
os+freebsd: remove os:: namespace from getcwd call
rt+freebsd: fix global syntax for socket constants
cmd/hare: clear the indicator if a build error happens
cmd/hare: don't close stderr
os+freebsd: add amode enum from +linux
rt,math+riscv64: implement fenv functions
Implement net::uri
scripts/gen-docs: don't download mascot.jpg
cmd/haredoc: only allocate a buffer for unparse::_type when brief is set
Fix undefined references throughout stdlib
cmd/haredoc: resolve enum members
gen-stdlib: add crypto::hmac dependency on crypto::sha1 for +test
io: replace stream type with vtable in the docs
cmd/haredoc/html: use a more contrast color for build tags on dark theme
hash::fnv: use correct vtables for fnv{32,64}a()
hare::types: fix tagged union sorting regression
Do not rebuild haredoc and harec2 on install
net/uri: add query string encoding and decoding
Makefile: clean out generated manpages
io: fix documentation for stream/vtable
cmd/hare: resize the progress bar according to terminal size
hare::lex: improve handling of invalid UTF-8
cmd/harec: display error even if it includes invalid UTF-8
bufio: extend used buffer size when unreading
cmd/hare: error out if module has no input files
cmd/hare: display "(root)" instead of empty namespace
cmd/hare: add newlines after environment variables in verbose mode
hare::parse: add tuple unpacking
os::exec: return process from fork()
rt+linux: add ptrace wrapper and related types
io: return error from fd_close()
crypto::keystore: fix incorrect return type
bufio::scanbyte: remove underread check
cmd/hare: clear the progress bar when an error happens
rt: add shmat syscall
hare::lex: propagate syntax errors in nextw
hare::lex: error out when encountering an invalid escape sequence
hare::lex: error out when encountering an invalid exponent
rt: add mremap
cmd/hare: simplify getcmd and getenv
net::ip: export parsev4 and parsev6
net::uri: do not ignore invalid characters in parse_authority
net::uri: disallow non-IPv6 addresses inside [ ... ]
net::uri: disallow '@' after seeing userinfo
net: correct references of net::unix::prepfiles -> allocfiles
os::exec: fill utime and stime
+libc: include empty .init_array section
Correctly convert strconv::base::DEC -> 10
rt+libc: free() the pointer in realloc(p, 0)
hare/module: tolerate empty extension
linux::timerfd: correct man page reference
linux::timerfd: add enums for flags
hare::unparse: Wrap expressions in parentheses where needed
net::uri: Remove duplicate test
math: Add gcd
unix::signal: Set SA_SIGINFO by default
unix::signal::siginfo: Add most options specified by POSIX
sort: Document that it provides a stable sort
cmd/hare: Rename the temporary file after writing typedefs
sort: Implement powersort for large arrays
sort: Add performance tests for powersort
test: Use time::SECOND
cmd/hare: Avoid printing unnecessary newlines
cmd/hare: Print a newline before the exit code
cmd/hare: Do not pass fs::flag::CREATE to os::create
os+freebsd: Do not invert CLOEXEC/CTTY twice
strconv: Add base::DEFAULT instead of base::DEC being equal 0
cmd/haredoc: Duplicate the static value of lex::tokstr
hare::unparse: Consider indentation and newlines part of a comment
cmd/haredoc: Add missing newlines after declarations in the index
time::chrono: correct leap-seconds.list on FreeBSD
time::chrono: imrove timescale load fail abort msg
sort: Get rid of memmove and bring back bounds checks
cmd/hare: Improve errors for task failure
hare::parse: Disallow single element tuples
hare::parse: Disallow single type tagged unions
hare::parse: Disallow single element tuple types
cmd/hare: Improve 'Command not found' error message in get_version
strconv: Remove base restrictions from doc comment of integertosb
math: Accept types::signed instead of integer in absi
FreeBSD: Fix build with +libc
+libc: Avoid overriding the default linker script on other platforms
CI: Run tests with libc on FreeBSD
encoding::utf8: Return invalid from utf8sz on invalid starting byte
bufio::scanner: Always shift readout before requesting reads
sort: Replace []void with []opaque in README
Andrew Chambers (1):
rt: Add more fcntl locking definitions.
Andri Yngvason (13):
gen-stdlib: add strconv::stou
ascii: ctype: fix octal notation
strconv: add string to unsigned integer converters
strconv: stou: extract types into own file
strconv: move tests into +test directory
strconv: add string-to-integer converter
strings: add substring function
gen-stdlib: add strings::sub
strconv: stou: implement base 16, 8 and 2
strings: sub: align range with slicing operator
strconv: utos: implement base 2, 8 and 16
strconv: itos: implement itos using utos
fmt: add modifier parsing
Antero Mejr (2):
tests: skip NaN sign-related complex tests
time::chrono: allow /etc/localtime to be a file
Armin Preiml (127):
introduce crypto::cipher::block
implement constant time, 64bit optimised AES
change dst to dest to be uniform with other stdlib
add crypto::math::xor
add cipher block chaining mode to crypto::cipher
add in place encryption tests for aes and cbc
add block size bsz to hash
add hash::createfunc
add crypto::hmac
add crypto::cipher::stream interface
add crypto::cipher::ctr stream mode
rename dst to dest vars to match the other stdlib
caller must provide a buffer for cipher::cbc mode
replace bytes::copy with slice copy in cbc.ha
fix blake2b when writing multiple times
implement version 1.3 of crypto::argon2
remove trailing spaces
crypto::cipher: use finish for stream ciphers
Implement Salsa20 and XSalsa20 in crypto::salsa
create crypto::mac, an interface for macs
crypto::hmac: use crypto::mac api instead of hash
hash: remove createfunc
implement the crypto::poly1305 mac
crypto::salsa: clear temp secret state on init
implement Chacha20 and XChacha20 in crypto::chacha
crypto::chacha: skip block on setctr
crytpo::poly1305: pass key by reference
crypto::poly1305: properly fill block during write
crypto::math: fix cmpslice
crypto: implement compare
crypto: implement encrypt and decrypt
crypto: fix padding for poly1305 in encrypt/decrypt
crypto: limit slices to equal length on slice copy
crypto::argon2: fix memory allocation in tests
crypto::hmac: require caller provided buffer
crypto::sha256: export internal block size
crypto::hmac: provide sha256 variant of hmac
crypto: make sure to clear state on closing hashes
crypto::argon2: make sure to close blake2b after use
implement crypto::aes::xts
add cpuid for x86_64 to check flags and vendor
implement AES-NI for x86_64
remove hash::finish
replacing hash::finish with hash::sum
crypto::aes: x86ni doesn't support parallel operations
crypto::aes::x86ni_init: save some jumps
mime: fix match in load_systemdb
bufio::fixed: fix empty writes exceeding buffer
crypto::curve25519: move clamping to separate fn
implement crypto::x25519
crypto::cipher: add an abstract xorstream
refactor crypto::aes::ctr to be a xorstream
crypto::chacha20: convert to cipher::xorstream
crypto::salsa: convert to a cipher::xorstream
crypto::cipher: remove deprecated stream interface
crypto::aes: make internal x86ni functions private
crypto::cipher::poly1305: fix typo in attribution
crypto::cipher::ctr: finish underlying block on close
crypto::cipher: implement gcm
crypto::math: Add a bunch of ct u32 bit operations
change cmp{slice,u8} to eq{slice,u8}
crypto::math: add divu32
add crypto::hkdf
crypto::cipher: test gcm inplace en/decryption
crypto:ed25519: name keys pubkey and privkey
crypto::math: minor doc improvement
crypto::hmac: make key const
log: add silent logger for turning off logs
build: remove LOCALSRCDIR
crypto::cipher::gcm: tag as slice
add crypto::bigint
crypto::bigint: improve some function names
encoding::pem: support crlf
strconv: add strerror
rt: make alarm syscall only available to x86_64
add crypto::rsa core functions
crypto::bigint: add decrodd and isodd
crypto::rsa: add pkcs1 sign and verify support
gen-stdlib: add crypto::rsa
crypto::cipher: block vtable
crypto::aes unify blocks
crypto::aes: add [[aes]] for choosing the algorithm
crypto::aes: unexport specific aes implementations
bufio: fix doc
crypto::salsa: slice instead of array ptr
crypto::chacha20: slice instead of array ptr
crypto::aes: fix x86ni processing more than one block
io::writeall: abort on error after partial write
io::copy_fallback: use non static buffer
encoding::base64: refactor encoder
datetime: fix doc link
crypto::argon2: fix initial hash and block indexing
crypto::argon2: fix memsize calculation
argon2: rename config to conf to break api
crypto::derivekey: fix comment
datetime: implement %F and %T specifiers in parse
datetime: fail on invalid format specifier
datetime: add errors.ha to build script
datetime: from_str: use default values
mime: move test entries into a +test file
io::teestream: implement writer
add crypto::chachapoly
crypto: refactor authenc to use crypto::chachapoly
base64: avoid infite loop in decoder
hkdf: add extract and expand functions
crypto::ed25519: change api to take slices
crypto: use SZ as suffix for sizes
hash: use SZ as suffix for sizes
use SZ as suffix for sizes in other modules
rt: add getpgid syscall
crypto::*25519: change api to take slices
add hare-tls to TREES
Makefile: add haredoc to the all target
Makefile: also add haredoc to {un}install targets
crypto::ed25519: simplify golden test
base64: do not abort on utf8 multibyte chars
bufio::scanner: implement io::reader
bufio::scanner: support unread
bufio::scanner: fix unread for scan_byte and scan_rune
time::date: move def to global scope
crypto::aes: run aes ni tests only if ni available
add ~apreiml/hare to TREES
crypto::bigint: decode only actual encoded words
crypto::math: make eq0u32 param u32
crypto::{math,bigint}: export some util functions
speed up crypto::argon2 a bit
crypto::rsa: add pubkey_nbitlen
Armin Weigl (17):
strconv: Fix typos
strconv: style
move syscall helpers into function-sections
Use $AS
lex_string tests
bufio/fixed use slice assignment
Add @noreturn to start_*
lex: implement \x, \u and \U
fix trailing comma in member import
hare::lex::lex_unicode: replace match with type assertion
endian: *getu64
rt/+linux/syscall+aarch64: Move parameters between registers
rt/+linux/syscall+riscv64.s: Move parameters between registers
rt/+freebsd/syscall+riscv64.s: Move parameters between registers
rt/cpuid: fix compilation on non x86_64 architectures
net::unix::socketpair: return net::socket instead of io::file
gen-stdlib: unix::tty: fix dependencies
Autumn! (65):
Fix memory leaks in os::exec::{finish, clearenv}
bytes: Add rtokenize and rcut
strings: Add rindex, rbyteindex, rtokenize, rsplitn, rcut
Add color to harec when appropriate
cmd/haredoc: reduce filesize of mascot and use as favicon
cmd/hare: Don't append .o/.a to output path of build -c
haredoc: Don't overwrite $LESS and $MORE
Implement deps subcommand
Add graphviz dotfile output to deps
time::chrono: heap allocate zone.abbr
strconv: mark strconv::error as an error type
datetime: populate time in finish(*builder)
time::chrono: incorporate zone offset in in() and to_instant()
strings: change multireplace to work in a single pass
encoding::utf8: improve out-of-range tests
os: move fs.ha to os.ha
os: add exists()
hare::{lex,parse}: statically allocate syntax error path
strio: return error instead of abort when fixed buffer exceeded
io: implement lock()
format/elf: rename files to avoid conflict
path: refactor init() to take varargs, drop reset()
path: remove allocate()
path: rename add() to push()
path: implement pop()
path: implement peek()
path: remove trailing separators during normalization
path: implement parent()
path: use custom error types and strerror
path: tidy up dirname/basename
path: make iterators only take a *buffer
path: replace extension() with stack-based functions
path: remove join(), add prepend()
path: add trimprefix() and local()
path: refactor iterator, add riter() and remaining()
fs: make realpath() return a resolved path
time::chrono: load_tzif: fix memory leak
hare::lex: add finish()
hare::ast: add imports_finish
rt: move +PLATFORM/abort.ha to +PLATFORM/platform_abort.ha
time: add INSTANT_MIN, INSTANT_MAX
path: add peek_exts()
getopt: add subcommands and error handling
getopt: document implicit -h in help text
io: implement trunc()
time::chrono: lazily load utc leapsecs
bytes,strings: make {cut,rcut} return a tagged union value
mime: fix compilation with new strings::cut
rt: add 'slice cap smaller than initializer' abort message
Only set HAREC_COLOR once in environ
hare::types: rename +ARCH/hash.ha to avoid shadowing conflict
strings: fix docstring format for multireplace
rt, cmd/hare: pass empty namespace for toplevel on libc
ascii: add strlower, strupper, rewrite strcasecmp
io: move fd-related functions into one file
all: rename 'flags' types to 'flag'
getopt: add subcommand context to errors
strio,bufio: merge memstream implementation into memio
strings: rename runes() to torunes()
rt: copy by words in memcpy
rt: copy by words in memmove
rt: copy from musl in memset
bytes: use rt::memset in zero()
os: remove workaround for cwd initialization
add -j2 to .builds for hare
B. Atticus Grobe (1):
cmd/hare: pass -L to add directory to library search path
Blain Smith (2):
rt: sockaddr_ll and ETH_P_* socket protocols in linux
rt: BPF socket structs & option levels for Linux
Bor Grošelj Simić (138):
mk/gen-stdlib.sh: don't generate trailing whitespace
io: separate general purpose testing stream and copy test
io: implement limit stream
bytes/index.ha: fix a substring search bug
bytes/tokenize.ha: use bytes::index
bytes::tokenize: handle the case where delimiter is whole array
bytes::tokenize: add a test for remaining_tokens()
strings::tokenize: add a test for when delimiter is whole string
{bytes,strings}/tokenize.ha: implement peeking
encoding::utf8: implement bacwards decoder
strings/iter.ha: implement reverse iterator with prev()
strings/iter.ha: add strings::iter_reverse()
bytes/index.ha: add rindex
strings/iter.ha: rename iter_reverse to riter
bufio::dynamic: take io::mode argument
tokenizer: return zero tokens on empty slice
fmt: fix memory leak
bufio::dynamic: implement seek()
bufio::dynamic: fix dynamic_write
fs: prohibit calls to fs::mkdir with empty path
crypto::math: fix typo
bufio::fixed: implement closer
bufio::fixed: merge with bufio/dynamic.ha
bufio/memstream.ha: make abort messages more descriptive
fs::rmdirall: mask irrelevant mode flags
fs::mem: new module
fs::mem: remove unused `use fmt;`
bytes::index: implement two-way algorithm
crypto: fix hash test cleanups
bytes/tokenize.ha: uncomment a test
bufio: depend on types
hare::{lex,parse}: add &&=, ||= and ^^= operators
update stdlib with the new &&=, ||= and ^^= operators
haredoc: fix breadcrumbs urls
hare::types: type_finish shouldn't be recursive
ascii: implement isblank()
fnmatch: new module
fs::mem: utilize subtyping
fs::mem: further improvements
os: remove duplicate BUFSIZ declaration
fix static asserts that weren't checked before
remove unused declarations
import io where needed
temporarily make enum char an enum u8
all: resolve name clashes that weren't noticed before
iobus: change init array type to io::file
fmt: print a diagnostic message if there aren't enough parameters
math: nextafterf64, nextafterf32
hare::module: don't attempt to parse non-hare files
math: constants for smallest representable positive offset from 1
math: nearbyintf{32,64}
hare::lex: remove duplicated token
math: floating point exceptions and rounding modes
os::exec: expand waitpid functionality
use strings::{dupall,freeall} on hare::ast::ident
all: remove namespace prefixes from local objects
rt+freebsd: add waitpid option flags
implement os::exec::peek{,any}
hare::parse: don't abort in want(..., ltok::NAME)
strings::dup: don't overallocate and don't read out of bouds
haredoc: error out on invalid trailing chars in parseident
use value of HARE_DEBUG_WORKDIR as plan.workdir when set
hare::{parse,unparse}: update for expanded import syntax
update for stricter [*]array assignability rules
use type assertion with nullable types in some places
all: update for RCONST
fix ascii::isspace docstring
fix try_fromutf8 docstring
add bytes::cut and use it in strings::cut
{strings,bytes}/tokenize.ha: simplify code in @test
{strings,bytes}/tokenize.ha improve docstrings
bufio: remove an obsolete constraint of the api
implement copier for bufio::memstream
ascii::validstr: fix octal literal
regex: use bool instead of two-valued enum for inst_match
base64: don't call a function that has no effect
add bytes::{l,r,}trim
strings::{l,r,}trim: trim whitespace with bytes::
strings/trim.ha: use the unsafe []u8 -> str conversion variant
path: fix dangling pointer to a stack resource
remove path::dup
strio: simplify and unify fixed and dynamic types
merge strio/fixed.ha and strio/dynamic.ha
compare strings byte-by-byte
bufio::buffered: use rbuffer as unread buffer
bufio: improve buffered reader performance
bufio::buffered: merge two identical if branches
mention io::readall in docstring for io::underread
store amount of succesfully read data in io::underread
bytes: update outdated style
modules starting with a-e: docs fixes
readv,writev: don't treat underread/write as error in docs
hash::siphash: new module
encoding::pem: implement writer
regex: simplify charclass name -> func mapping
make hash.reset optional
crypto::blake2b: don't store the key
encoding::pem: fix an issue with short writes
fs: document correct iterator disposal method
remove reference to hare.sh in build manifest
format::elf: fix HIPROC and LOPROC constants
fixup strings::fromutf8 changes that were missed in 045f3096
errors: specify rt dependency
fix sort::icmp
remove leading zeros before prohibiting them
hare::parse: parse type assertions to null
add net::uri as net::dial dependency
s/align/_align/ before introduction of align builtin
move tests depending on +test into +test
remove arithmetic on pointer types
strings: document non-obvious trim testcase
use simpler and faster utf8 decoder
use improved forward decode in backward decode
rewrite encoding::utf8::valid using the new decoder table
strings: simplify iter direction logic
hare::lex: error out on overflowing integer exponents
hare::lex: fix reported syntax error reason
cmd/harec: make stype a rune enum
datetime: parse: fix %z scanning, add test
encoding::base64: reduce encoding info size
encoding::base64: add utility functions for buffer size calculations
fnmatch: simplify and modernize
Revert "time::chrono: fix memory leak in load_tzif()"
.builds/freebsd.yml: install the build driver
builds: make .bin/hare-tests in parallel
crypto::bcrypt: allocate blowfish state on the heap
datetime::new: use slice copy instead of loop
.builds/alpine.yml: run tests with +libc
strings: add slice(), a new way to obtain a substring
all: use strings::slice where appropriate
strio: expand tests
strio: implement concat with join
strio: add rconcat
rt: update abort for non-constant assert changes in harec
unify fixed and non-fixed abort paths
rt: mark platform_abort as @noreturn
sort::cmp: use subtraction for 8 and 16 bit numbers
ascii: fix compare-by-subtraction in strcasecmp
Byron Torres (191):
bufio::buffered: fix docs
net::ip: invalidate leading zeros in IPv4 addrs
fmt: introduce parametric modifiers
getopt: fix mishandled len(help) == 0
cmd/haredoc: -Fhtml: add dark mode css
cmd/haredoc: -Fhtml: fix padding on narrow screens
cmd/haredoc: -Fhtml: add viewport meta
cmd/haredoc: -Fhtml: improve <pre> syntax colors
time: add time::diff
new chrono::isocal:: modules
add moment{} stuct and conversion functions
add calendar fns, expand localdate, sketch tz code
reorganize time, chrono, datetime, isocal modules
implement base timezones
use timescale conversion error types
index eras BCE=0, CE=1
organise date calc, modify types
outline datetime parsing/formatting
add init functions
add calendrical calc fns with some tests
add ymd test, correct spelling
adapt fmttime() code
add exported API lazy eval date functions
correct year(), month(), day(), weekday()
fix now(), rename now() & new()
tidy code and comments, add arithmetic.ha
update for match binding "case let" syntax
rename formatting functions
codify timezone transitions
merge date & time, improve tz
sort out fmt and layout namespaces
have datetime::datetime inherit chrono::moment
use zone in datetime
use locality union
use EPOCH_COMMONERA for epochal()
remove redundant calc_ymd()
reorganise +test code
new parser type
add dummy datetime::diff()
finish hour(), min(), sec(), nsec()
remove todo for timelike calc_ fns
refactor parsing api
new type builder (replaces parser)
update docstrings, comments, READMEs
export timezone pointers
fix commit 000a640: add print_period()
make type locality = *timezone
rename calendrical epochal constants
etch new timezone functions
introduce martian time
update martian comments
rename calendar.ha -> chronology.ha, some comments
add format constants
time::olsen: new module
add name and abbrev fields to timescales
fix format("%N"); add useful layout constants
add datetime::from_moment()
chrono: add moment.zone, new(), from_instant()
new timezone in() functions
expand olsen::tz() with dummy timezones
fix chrono::in()
new datetime::localize() wrapper
rename olsen -> olson
prepare localize() for datetime field getters
new datetime::lookupzone()
rename some martian entities
add chrono::to_instant()
fix localize(); new fixedzone()
update comments for localize(), lookupzone()
simplify time::interval
mv timescales.ha -> timescale.ha; clean gen-stdlib
add time/chrono/leapsec.ha
new time::{error,ambiguous,nonexistent} types
add temporary leap seconds data
s/RFC3999/RFC3339/; remove some inline layouts
new datetime::from_str()
s/abbrev/abbr/
add timezone.posix_extend
lookupzone(); timezone.zone: zone
olson: new TZif parser
implement %Z, %z
improve and fix %z
datetime/README: update
update comments, describe behaviour
further comments and TODOs
s/localize/transform/; prepare new() zone lookup
make new() use given zoffset
use chronological functions in sensible order
brush up comments and code for review
add convenient EMAILZ format
new(): comment and prepose new parameter signature
rm comment on returning timezone pointers
change new() parameter signature
rename base timezones and timescales
fix olson::tz() open file leak
tidy whitespace
add new() TODO #565
rm daylength function TODO
rm {chrono,datetime}::tranform() docstrings
rm chrono::unix: timescale
rm datetime::datetime docstring
rm datetime::print_period()
datetime: s/method/strategy/
s/builder/mock
s/build()/finish()
rename olson:: to tzdb::
use math::absi()
new datetime/parse.ha
new types {chrono,datetime}::invalid
make new() param 'loc' just chrono::locality
WIP leap-seconds.list reader
new datetime::from_instant()
WIP tai/utc leaps handling
new datetime::to_instant()
fix "Fri" formatting
datetime, time, time::chrono: correct docs links
time::chrono: fix SECS_1900_1970 doc
time: fix add()
time: add @test add()
haredoc: fix tty parameter and type colours
haredoc: change tty colours to more accessible set
haredoc: use brighter non-bold tty colours
haredoc: -Fhtml: fix relative submodule lookup
haredoc: -F{hare,tty}: list submodules
datetime: add %L formatter and STAMP_NOZL layout
datetime: document format specifiers
datetime: fix format string constants docs
datetime: fix %w docs
time,time::chrono,datetime: improve docs
time::chrono: fix reading of leap-seconds.lists
time::chrono: improve invalidtzif error string
time::chrono: make parse_tzif() accept tz pointer
time::chrono: compare magic TZif bytes, not string
time::chrono: handle invalid utf8
gen-stdlib: update for time::chrono
strings: add fromrunes()
time::chrono: purge unused code
time::chrono: change new() parameter order
time::chrono,datetime: rename epochal to date
time::chrono: fix LOCAL init, improve docs
time::chrono: make lookup_leaps accept a pointer
time::chrono: fix tt timescale name
time::chrono: fix tt timescale converters
time::chrono: standardise gps timescale code
time::chrono: add GPS and TT timezones
time: add mult()
time::chrono: fix mtc timescale converters
time::chrono: make in() handle multiple timescales
haredoc: fix copyright typo
datetime: add sundayweek, rectify 0783e33 ("%U")
datetime: add calc_janfirstweekday()
datetime: test calc_janfirstweekday()
datetime: use calc_janfirstweekday()
datetime: rm calc_ymd_from_yd(), simplify code
datetime: simplify calc_date_from_ywd()
haredoc: tty: add color.ha, rendering functions
haredoc: tty: fully implement $HAREDOC_COLORS
docs/haredoc.scd: document $HAREDOC_COLORS
haredoc: use bold comments colorscheme
time::chrono: handle errors, utc leapsecs init
regex: improve error strings terseness
regex: introduce result type; fix and improve docs
Revert "time::chrono: incorporate zone offset in in() and to_instant()"
Revert "datetime: populate time in finish(*builder)"
time::chrono: fix conv_mtc_tai()
time::chrono: use temporary offset
time::chrono: give names to all timezones
time::chrono,datetime: rename min, sec, nsec
time::chrono,datetime: embed instant into moment
time,time::chrono,datetime: overhaul
time::chrono: rm use math; simplify def
move datetime -> time::date
time: rename datetime module in READMEs, docs
time::date: rename datetime type to date
time: improve function parameter names
time::chrono: use daydate, daytime; improve docs
time::date: rename source files appropriately
time::date: new: use virtual interface
time::date: simplify observers
time::date: parse: fix scanners
time::date: add %e; update POSIX layout
time::chrono: fix $TZ causing TZ_LOCAL double-free
time::date: avoid tz() in tests, TZDB dependency
time::date: new(): drop void zoff feature
time::chrono: complete utc timescale conversion
time::chrono: test utc/tai timescale conversion
time::date: fix calendar before 4715 BCE
strings: readd pad functions
strings: improve docs and params for pad functions
strings: rename pad functions per convention
time::chrono: leap-seconds.list whitespace parsing
Callum Brown (2):
haredoc: remove -Fgemtext from man page
fmt: fix typos in README
Carlos Une (7):
Minor fix due to breaking change to strings::fromutf8
Implement complex trig functions tan,atan,tanh,atanh
Add tests for complex trig functions tan,atan,tanh,atanh
special case libc implementation-dependent test
math: fix order of operation
math::complex::tan: test huge arguments
strconv::stof32 fix doc
Christopher M. Riedl (9):
errors: use correct indefinite article
xml: Fix module name in README
io: Fix minor grammar mistake in docs
gen-stdlib: add strcmp.ha
gen-stdlib: restore replace.ha and pad.ha
strings::replace: fix algorithm
strings::replace: fix incorrect test
rt: add O_ACCMODE file access modes mask
rt/+linux: add mount and umount2 syscalls
Christy X. Winslett (1):
types::RUNE_MIN: correct documentation comment
Conrad Hoffmann (21):
os: run finalization functions on exit()
net::dns: add support for CNAME records
net::dns: handle NS, SOA, and SRV records
net::dns: add support for CAA records
net::dns: add support for PTR records
net::dns: add support for SSHFP records
net::dns: fix opcode bitmask
os::exec: only open() regular files
net::dns: retry over TCP on truncated response
net::dns: add constants for DNS dynamic updates
net::dns: implement encoding of TXT records
net::dns: add TSIG records and decoding
net::dns: write label terminator in encode_labels
net::dns: enforce actual label size restriction
rt: fix off-by-one haredocs for AF_* and IPPROTO_*
net::dns: support for OPT records (EDNS, RFC 6891)
net::dns: support for basic DNSSEC RR types
rt: add IPPROTO_ICMPV6
net::dns: fix off-by-one in encode_raw
net::dns: remove obsolete reference in docs
Move string comparison logic to sort::cmp::strs()
David Rubin (1):
correct inotify_event to use [*]u8
Dmitry Matveyev (3):
unix::hosts: refactor into more general interface
bufio: elaborate on docs for scantok and scanline
test: disable color if NO_COLOR or not a tty
Dominik Hagowski (1):
Fix duplicate task when building object files
Drew DeVault (1480):
Initial commit
rt: main returns void
types: initial commit
Add io/println (temp)
Initial commit
Add .build.yml
rt: import allocator from harec
rt: don't export memcpy
stdlib.mk: update rt
rt: drop must_malloc references
strconv: new module
stdlib.mk: add new modules
rt::malloc: use array expansion
stdlib/types: add arch.ha
Update license: LGPL => MPL 2.0
types: fix slice layout
strings: new module
os: implement os::args
stdlib: rig up os, strings
os: use static argument array if possible
os: only free args in @fini if allocated by @init
strings: improve cstrings documentation
abort_fixed: update OOM language
Add README.md
strconv: remove refs to buffer versions from docs
bytes: add equal, index
strings: add UTF-8 helper functions
os: add getenv, must_getenv
os::getenv: remove `return void`
os: getenv improvements
stdlib: update bytes, strings, os
io: add initial stream abstraction
Expand stdlib coverage
rt: add errno wrapping helpers
io: improve docs for stream
os: add fdstream, stdfd
os::fdstream: add static_fdopen (private)
os: add streamfd function
bytes::copy: new function
strings::dup: new function
Update existing code to use named struct initializers
stdlib.mk: new files
main.ha: simplify following grammar changes
stdlib: incorporate os::open
io: add errorln
io: add io::mode
os: add os::open
os::open: add docs
strings::c_strlen: fix docs
os::fdstream: style
main.ha: improve error handling
rt, os: rig up errno descriptions
main.ha: improve error handling
main.ha: style
fmt: new module (WIP)
rt: export memcpy
io: add io::copy
main.ha: finish 'cat' example implementation
io::copy: style
io::copy: assert an assumption about write
io: distinguish between closed and EOF conditions
Remove hacks with slice casts
encoding::utf8: new module
encoding::utf8::decode: polymorphize
encoding::utf8: various improvements
Rig up encoding::utf8
strings: add strings::iter
main.ha: use strings::iter
strings::iter: remove unnecessary doc comments
fmt: initial workitude
fmt: style
ascii: new module
stdlib: add ascii; fmt depends on strconv
all: simplify match statements
encoding::utf8: new function: valid
strings: validate UTF-8 string invariants
encoding::utf8: add docs for valid
encoding::utf8::valid: improve docs
os::fdstream: simplify switch usage
io, os: implement streams with first-class copy
io::copy: use io::unsupported to force fallback
strconv, fmt: expand numeric support
fmt: add printf, errorf
rt: add memset
Use static fd_streams for stdin et al
fdstream: free name on close
fdstream: add copier to static
fdstream: autofill future io::stream fields
stdlib: add rt::memset
main.ha: demo use of fmt
os: pass io::mode along to fdstream
os::fd_copy: refactor out the offset parameter
os::fdstream: dup name str during initialization
Update .build.yml
Add README.md
os::open: remove TODO
os::fdopen: remove comment about the stream name
strings: add iterstr function
strings: add test for iter
rt::strcmp: import from harec
stdlib: add rt::strcmp
rt: add hare.sc
strings::iter: fix broken test
rt: split start_linux and start_ha
stdlib: rt updates, linker script
Write script to generate stdlib.mk
Manage hare dependencies via gen-stdlib
Rig up stdlib tests in `make check`
rt: add basic test runner
.build.yml: build & run tests
strconv: add tests
Add .build.yml
Improve test names
bytes::equal: add test
rt +test: make test results line up
Update stdlib
bytes: add more test coverage
rt +test: add more logging
gen-stdlib: expand rt+test
rt +test: exit nonzero on test failure
Update stdlib
rt: add setjmp/longjmp, update test runner
Update README.md
Update stdlib
io::copy: add test
rt::start+test: style
os::fdstream: 80 column limit
fmt: style
ascii: rework API to use runes
ascii: add tests
fmt: implement numbered arguments
fmt: accept runes in formattable
encoding: add tests
fmt: accept nullable *void
fmt: close memory leak, fix style
rt: update alloc following if changes
Flesh out README.md
fmt: flesh out a bit more
strings: add push function
fmt: expand format string parser
bytes, strings: add tokenize, split
Update stdlib
itos, utos: fix tests
fmt: add fprintln and friends
main.ha: use fmt::fatal
all: (mostly) port to aarch64
all: port to aarch64
stdlib: temporarily disable io test
rt: add stat wrapper
stdlib: update rt
rt: convert syscall returns into useful hare values
rt: drop arch-specific stat buffer
gen-stdlib: remove rt::arch
stdlib: io updates
strings: add has_prefix, has_suffix
stdlib: update strings
bytes, strings: add contains
Update stdlib
stdlib: update strings
strings::concat
stdlib: io depends on strings
strings::concat: reduce hack factor
strings::concat: use from_utf8_unsafe
Update README.md
stdlib: add os::exec
os::exec: new module
os::exec::start: call finish on started command
stdlib: disable io tests on aarch64 (again)
rt: use clone instead of fork
strings: style
os::exec: remove unused fmt dependency
Fix up dependency graph errors
Minor style and doc fixes
Update stdlib
os::exec: expand start error handling
os::exec: improve docs
os::exec: set CLOEXEC on the pipe flags
os::exec: add fork()
os::exec: check for X_OK when testing executable
rt: add fcntl wrapper
all: style fixes
io: add io::getrune
io::copy: handle short writes
rt: update hare.sc for gc sections
Add --gc-sections to LD
os: add must_fdstream
stdlib: add crypto::random
crypto::random: new module
crypto::random: remove extraneous EAGAIN case
Drop must_ versions of functions
update stdlib
types: slice and string data is nullable
all: return without explicit void where appropriate
strconv: expand non-decimal base support
strconv: add lowercase hex support
fmt: print pointers in hex
strconv: implement signed base conversion
strconv: style
types: fix cast to uintptr
all: improve slice allocation usage
rt::realloc: free on zero size
strings: add utf8 test
types: add RUNE_MIN and RUNE_MAX
Update stdlib
hare::lex: initial riggings
stdlib: fix up dependencies
hare::lex: drop fmt dependency
hare::lex: add unlex test
hare::lex: replace linecol tuple with struct
io: add io::empty
Update stdlib
hare::lex: lex1
update stdlib
hare::lex: add ATTR_OFFSET
main.ha: remove unused imports
hare::lex: lex2
Update stdlib
hare::lex+test: style
README.md: start conventions list
rt+test: print failed tests summary
hare::lex: lex3
rt+test: add ellapsed time to test results
rt+test: overshot on the nanosecond conversion
Update stdlib
io, strings: style
all: style improvements
format::elf: initial riggings for new module
stdlib: add format::elf
stdlib: add sort
sort: new module
stdlib: add ascii::strcmp
ascii: add strcmp
sort: style
hare::lex: finish lex_name
ascii::ctype: rename test
hare::lex: lex keywords
hare::lex: add lexname test
hare::lex2: add missing div/diveq tokens
hare::lex: implement comments
update stdlib
hare::lex: lex rune literals
hare::lex: expand keyword tests
hare::lex: implement string literals
stdlib: add hare::ast, hare::parse
bytes: add types dependency
hare::ast, hare::parse: new modules
hare::*: s/identifier/ident/g
Update stdlib
hare::parse: simplify parse::ident
hare::parse: parse import list
hare::parse: retype ident as []str
update stdlib
slice::reverse: xor swap not actually useful here
hare::ast: add import_free
all: update allocations
Update stdlib
Update stdlib
fmt: add asprintf
bufio::dynamic: docs
bufio: add bufio::finish
os: take advantage of shadowing
all: use error propagation where appropriate
hare::parse: simplify namespace usage
hare::parse: use error propagation
hare::parse::error: is an error type
hare::parse: import btoken directly
rt: add (f)chdir
os: refine the open & create APIs
main.ha: accept a file name as input
main.ha: use type inference for in
rt: add note about (f)access(at)
os::exec: use O_PATH for exec fd
Update stdlib: add fs
fs: new module
stdlib: fs depends on strings
fs: add iterator details
fs: rename mode::OWNER_* to USER_*
fs: correct mode::*_RW, add *_RX
fs: add mode_perm, mode_type
fs: clarify that programmer should not call next again
fs::fs: update docs
fs::filestat: use path type
bufio: flesh out bufio::fixed
strio: new module
Update stdlib (bufio, strio)
Flesh out bufio, strio some more
fs: implement mode_str
fs::mode_str: fill out more file types
fs::fs: iter may only return the file type bits
fs: add dirent, fix iter & readdir
fs: add strio dependency
main.ha: simplify error format
hare::lex::errstr: update syntax format
main.ha: scan imports
main.ha: free imports
os: initial pass on dirfd filesystem
update stdlib
os::dirfdfs: document resolve
os::dirfdopen: accept resolve flags
stdlib: update fs dependencies
fs::mode_str: rewrite without fmt
os::resolve: rename NONE to NORMAL
os::dirfdfs: add subdir
os: implement fs::iter
update stdlib
os: add filesystem convenience functions
os: add os::chdir, os::chroot
os::dirfdfs: remove unused import
os::dirfdfs: implement stat
strio: add strio::dynamic
stdlib: update strio
strio: add strio::concat
stdlib: update strio
strio: add truncate, reset
strio: add strio::join
strio: add strio::rjoin
hare::{ast, parse}: add IDENT_MAX
io::println, errorln: accept multiple arguments
bufio: abort on invalid buffer/reset/truncate calls
rt+test: select tests from command line
stdlib: update rt
Update stdlib
path: new module
hare::ast: reverse order of ast::ident
strings::push: clarify behavior
bufio: add bufio::dynamic_from
fmt: implement some basic width settings
endian: new module (WIP)
crypto::math: new module (WIP)
hash: new module
crypto::sha256: new module
stdlib: new modules
hare::module: new module (WIP)
fs: add fs::wrongtype error
hare::module: implement scan, somewhat
main.ha: rewrite to scan modules
encoding::hex: new module
stdlib: add encoding::hex
hare::module: compute hashes on scan
update stdlib
hare::module: store hashes unencoded
stdlib: update
main.ha: minor tweaks
io: add io::tee
hare::module: scan imports
update stdlib
hare::module: close files
endian: add little endian, host endian
stdlib: update endian
stdlib: add hash::fnv
hash::fnv: new module
path: add basename, dirname
stdlib: update path
path: fix non-rooted cases in names
strings: drop @init function for c_empty
rt: add path semantics and nul terminator handling
fs, os: add mkdir, mkdirs
hash::fnv: drop debug use fmt
os::exec: record process information
Initial riggings for build driver
bytes: simplify rindex
fs, os::dirfdfs: add exists error type
rt+linux: fix envp initialization
path: fix uninitialized memory errors
dirs: new module
hare::modules: initialize HARECACHE, HAREPATH
stdlib: add dirs module
strings: add strings::to_c
os::exec: use strings::to_c for argv, envp
path::join: handle empty string
bufio::buffered: initial API design
hare::ast: add unparse
hare::context: fix slice-OOB in HAREPATH loader
hare::module: implement lookup
os::exec: pull environment from parent proc
Resolve dependencies for build
Print hostname during build
os: add uname functions
Add +$(ARCH) build tag to context
os::exec: add setenv
Pass HARECACHE environment to tasks
execute: make more apparent that check is returned
Refactor schedule planning code
Use HAREC from environment if applicable
os: add tryenv function
strings: add try_from_utf8
path: add path::extension
path: remove is_root
fmt: add tests, fix some bugs
hare::module: identify input file type
strio: add append_rune
hare::module: parse tags for file eligibility
Update stdlib module dependencies
hare::module: move parse_tags out of types.ha
hare::module: import tags_compat & update eligible
hare::module: implement recursive dir scanning
rt/hare.sc: add ENTRY
Don't explicitly link to start.o
Update stdlib
path: add iter, fix misc. bugs
fs: add resolve
scan: resolve paths
rt: fix docs for getcwd
path::iter: remove debugging import
dirs: fix docs for data()
fs, os: unify open & create semantics
fs: use fs::mode for create
fs: add remove, rmdir, rmdirall
os: dirfdfs: implement remove, rmdir
os: add rmdir, rmdirall shortcuts
fs: implement rmdirall
Update stdlib, provision workdir
temp: new module
Update temp dependencies
rt::ensure: fix off-by-one
rt: add second parameter for getcwd
rt: add fallbacks for newer syscalls
path: add dup
temp: reduce length of +linux dirs
hare::module: store module path in version struct
Update stdlib and schedule more tasks
all: use str for path components
strings: add strings::index
Update stdlib
hare::module::eligible: rewrite to use strings
Choose next eligible task to build
Free more state on exit
hare::module: add context_free
Schedule hare object separately from executable
hare::module: fix invalid frees
execute: don't error propegate exec::check
Incorporate modules into the build
Update stdlib
Add getopts
getopt: rename to parse, wrap usage
os: add os::resolve
Add basic (and wrong) command line parsing
Fix output name selection
hare::module: fix basedir for file input
getopt: print summary before usage
getopt: suppress extra newline for flagless cmd
Expand option parsing and add subcmds.ha
main.ha: remove extraneous dependencies
build: correct typo
os::exec: mark exec as @noreturn
Generalize dependency planning
Plan transitive dependencies
Pass full version info to module scheduler
subcmds: flesh out arguments for each
getopt: use empty string instead of tagged union
subcmds: update getopt usage
Fix stdlib paths following harec changes
plan: write modules to hare cache
build: add TODO regarding default output name
hare run: basic implementation
os::exec: add setname
hare run: simplify argument usage
hare build: simplify usage
build, run: add (non-functional) -j option
plan: move file names closer to their usage
subcmds: deduplicate tag initialization
deps: new subcommand (placeholder)
os::exec: remove (empty) process.ha
build: link with all implicated modules
test (will) accept -j
test: tweak command line usage
build, run: always link to rt
Rehome build driver in cmd/hare/
Merge remote-tracking branch 'stdlib/master'
Update build system for post-stdlib merge
Update README.md
hare.sh: new script
hare: split schedule.ha from plan.ha
hare.sh: simplify script
stdlib: add rt sockets
hare {build,run}: improve module not found error
Move binaries into .bin
driver: add skeleton for cache manifest updates
driver: riggings for cache subcommand
fs: add busy error; expand dirfd support
time: new module
hare::module: initial manifest riggings
os: fix RDONLY/WRONLY open flags
hare::module: write manifests to the cache
Move cache to .cache
time: add time::time, time::now
fs: add times to stat
time: add time::compare
hare::module: write mtime to manifest
hare::module: assert that stat has what we need
bufio: implement buffered read
io: add stream unwrapping
os: use bufio::buffered for stdin
gen-stdlib: os depends on bufio
Makefile: clean should remove .cache
.build.yml: hare-tests has been moved
rt+linux: use mkdirat for mkdir syscall
rt: add ppoll, shim poll over it
gen-stdlib: enable io tests on ARM
bufio: fix partial consumption read buffer
bufio: add is_buffered, has_buffered
bufio: implement write
os: buffer stdout
os::exec: disambiguate files
io: add docs to println, errorln
hare::module: refactor scan
hare::module: fill in input basename
docs: initial draft of hare.scd
hare(1): finish man page
hare(1): add *FLAGS variables
hare(1): formatting fixes
cmd: commands are licensed with the GPL
cmd/hare: fix some minor flags issues
cmd/hare: implement hare version
config.example.mk: add more options
make: pass -D to test build
cmd/hare: use const where possible
Fix O_DIRECTORY on +aarch64
rt: fix O_DIRECTORY definition on x86_64
cmd/hare: implement -D option
hare(1): mention that test adds +test and +debug
Move utility scripts into scripts/
cmd/hare: source platform from build
hare(1): expand docs for build tags
unicode: initial module riggings
endian: add hton, ntoh
strings::tokenize: fix docs
hare::lex: fix typo
rt: add ioctl
hare::parse: improve error messages
encoding::hex: add decode
hare::module: implement cache manifest loading
cmd/hare: skip dependencies which are current (WIP)
cmd/hare: add TODO regarding manifests
crypto::sha*: add docs
crypto::random: hide internal stream state
all: update names to be consistent with style guide
s/to_utf8/toutf8/g
time: rename time::time to time::instant
encoding::hex: support encoding to stream
endian: expand big endian support
uuid: new module
endian: complete earlier API expansions
endian: fix typo
strings: add warning about runewise operations
strings::iter: add Unicode warning
cmd/harec: format errors with context
cmd/hare: fix lingering promotion issue
hare::parse: flesh out expressions a bit
hare::parse: fixes for expression-list
cmd/harec: implement option parsing
cmd/harec: clarify command usage
cmd/harec: print usage and exit if no inputs
make: enumerate harec sources as dependencies
sha512: export SIZE constants
uuid: use uuid type for id binding
rt: restructure +test per module conventions
hare test: stub out functionality
net::ip::string: increase buffer size
stdlib.mk: net::ip depends on fmt
cmd/hare: implement hare version -v
net: move platform-specific code to +linux
net: generalize listener interface
net: sketch out datagram socket interface
sort::sort: basic implementation
hare::module: sort module inputs
slice: add []void functions
slice: add docs
Remove str => *const char cast and nul terminator
strconv: cleanup nul terminator bits
cmd/hare: only apply -D to the root namespace
hare::module: prune down less-specific candidates
cmd/hare: finishing touches on hare test
hare::module: clean up candidate selection
strconv::ftos: enable more tests following harec fix
hare::module: flesh out ambiguous inputs algorithm
cmd/hare: remove TODOs regarding rt omission
hare::module: test if module cache is current
hare(1): improve module resolution docs
Clarify licensing in README.md
hare::parse: implement binary arithmetic exprs
hare::parse: move expression_list
all: generalize error handling
unix: add setuid, euid, gid, egid
unix: add getuid, gid, euid, egid
unix: add nice
bufio: add unread functions
encoding::xml: initial skeleton
hare::parse: implement cast-expression
hare::parse: fix nested cast expressions
hare::parse: (mostly) implement unary arithmetic
hare::ast: move TODO comment out of doc text
hare::parse: move expr classes into exprclass.ha
hare::parse: introduce mustlex utility
stdlib.mk: add more errors dependencies
format::elf: add elf_machine enum
format::elf: add HOST_MACHINE, HOST_ABI
format::elf: s/HOST_*/TARGET_*/
format::elf: tweak doc comment placement
io::println: don't write to stderr
strio: rename append_rune to appendrune
encoding::xml: parse element start
encoding::xml: simplify scan_element
hare::parse: skeleton for postfix-expression
hare::parse: implement plain-expression
format::elf: add +aarch64 target
hare::parse: remove expression classes
README.md: correct typo
bufio::fixed: add closer
encoding::xml: parse attributes
encoding::xml: scan content
encoding::xml: add module docs
ascii: add strcasecmp
encoding::xml: add tests
encoding::xml: rename to format::xml
bufio::unreadrune: support several unreads
format::xml: implement XML comments
format::xml: add test for comments
format::xml: leave comments at deliberate omissions
format::xml: implement XML entities
format::xml: reuse strio buffers
os: add BUFSIZ; use for stdin, stdout, format::xml
format::xml: implement CDATA
format::xml: add cdata test
io: implement unwrap for tee, limit
os: set BUFSIZ back to 4096
gen-stdlib: format::xml depends on os
format::xml: remove test logging
rt::segmalloc: minor style nit
dirs: assume $HOME is always set
bufio, fdstream, dirfdfs: reorder declarations
format::xml::parser.ha: simplify comments
format::xml: validate closing tags
os::streamfd: add unwrap parameter
format::elf: improve auxv type
format::xml: document lack of namespace handling
all: fix append syntax
hare::parse: s/want_tok/want/g et al
hare::lex: add flag for lexing comments
hare::lex: change approach to comments
hare::lex: remove ltok::COMMENT
hare::parse: move tests into subdir
hare::parse: implement struct and union types
hare::parse: types.ha => parse.ha
hare::parse: merge util.ha => parse.ha
hare::parse: implement slice & array types
hare::parse: implement enum types
hare::parse: parse constant expressions
hare::unparse: fix str, rune constants
hare::parse: make constant more concise
hare::parse: use const where appropriate
hare::parse: make precedence more concise
hare::parse: remove exprclass.ha
hare::parse: move builtin into separate function
hare::parse: implement call expressions
hare::parse+test: make expr.ha consistent
hare::parse: implement struct field access
hare::parse: implement tuple access
hare::parse: implement error propagation
hare::parse: remove workaround for #377
hare::parse: implement indexing expressions
hare::parse: add TODO regarding slicing expressions
hare::parse: implement slicing expressions
hare::parse: implement object selectors
hare::parse: style
hare::parse: implement (or finish) expression-list
hare::parse::expression: don't unwrap errors twice
hare::parse: add defer placeholder to builtin
hare::parse: use const where appropriate
hare::parse: improve call parsing
hare::parse: remove control from expression-list
hare::lex: implement labels
hare::lex: use strio::dynamic where appropriate
hare::parse: implement control expressions
hare::parse: implement if expressions
hare::parse: implement array literals
hare::parse: implement tuple expressions
hare: add doc.ha
hare::parse: binarithm: simplify loops
hare::parse: implement bindings
hare::unparse: remove workaround for #380
hare::unparse: remove obsolete TODO
hare::parse: implement for loops
hare::lex: implement => (case)
hare::parse: implement switch expressions
hare::unparse: flesh out documentation
hare::parse: implement defer expressions
hare::parse: implement assignment
hare::parse: implement allocation expressions
hare::parse: implement append expressions
hare::parse: implement delete expressions
hare::parse: implement free expressions
hare::parse: don't unnecessarily unwrap errors
hare::parse: store docs on ast::decl
cmd/haredoc: initial commit
ascii: update docs to follow style conventions
make: add haredoc to build
hare::parse: implement struct literals
format::html: new module
all: move docs.ha => README
os: remove open.ha
haredoc: flesh out command structure
haredoc: basic HTML formatter
haredoc: mock up breadcrumbs in HTML output
haredoc: expand size of declaration text
haredoc: mock up tags & source code URL
haredoc: add permalink to each heading
haredoc: implement module resolution
haredoc: move toc into <pre>
haredoc: remove type emitting hack
all: move module docs into README files
all: docs: change [ref] to [[ref]]
hare::lex: fix i, u literal suffixes
haredoc: provide file path to lexer
hare::parse: fix delete_expr on object selector
strio: improve docs
haredoc: fix overzealous sed errors
haredoc: remove obsolete TODO
haredoc: fill out <title> with module ident
haredoc: add decl type to headings
haredoc: add max-width on <pre>
hare::parse: use cast for indirect target
rt: don't use out of range u64 literal
haredoc: don't use assembly sources
hare::parse: fix indirect assignment to non-objsel
hare::parse: implement global prototypes
rt: add README
hare::unparse: fix test issues
hare::lex: merge repeated strings into one token
getopt::README: fix reference
io: add io::drain
getopt: improve docs
haredoc: handle haredoc markup
haredoc: mark all references as "invalid" (for now)
hare:: improve docs
unix: don't use negative unsigned constants
haredoc: initial pass on references
haredoc: resolve all references
haredoc: change path to stdlib refs
haredoc: improve generated <title> markup
fmt: move module docs into README
fmt: fix example string
haredoc: generate breadcrumbs
haredoc: sort errors out separately
haredoc: enumerate submodules
haredoc: handle empty directories better
haredoc: sort errors
Add haredoc(1) man page
haredoc: highlight the linked-to symbol
getopt: fix error in docs
bufio: clarify purpose of bufstream type
haredoc: visually distinguish undocumented members
os, os::exec: add READMEs
os: remove os::root
hare::README: fix references
haredoc: hide undocumented members by default
hare::module: add README
haredoc: support empty ident (to index stdlib)
scripts/gen-docs: new script
Rig up docs to build
haredoc: fix <title> for stdlib index
haredoc: fix header for stdlib index
haredoc: improve nav layout
haredoc: skip cmd dir, rig up meta-modules
haredoc: use absolute paths to submodules
gen-docs: fix module name regex
ascii: doc improvements
bufio: docs improvements
bytes: docs improvements
crypto: docs improvements
encoding: doc improvements
hash: minor doc fix
hare::ast: doc improvements
gen-docs: add rt to the explicit list
path: improve docs
format::xml: improve documentation
Add Developer Certificate of Origin requirement
hare::parse: separate constants and globals
hare::lex: improve docs
haredoc: exclude more non-module dirs
all: fix error handling oversights
rt: don't assert in rt::abort
rt::abort: hang if kill fails
fs: add README
fmt: add hard stops to docs
rt: add memmove
hare::parse: use insert
bufio: utilize insert where appropriate
stdlib.mk: fix various missing deps
hare::types: initial pass for new module
hare::types: add note regarding ABI compat
hare::types: add more hash samples, fix aliases
hare::types: flesh out API design for type store
gen-docs: don't re-download mascot.jpg
hare::types: add README
haredoc: fix indentation of nested structs
hare::types: typestore is a private member
hare::types: implement pointer types
hare::types: add pointer test case
hare::types: store type size & align
hare::types: refactor type hashmap
hare::types: document store_free
hare::types: refine resolver interface
gen-stdlib: hare::types+test depends on hare::parse
time+linux: minor improvements
hare::types: flesh out more type structures
hare::types: add more hash tests
hare::types: remove extra match branch
hare::types: initial support for structs
hare::types: fix struct size
hare::types: basic union implementation
hare::types +test: test field alignment
hare::types: sort struct fields
hare::types: fix struct alignment
hare::types: remove unnecessary branch
hare::types: test embedded structs & unions
hare::types: fix embedded union offset computation
hare::types: document typestore design better
hare::types: use const where appropriate
hare::types: test explicit offsets
hare::types: remove c_compat
hare::types: remove obsolete TODOs
hare::types: implement tuples
hare::types: style nit
hare::types: tagged union data structures & hash
hare::types: implement tagged types in type_finish
hare::types: implement lookup for list types
hare::types: simplify resolver error handling
uuid: implement decode, decodestr
uuid: improve docs
uuid: minor style nit
uuid: merge separate +test.ha file
hare::lex: floating point constants
strconv: partially implement floatingtosb
haredoc: ! is a prefix now
os: add mkfifo, mkblk, and mkchr functions
errors: fix errors::errno strerror
io::limit: clarify close behavior
linux::uring: initial commit
rt: add io_uring syscalls
linux::uring: implement setup
linux::uring: flesh out queue somewhat
linux::uring: implement basic submitter
linux::uring: add uring::finish
linux::io_uring: re-home from linux::uring
io_uring::get_cqe: return null if unavailable
linux::io_uring: add readv/writev
gen-docs: fix namespace issues
linux::io_uring: implement io_uring_register
linux::io_uring: add fixed read/write
linux::io_uring: rewrite non-complaint code
linux::io_uring: clarify usage of registered buffers
linux::io_uring: add fsync
linux::io_uring: add polling SQEs
linux::io_uring: add CQE-related functions
linux::io_uring: add must_get_sqe
linux::io_uring: fix needs_enter
linux::io_uring: add MAX_ENTRIES constant
linux::io_uring: add result and get_user CQE funcs
linux::io_uring: send/recv/sendmsg/recvmsg
linux::io_uring: timeout operations
linux::io_uring: add accept
linux::io_uring: add close
linux::io_uring: sqe_flags => flags
linux::io_uring: add offs to read/write
linux::io_uring: add link_timeout
linux::io_uring: add openat
linux::io_uring: add error flag to errors
linux::signalfd: new module
bufio::flush: don't flush without any pending data
net+linux: fix setsockopt return value
time: implement time::add
rt::abort: add new abort reason
net: reorganize modules
net::unix: make to_native private
net::udp: new module
hare::udp: s/bind_option/listen_option/g
net::dns: initial riggings
net::dns: draft remainder of decoder API
net::dns: Add README
net::dns: correct documentation error
net: add README
net: add tcp::accept, unix::accept, etc
net::dns::decode_header: use header, not message
net: doc tweaks
net::dns: flesh out message decoder
net::dns: add decode_a, decode_aaaa
net::dns: validate names are ASCII
net::dns: add porcelain decoder API
net::dns: add porcelain "query" function
net::dns: update README
unix::resolvconf: new module
net::dns: use system nameservers in query
unix::resolvconf: cache return value
bufio::scantok: accept multiple tokens
unix::resolvconf: skip comments
unix::hosts: new module
strings: add strings::join
net::dns: minor fixes
unix::resolvconf, unix::hosts: handle empty lines
all: expand generic error handling
net::udp: add stream function
net::udp: add socket_for
net::dial: new module (skeleton only)
net::dial: update docs per generalized design
net::dial: moar docs
net::dial: add resolve stub
net::dial: declare net::dns dependency
net::dial: fix typo in docs
hash::crc*: style fixes
net::dial: flesh out dial (but not dial_tcp et al)
net::dns: split encode/decode into separate files
net::dns: refactor encode
net::dns: dedupe name encoding
net::dns: remove obsolete comment
net::dns: add note about error handling
fs: add fs::rename, fs::move
fs::move: implement copy+delete fallback
fs::move: assert that target is a regular file
fs::move: use is_file instead of bitbanging mode
net::dns: add decode_mx
net::dns: handle server errors in query
net::dns: refactor decoding for improved rdata
net::dns: add parse_domain, unparse_domain
net::dns: simplify decoder type, make private
net::dns: fix decoding error w/multiple rrecords
net::dns: decode_op/encode_op style fix
net::dns: simplify decode_rrecord
hare::dns::decode: minor optimization
net::dns: send requests to all nameservers at once
net::dns: fix AAAA decoding error
unix::hosts, resolvconf: fix minor issues
net::dial: initial version of dial::resolve
net::dial: initial implementation for TCP
net::dial: declare additional dependencies
net::dial::resolve: correct off-by-one error
net::dns: fix IPv6 nameservers; add timeout
net::unix: add dial implementation
net::dial: rig up udp dialer
net::dial::resolve: special-case "unknown"
net::dial::resolve: fix IP parsing
bufio: rewrite README
bufio: further docs improvements
net::unix: declare net::dial dependency
temp: implement temp::named
temp: improve docs
hare::module: use lock-free atomic manifest writes
cmd/hare: bubble build errors up to subcmd
cmd/hare: remove hare version -v
cmd/hare: use const where possible
hare::module: declare dependency on temp
temp: declare dependency on fmt
time: document clock type
fs::fs: improve docs
net::dns: implement TXT rdata decoder
bufio::buffered: don't free static streams
rt: add basic +debug allocator
cmd/hare: add HARE_DEBUG_WORKDIR variable
cmd/hare: simplify main.ha
cmd/hare: rework 'hare version' command
cmd/hare: print path details to stderr
unix: declare fs dependency
COPYING: Remove incompatibility notice
unix::poll: new module
net::dns: declare unix::poll dependency
unix::poll: fix documentation reference
gen-stdlib: fix up missing types dependencies
encoding::base64: improve docs, trim down module
all: fix bindings of zero size in match
cmd/hare: touch up usage strings
os::getenv: fix unbounded slice expression
bufio: remove weird line from @test buffered_read
rt: add support for unreachable abort
linux::vdso: fix non-exhaustive switch
all: roll back some gen vN workarounds
os::dirfdfs: allow tuning getdents buffer size
hare::types: add trailing padding to types
Makefile: set harec and haredoc as PHONY
hare::unit: new module
hare::unit: fill in more bones
hare::unit: partially implement constant exprs
hare::unit: expand constants
hare::unit: implement literals
cmd/harec: add bare-bones gen skeleton
cmd/harec: add some meat to these bones
hare/README: expand module list
cmd/harec: improve rtype logic
hare::types: s/alias._type/alias.secondary/g
all: s/_type._type/_type.repr/g
format::html: remove module
all: fix tests
hare::types: add singletons for builtins
cmd/harec: basic gen_expr_const implementation
all: move labels to compound exprs
cmd/hare: add environment to -v
all: yield WIP
haredoc: fix enum unparse in -Ftty
cmd/harec: basic qtypes
hare::*: simplify values
cmd/harec: implement emit with args
cmd/harec: add label to qval
hare::unit: partially implement compound exprs
cmd/harec: partially implement compound exprs
hare::unit: implement return expressions
cmd/harec: bindings, part one
cmd/harec: basic gen_store
cmd/harec: implement object access expressions
hare::unit: add test for access exprs
hare::unit: more docs
hare::types: handle aliases for is_*
hare::unit: moar docs
cmd/haretype: new command
cmd/haretype: handle null & undefined sizes
hash::hash: refactor with subtyping
hash::*: use caller allocation throughout
crypto::*: use subtypes for hashes
hash::*: remove closers
io: stack-allocated limitreader/limitwriter
io::tee: use stack allocation
haredoc: show non-terminating newlines in comments
fs: minor doc improvement
os: embed io::stream in fdstream
os: use stack allocation on fdopen
io: add io::file
io::file: expand interface with fdalloc
fs: add open_file and create_file
Remove os::streamfd, update net::*, unix::*
io: introduce io::unwrapfd
all: return io::file from os::open
all: expand RISC-V support
all: overhaul switch/match syntax
riscv64: fix match syntax
all: updates for reflection support
hare::*: implement type builtin
all: updates following reflection standardization
all: update type IDs
haredoc: fix issues with new tokens
hare::module: add ABI_VERSION to hash
types: add README
types: fix slice repr
fs: style fix
rt: simplify mmap fix-up branch
all: introduce io::handle and refactor usage
fnmatch: fix up docs
fnmatch: remove export on internal function
iobus: initial commit
iobus: add CQE callbacks
iobus: implement accept
iobus: fix bug with {un,}register_file
iobus: fix typo
iobus: docs improvements
iobus: expand README
hare::module: resolve symlinks
iobus: fix net:: import
gen-docs: add iobus explicitly
iobus: join lines in README
iobus: implement chain and serialize functions
iobus: typo fix in [[done]] docs
iobus: remove obsolete comment
iobus: add setuser/getuser
iobus: add busfile
linux::io_uring: implement provide_buffers support
linux::io_uring: add README
iobus::io_uring: remove io_uring mentions from docs
unix::poll: fix INDEF usage
iobus::io_uring: reduce default SQE queue size
cmd/iobus: initial commit
iobus: implement poll
iobus: rig up eventfd support
cmd/iobus: flesh out dual bus management
iobus: fill out ... files_update struct
iobus: simplify busfile
iobus: buffer pool management
iobus: add error handling for register_file
iobus: implement nobuffers error
cmd/iobus: update register_file API
os: add dirfile, refactor dirfdfs somewhat
iobus: add open, create
linux::io_uring: drop 'use fmt'
rt: import hare.sc from harec
.build.yml: email hare-dev on CI failures
Remove email triggers from .build.yml
stdlib.mk: drop + from PLATFORM & ARCH
stdlib.mk: add platform-specific module versions
iobus: clarify error behavior of [[getbuffer]]
rt: initial +freebsd support
.builds: add FreeBSD
types: rename util+test.ha => +test.ha
iobus: improve pool docs
cmd/hare: add assembly debug symbols
net::ip: initialize complete structs in to_native
scripts/gen-docs: fix module list generation
os::exec: use O_EXEC on +freebsd
os::exec: use RDONLY on +freebsd
cmd/haredoc: add 'out' to context
os::exec: improve documentation for file mapping
cmd/haredoc: page TTY output through pager
hare::module: skip dirs with zero inputs
Add /usr/local to default HAREPATH
scripts/gen-docs: improve module listing
hare::module: permit empty modules with README
rt+linux: use dup3 for dup2 implementation
rt/hare.sc: move .text higher in the address space
slice: add slice::trunc
strings: add strings::runes
format::elf: fix up trailing whitespace
cmd/haredoc: fix case where PAGER is unset
rt: remove extraneous return statements
io: add io::mmap
rt+linux: expand ioctl functionality
io: add munmap
hare::unparse: export more functions
Add (empty) READMEs for empty modules
io: add readitem, readitems
io: expand errors::unsupported into io::error
io: add writeitem, writeitems
os+freebsd: fix gid in fileinfo
strings: accept rune in hasprefix, hassuffix
iobus::io_uring: add send, recv
net: listenerfd is portable
hash::fnv: add string32, string64
hash::fnv: add string
io::drain: accept io::handle
hare release: new subcmd (WIP)
cmd/hare: use const where appropriate
hare release: rig up initial changelog bits
hare release: remove redundant error flag
hare release: add git note signature
all: drop bytes::copy in favor of slice assignment
hare release: allow setting tag name manually
hare release: move tag signing into separate func
hare release: implement initial release
hare release: fail gracefully if ssh-keygen is missing
hare release: remove extra os::remove
os::exec: improve fd manipulation
os::exec: add exec::pipe
os::exec: further docs improvements
haredoc: prefer os::exec::pipe over unix::pipe
os::exec::addfile: remove TODO
os::exec: fix dependencies and +freebsd
os::exec: add exec::wait to pipe docs
os::exec+freebsd: import unix
os::exec::addfile: swap from and to parameters
os::exec+freebsd: update platform_exec
os::exec: add kill
hare release: start SSH agent for signing
crypto::cipher, crypto::aes: improve docs
crypto: address secure erasure of secret data
all: remove reflection
net::ip: add LOCAL_V4, LOCAL_V6
rt: use eventfd2 rather than eventfd
stdlib.mk: add a few missing io dependencies
docs: add modules.md
docs/modules.md: improve use of "module root"
docs/modules.md: fix typo
hare::module: implement walk
hare::module: re-introduce README hack
rt+libc: don't run @init/@fini twice
rt+libc: exit with libc
hare::module: add vendor/ to default HAREPATH
cmd/hare: take advantage of slice duplication
crypto::argon2: minor docs improvements
io: fix typo in docs
hare::module: bump ABI version
strings: add cut
Makefile: move .bin/harec to harec2
io+freebsd: fix offs name
all: updates for append/insert overhaul
io::file: update docs
io::file: fix doc error on +freebsd
net: add sendmsg, recvmsg support
os: add wrapper for fs::readlink
path::join: fix join("/") case
dirfdfs: swap EINVAL for fs::wrongtype on readlink
pathbuf: initial commit
pathbuf: add README
pathbuf: add join
pathbuf: use fromutf8_unsafe
pathbuffer: merge into path
path::iter: accept *path::buffer as input
path: implement ".." for path::buffer
path::buffer: expand ".." tests
path: accept buffer for most path utilities
path: add path::set
path: return latest value from mutation functions
hare release: use path::buffer
path::join: minor improvements
path::buffer: document+test trailing / behavior
path: remove redundant namespace usage
path: @test: don't be quite so rough on the stack
cmd/hare/plan.ha: use path::buffer
cmd/hare/schedule.ha: use path::buffer
path::buffer: add additional test case
dirs: use path::buffer
dirs: add README
dirs: improve documentation of 'prog' parameter
temp: use path::buffer
fs::rmdirall: use path::buffer
fs::rmdirall: add perf comment
fs, os: add realpath
os: correct reference to fs::realpath
fs::mem: drop module
fs: tweak fs::resolve
fs::readlink: use static return value
os+freebsd: update fs_resolve
crypto::md5: drop module
gen-stdlib: drop crypto::md5
crypto: stub out authenc.ha
crypto::argon2: accept config as pointer
crypto: implement derivekey
crypto::derivekey: document algorithm details
mime: new module
os::exec: add self()
io::drain: document return value ownership
haredoc: improve dark theme
strings: improve docs
Revert "haredoc: improve dark theme"
mime: implement internal MIME database
mime: remove leftover assertion from debugging
mime: fix typos in comments
mime: slightly improved implementation of quoted-string
mime: better approach to quoted-string
mime: add some error cases to tests
mime: load system database
mime, os: remove temporary imports
gen-docs: add mime
io::limit: better define limit exceeded cases
stdlib.mk: add os dependency for base32
make: add install target
scripts/version: let environment set version
hare::module: fix default HAREPATH
strings::iter: improve docs
all: add copyright headers
fmt: correct README error
fs: add link, symlink
os: add os::access
fs: drop subdir/mksubdir
hash::crc*: document sum32/sum64
io::readall, io::writeall: new util functions
compress::flate: use io::readall
net::dial: fix error in docs
rt+linux+libc: fix argv type
haredoc: use data URI for mascot
linux::keyctl: initial commit
crypto::keystore: new module
crypto::keystore: add README
gen-docs: add crypto::keystore to whitelist
gen-docs: disable format::ini
crypto::keystore: implement destroy for +linux
os+linux: add mlock family of functions
encoding::base64: add encode, decode
unix::tty: add strerror
unix::tty: add noecho
io: add readv, writev
io: drop println, errorln
fs: add finish for iter
os+freebsd: fix iter
regex: improve README
unix::signal: new module
Merge linux::signalfd into unix::signal
unix::signal: refactor signalfd
unix::signal: correct SIGINT name
errors: add interrupted
unix::signal: improve signalfd interface
unix::signal: set SFD_NONBLOCK for signalfd
unix::signal: further improvements to signalfds
unix::signal: add procmask
unix::signal: add sigprocmask bits
glob: make failure an error type
errors: add eagain
unix::signal: fix stdlib.mk deps
os::exec::addfile: clarify docs
net: convert listener to io::file
update strio usage per upstream changes
datetime et al: updates per stdlib/compiler changes
time::compare: improve docs
time: improve README
datetime: rename mock => builder
datetime::new: rename zo to offs, update comments
datetime: remove clone
datetime: reflow README
datetime: overhaul format functions
datetime: rename start_of to truncate
datetime: rename diff_in_unit => unitdiff
datetime::hop, add, sub: improve docs
datetime::is_*: remove is_ prefix
datetime: docs improvements
time::tzdb: improve error handling
datetime: fix up docs
datetime: document format string constants
time::chrono: initialize leap seconds
Merge time::tzdb into time::chrono
os+freebsd: add init_cwd workaround
datetime::parse: remove trailing newline in docs
log: new module
log: add README
log: add fatal, lfatal
haredoc: fix too many fmt args for index
shlex: add quote, quotestr
shlex: fix permissible characters
crypto::hmac: add sha1
crypto::blowfish: new module
crypto::blowfish: fix aes reference
crypto::blowfish: remove unused dependencies
crypto: add opencollective to README
stdlib.mk: add missing ed25519 deps
all: add missing README files
iobus: remove module
linux::io_uring: remove module
compress: remove module
format::xml: remove module
Update README.md
all: use vtable for io::stream
aes: initialize blocksz for ni
rt+linux: drop obsolete comment
keyctl: remove test
Revert "bufio: improve buffered reader performance"
Revert "bufio::buffered: use rbuffer as unread buffer"
cmd/hare: print details on exec::cmd failure
crypto::blowfish: fix salted initialization
crypto::bcrypt: new module
crypto::bcrypt: add README
os::exec: fix error handling
os::exec: add rt::SIGCHLD to clone call
Revert "haredoc: use brighter non-bold tty colours"
crypto::bcrypt: remove debug imports
crypto::bcrypt: remove slice alloc workaround
io: add io::zero
bufio: buffer unreads into internal read buffer
bufio: clarify abort behavior of unread
encoding::pem: initial commit
encoding::pem: add README
encoding::pem: add license headers
crypto::cipher::ctr: remove unused variables
encoding::pem: minor style improvement
encoding::pem: remove unused struct field
README.md: yeet the principles
crypto::argon2: fix erroneous recommendation
crypto::blake2b: add README
crypto::derivekey: use argon2id by default
crypto::ed25519: add README
crypto::hmac: add standard crypto disclaimer
bufio::flush: accept any io::handle
io: drop unwrap
crypto::*25519: add note about keys
io: improve io::close docs
crypto::blowfish: loosen constraints on key size
log: write to stderr by default
encoding::json: new module
encoding::json: (mostly) implement value type
encoding::json: fix tests
encoding::json: license headers
stdlib.mk: add hash::fnv to encoding::json deps
linux::timerfd: remove trailing whitespace
encoding::json: add load
encoding::json: add README
encoding::json: clarify ownership semantics of set
encoding::json: add iter(object)
encoding::json: fix double free
.builds/alpine.yml: check patches for sign-off
hare::parse: add parse::decl
cmd/ioctlgen: initial commit
cmd/ioctlgen: use hex for output
hare::types: complete type alias implementation
ioctlgen: update per regex changes
bufio: accept io::handle on unread
ioctlgen: support type aliases
cmd/ioctlgen: add switch default case
cmd/ioctlgen: ioctls are u32's actually
hare::types: createalias => newalias
os: fix build on FreeBSD
fmt: don't use io::writeall
bufio: add borrowedread
crypto::curve25519: clamp input scalar
crypto::curve25519: zero clamped scalar
encoding::pem: accept arbitrary I/O handle
shlex: quote with ' instead of "
Remove some obsolete tuple unpacking TODOs
Mostly implement cross-compiling
cmd/hare: remove obsolete TODO
config.mk: use as/ar/cc/ld on x86_64 by default
.builds/freebsd.yml: drop gmake
format::tar: new module
os::iter: improve documentation
strings::template: new module
strings::template: minor docs fixes
net::dns: reuse sendbuf for recv
os::exec: improve addfile docs
os::exec: drop docs from exec::command
unix: add getgroups, setgroups
rt+freebsd: fix NGROUP_MAX
unix::passwd: add get*id, improve *_finish
rt+linux: add sync wrapper
rt::sleep: this sycall always succeeds
os::errno_to_fs: style
hare::module: incorporate tags into manifest
hare::module: fix false cache busts
README.md: clarify DCO policy
config.example.mk: install to /usr/local by default
fs::readdir: fix dirfd leak
driver: drop bell on completion
format::tar: implement seek within entries
Revert unix buffered I/O changes
unix::tty: fix bugs and update gen-stdlib
encoding::json: move to extlib
rt+libc+test: add __fini_start & __fini_end symbols
slices: fix static_deletefrom length
rt: fix rt::backtrace
strings::template: support ${var} syntax
Revert "Add location parameter to rc::_abort."
strings::template: improve README
rt::epoll_ctl: set return value to void
hare build: accept -N flag for namespace
net::udp: add recv
net::tcp::connect: handle NONBLOCK
unix::signal: add signame
rt: add TFD_{CLOEXEC,NONBLOCK}
crypto::blowfish: minor style fixes
Makefile: add workaround for parallel build bugs
rt: epoll_event is @packed on x86_64
io: remove {read,write}item{s,}
io::copy: return on zero-byte read
io::limit*: fix behavior on underread/underwrite
rt: remove -x86_64.ha
Revert "haredoc: make submodules reference relative"
io: drop obsolete doc reference
Revert time/hash shell syntax change
rt: add ftruncate wrapper
net::uri: add dup
net::uri::dup: fix issue with IPs
net::dial: add dial_uri
io::copy: use fallback if unsupported
bufio: implement improved scanner
README.md: drop "real-name" for sign-offs
Add MAINTAINERS
Add Willow Barraco as aarch64 maintainer
MAINTAINERS: Drop Sebastian
MAINTAINERS: Drop N:, add #hare-dev
MAINTAINERS: Add Sebastian
MAINTAINERS: Add bgs as math maintainer
MAINTAINERS: add bgs at top level
hare::ast, hare::parse: def/let/const w/o type
Return tuple directly from strings,bytes::cut,rcut
haredoc: set LESS to FRX if unset
docs/maintainers.md: document some maintainer bits
memio: truncate on reset()
MAINTAINERS: Add Conrad Hoffmann
Add TREES
A note from Hare's BDFL
docs/rfc.md: introduce RFC process
shlex::split: fix memory errors
net::dial: refactor out and export splitaddr
hare::module: add compatibility non-promise to README
Add docs/rfc-template.txt
make bootstrap
test/+test.ha: remove obsfucated code
docs/rfc.md: link to template
io: add dup, dup2 functions
types::c: add unterminatedstr
time::date: add month and weekday constants
wordexp: new module
make bootstrap
.builds/*: exit on non-master builds
cmd/hare: fix cross-compiling qbe arch
rt: remove backtrace functionality
rt: add ucontext structures for +linux
rt: add ucontext structures for +freebsd
rt: add ucontext structures for +openbsd
rt: add abort hooks
rt: add sigaltstack wrappers
rt::malloc: consolidate global state and add newheap
os, fs: add fstat
os::exec: expose [[lookup]] to public API
unix::signal: add addr to siginfo on +openbsd
debug::image: new module
debug::dwarf: new module
debug: new module
hare(1): enable debug features, add -R flag
debug::dwarf::line: support version 2
rt+openbsd: add missing copyright headers
Dridi Boukelmoune (4):
Makefile: Pass LDLINKFLAGS to link hare
Makefile: Print the correct $(AR) utility
error: Align located messages with other toolchains
cmd/hare: Bring back LDFLAGS support
Edin Taric (1):
encoding::hex::encode: Re-added and wrote test
Egor (7):
net: set CLOEXEC on new sockets atomically
net: invert the meaning of CLOEXEC in sockflags
net: add sockflags to connect/accept/socketpair
unix: invert the meaning of CLOEXEC in pipe_flag
fs: invert the meaning of NOCTTY/CLOEXEC in flags
fix dup without CLOEXEC in linux dirfs_clone
os::exec: clear FD_CLOEXEC when dup2ing fd to itself
Ember Sawady (270):
make clean: force-remove hare
Fix rt::realloc
Add io::seeker interface
rt: add rt::ensure
os::init_environ: replace horrible hack with append
rt: size2bin: fix assertion
rt: realloc: don't reallocate if s == n
gen-stdlib: gen_lib all modules upfront
gen-stdlib.sh: fix target names
rt::segmalloc: remove obsolete TODO
strings::concat: remove unused variable
rt+test: fix typo
hare::lex::lex_name: use variadic appends
Regenerate mk/stdlib.mk following stdlib updates
Add rt::unensure
Update for switch/match cases being scope expressions
hare::parse: add slice dependency
bufio: add dynamic
hare::parse: implement alternative import syntaxes
os::exec::cmd: make better use of variadic append
main.ha: unparse alternative import syntaxes
rt::{ensure, unensure}: get length from slice
rt::ensure: remove debugging prototypes
Add fmt::print et al
main.ha: use fmt::print when appropriate
fmt: implement printing of bools
lex::syntaxerr: remove now-unnecessary casts
io+test::bs_read: use slice copying
io: drop now-unnecessary @init func
crypto::random: drop now-unnecessary @init func
crypto::sha256+test: s/errorln/errorfln/
hare::lex+test: s/errorln/errorfln/
hare::module: use dirs::data as default $HAREPATH
Refactor hare::lex::literal to be a tagged union
README.md: fix typo
getopt: new module
rt::abort_fixed: update for location printing
Drop workarounds for lack of forward references
hare::parse::ident: fix synassert
hare::lex::literal_type: remove
hare::lex::lex2: implement ! and !=
strconv::*tos: return index of first nondigit
Update for prototype grammar changes
lex::location: specify ownership semantics of path
hare::ast: flesh out
hare::unparse: flesh out
hare::parse: implement decls parsing
cmd/harec: initial commit
hare::module::lock: create cache directory
cmd/harec: use fmt::error when appropriate
hare::parse: reimplement void constants
hash::fnv::fnv*_sum: make use of array allocs
hash::adler32: new module
gen-stdlib: move module name printing to gen_srcs
hare::parse::decls: permit empty subunits
errors::strerror: fix opaque errors
Update README.md
errors::opaque: fix example code
compress::flate: new module
compress::zlib: new module
compress::zlib: add test data
Refactor hare::lex and hare::parse
Revert "Refactor hare::lex::literal to be a tagged union"
hare::lex::token: further improvements
strconv::f64tos: enable negative exponent test
strconv::stoz: fix documentation
strconv: add stoi*b
strconv::stou+test: use flexible literals more
hare::lex: implement literals
lex::literal: fix handling of z/i16/u16 suffixes
cmd/hare: implement -T and -X
io: move println.ha to println+linux.ha
cmd/hare: pass --gc-sections to ld
hare::parse: test struct autofill
Further fixes to matches
unix::setuid: fix build
hare::parse: disallow null as a primitive type
os::exec: drop +linux.ha
cmd/harec: buffer the input stream
Fix error handling oversights in tests
Fix further oversights in error handling
hare::parse: implement ! postfix operator
crypto: add blake2b
crypto::blake2b: add test vectors
Regenerate stdlib.mk
Revert match syntax changes
hare::parse: update for reverted match syntax
Update for error type syntactical changes
hare::parse: make error types a prefix
types::hash: add write64 and use when appropriate
hare::ast: add location to expr
hare::types: finish data structures and hashing
hare::types::resolver: make rstate nullable
hare::types: implement lookup for function types
Fix implicit casts from *void to nullable pointers
hare::lex: fix float literals
hare::parse: add float constant tests
hare::types: fix string size
hare::types: implement tagged union lookup
hare::parse: fix pointer match cases
hare::lex::next: simplify
parse::mkloc: drop in favor of lex::mkloc
lex::mkloc: fix interaction with unget
lex::prevloc: add
lex::mkloc: fix interaction with unlex
lex::lexloc: fix tab width
hare::lex: add mkloc/prevloc tests
parse::expression: fix bugs in loc tracking
ast::_type: track end location
hare::parse: add location tests
lex::lex2: refactor
fmt::formattable: add void
hare::module: search in . if $HAREPATH is unset
os::iter: rename from os::iterdir
Update TESTHAREFLAGS for harec change
cmd/hare: improve test discovery
cmd/hare: provide fallbacks for -D constants
hare::module: incorporate +test into cache
cmd/hare: test: implement module discovery
cmd/hare: test: don't schedule root module if it's empty
cmd/hare: test: add -o option
all: fix too-small tuple values
net::unix: fix addrlen
hare::{lex,parse}: implement yield
rt: add mlock et al
rt: add prctl
hare::parse::append_expr: drop *unary-expression form
hare::parse::unarithm: allow &unary-expression
hare::parse: implement insert
hare::lex: assume float on negative exponent
hare::types::lookup_builtin: simplify
Fix bugs caught by match exhaustivity test
cmd/haredoc: fix typo in usage
cmd/haredoc: -Ftty, -Fhare: drop trailing newline
cmd/haredoc: implement ident lookup
cmd/haredoc: drop const reduction workaround
crypto::sha512: export variant enum
compress::*: use caller allocation
bufio/memstream: drop harec workaround in test
fs::mem+test: drop harec workaround
bufio+test: drop invalid TODO
linux::vdso: don't use pointer arithmetic
path::{base,dir}name: match {base,dir}name(3p)
io+linux::fd_read: fix indentation
cmd/harec: fix match case type
cmd/harec: implement -o
unix::umask: don't return an error
unix: add pipe wrapper for Linux
iobus: further typo fix in [[done]] docs
hare::{ast,parse,unparse}: implement offset()
os::exec: implement FD manipulation
rt::clone: fix on aarch64
hare::parse::expr: update match binding syntax
strconv::ftos: implement f32 case
net::dial::resolve_addr: drop harec workaround
linux::io_uring::sqe: drop harec workaround
net: drop forward references workaround
math::nearbyint{32,64}: fix a few constants
Update I64_MIN for lexer changes
hare::lex: drop -- and ++ from bmap
haredoc: fix ident parsing errors containing '{'
rt::cc: drop harec workaround
math::random: add u32n and u64n
shlex::quote: fix safe non-alphanumeric chars
README.md: update build badges
cmd/haretype: fix compilation
regex: replace alloc([]) with []
gen-stdlib: fix linux::timerfd dependencies
hare::lex: implement labels in tokstr
cmd/haredoc: fix error message
.builds/freebsd.yml: use bmake where possible
dirs::lookup: use fmt::fatalf where appropriate
hare::module::scan_directory: fix double free
shlex::quote: fix handling of backslashes
Add a mailmap
cmd/hare: permit type inference for -D
Bump ABI version
Drop hare::lex::_null
Update my name in the copyright headers
os: free envp in @fini
os::exec::strerror: handle errors::error correctly
os::exec::setenv: fix memory leak
os::exec: add chdir
os::fs_create_file: add O_TRUNC by default
Simplify lex2 for '-' and ':'
os::exec: fix errno handling in platform_start
regex: don't use alloc([])
rt+riscv64::backtrace: fix
strings::tokenizer: use strings::fromutf8_unsafe
cmd/haretype: update for align builtin
Remove implicit assignment from uintptr to pointer
Fix FreeBSD CI
os::exec::{un,}setenv: loosen restrictions on keys
Update for new typedef environment variables
cmd/haredoc: fix formatting of types in globals
strings: fix usage of fully qualified identifiers
Rename files to avoid naming conflicts
rt/*.s: use correct per-function sections
Even more fixes for ambiguous files
crypto/aes/*.s: use correct per-function sections
cmd/ioctlgen: fix compilation
cmd/haretype: fix compilation
cmd/haredoc: close read end of pipe later
Improve test runner
rt: fix platform_abort
rt/abort*.ha: add missing comma in reasons
rt+freebsd: _start: don't touch first arg
rt: update for @noreturn abort
fs+freebsd::readlink: return wrongtype on EINVAL
Improve +libc argv/argc/envp initialization
io+freebsd::fd_copy: return errors::unsupported
Get rid of rt/+test/ztos.ha
Rewrite malloc
linux/*: fix fully-qualified identifiers
hare::parse::want: unlex token on failure
hare::parse::ident: disallow empty identifier
os: add setenv and unsetenv
rt: make errno constants have type rt::errno
io+linux::fd_copy: simplify
Fix chachapoly compilation
hare::parse::identstr: only parse full ident
cmd/haretype, cmd/ioctlgen: update for memio
malloc: improve wording in a comment
pass -z noexecstack to ld
drop hare release
add a pointer to my harec tree
memio: improve dynamic_from documentation
net: fix cmsg_len
Rewrite build driver and hare::module
rt: replace ztos with u64tos
update for abort abi change
rt: run @fini functions in reverse order
get rid of special case in module3 progress bar
cmd/hare: respect -N
make use of -M flag
format::tar: make use of io::readall
encoding::base{32,64}+test: make use of io::drain
linux::timerfd::read: clarify docs
rename fmt::modifiers to fmt::mods
simplify copyright headers
replace scripts/gen-stdlib with cmd/genbootstrap
get rid of $(RM)
make linux::* +linux only
hare::parse::doc: relicense as mpl
get rid of trailing whitespace
hare::unparse::constant: fix buffer size
run make docs/html on patch ci
strconv: minor style fixes
strconv::fftosf: return number of bytes written
crypto::aes: fix a doc typo
unix::hosts: fix references
log: export global
crypto::argon2: fix references
temp::file: get rid of an invalid free
run_task: unlock after cleanup
strings: get rid of an extra newline
update test runner
strconv::{ffmt, fflags}: improve default values
fmt: factor out format string iterator
fmt: add center-alignment
fmt: flesh out float formatting
update for checkless for loops
drop build status from readme
OpenBSD: truncate files on creation by default
scripts/moddirs: ignore configs/
cmd::hare::build: separate tmpfile from lockfile
update ci for harec config.mk
notify hare-dev on ci failure
.builds/alpine.yml: don't fail if publish fails
.builds/*: only run for ~sircmpwn/hare
Evan Johnston (1):
strings::fromc: update documentation about invalid utf8
Evan Vogel (1):
rt/hare+libc.sc: include .rela.plt section for glibc ELF binaries
Gabriel Schmotzer (1):
fix fmt::fprintf's '+' and '0' modifiers
George Rose (1):
Fix rt::accept4
Gusted (1):
Fix typo in crypto::chachapoly
Haelwenn (lanodan) Monnier (22):
math: make absi* functions return an unsigned integer
cmd/haredoc: Fix default HAREPATH
strings: Fix dupall segfaulting on empty array
cmd/hare: Do not set progress width to 0
fs: Fix wrong bitmask for filetype test functions
datetime: fix parsing nanoseconds
datetime: add %z parsing (zone offset)
stdlib: Fix format::tar dependencies
os/exec: Make setenv return errors::invalid instead of aborting
os::exec: Add unsetenv function
datetime: Add %F and %T to format
datetime: Add %s to format
strings/template: Give the missing parameter name in the error
net/uri: Acknowledge the different allowed characters
net/uri: Fix decoding multi-byte percent-data
net/uri/+test: Use wanted/got wrapping for all str assertions
cmd/hare: Stick to POSIX ar(1) flags to avoid requiring ARFLAGS
cmd/hare: Use LDLINKFLAGS instead of LDFLAGS
net/uri: Always prefix path with a slash when there's a host
cmd/hare: Print error with command on exec::nocmd
docs/hare.1.scd: Document HARECFLAGS
Makefile,stdlib.mk: Use HARECFLAGS for $(HAREC) commands
Humm (3):
path::doappend: append separator to short buffer
make: surround macro definition operators by blanks
encoding::json: refer to RFC 8259 in README
Joe Finney (11):
Add location parameter to rc::_abort.
Free cmd.files in os::exec::finish.
Fix fd leak in os::exec::platform_start.
Remove _ from function parameters.
strconv: make stof and ftos round-trip safe.
strconv: implement ftosf.
Add comment to strconv::ffmt and strconv::fflags.
Test length result of strconv::fftstof.
Alphebatize imports across the board.
Strip leading space in rt/+openbsd/syscalls.ha.
strconv: Fix bug with large inputs to stof32.
John Gabriele (1):
s/error/errors/ module name
Jon Eskin (1):
os: add mode to mkdir
Jonathan Halmen (2):
getopt docs: fix typos
net/dns: fix typo in types.ha
Jose Lombera (6):
rt: signal: return error for invalid signal numbers
rt: signal: change API to more sensible return types
Makefile: add uninstall target
log: lfatalf: write to correct logger
log: add default logger
log: make default and silent loggers const
Josiah Frentsos (3):
README.md: Change a comma to a semicolon
Makefile: Fix quoting of $(VERSION)
OpenBSD: os::cpucount: Return the number of online CPUs
KAAtheWise (2):
regex: Convert ranges to use u32 representation of runes
strings::sub: Remove unneeded iteration
Kirill Primak (6):
strconv: fix mulshiftall64()
encoding::utf8: validate rune in encoderune()
encoding::utf8: improve decoder
rt/test: fix timespec diff calculation
rt/test: fix milliseconds formatting
hare/module: update context.paths initialization
Kiëd Llaentenn (13):
Add unix::tty::isatty
Add unix::tty::winsize
Move unix/tty/isatty.ha to unix/tty/+linux/isatty.ha
Add unix::tty::open
Add hash::crc32
Use user-provided buffer for hash::sum
hash::crc32: Export SIZE definition
hash::crc32: Use SIZE constant when initialising new crc32 hash struct
Add hash::crc16
hash::crc16: Fix reference to CRC32 tables in docs
hash::crc32: Fix typo in docs
Add hash::crc64
hash::crc32: remove unused fmt import
Lassi Pulkkinen (10):
net::dns: Rework decode_name
net::dns: Don't assume rdata to be of a certain length
net::dns: Don't leak memory when decoding fails
net::dns: Minor cleanup in destructors
net::dns: Move (un)parse_domain into their own file
rt+linux: Use exit_group
bufio: Fix excessive memmoves in buffered_read
bufio: Skip flush byte search when none are set
math::modfracf*: Return integer part as float
math::powf64: Check for overflowing exponent
Lennart Jablonka (5):
remove ETIME from errors and rt/+freebsd
gen-stdlib.sh: reset OPTIND=1 before using getopts
gen-stdlib: quote 'hash' and 'time'
hare(1): drop duplicate reference to as(1)
configs/openbsd.mk: default to /usr/local/man
Lorenz (xha) (66):
time/+freebsd: s/rt::instant/instant
TREES: add OpenBSD
io: return errors::invalid if len(vectors): int overflows
net::unix: remove unused buf
rt+freebsd fix getpriority
cmd::hare arch add comment about values beeing overwritten
rt: make linker scripts platform-specific
rt: make start* and initfini platform-specific
rt: make the signal test platform specific
os::exec: make cmdfile platform-specific
unix::tty: make openpty() platform-specific
remove config.example.mk and add configs/<platform>.mk
cmd::hare: introduce platform.ha for adding platform-specific setttings
cmd::hare: introduce ctx.libc
cmd::hare: add OpenBSD
OpenBSD: add rt
OpenBSD: add io
OpenBSD: add path
OpenBSD: add time
OpenBSD: add time::chrono
OpenBSD: add os
OpenBSD: add os::exec
OpenBSD: add unix
OpenBSD: add unix::signal
OpenBSD: add unix::tty
OpenBSD: add unix::poll
OpenBSD: add unix::hosts
OpenBSD: add unix::resolveconf
OpenBSD: add format::elf
OpenBSD: add crypto::random
OpenBSD: add net
OpenBSD: add net::ip
OpenBSD: add net::tcp
OpenBSD: add net::udp
OpenBSD: add net::unix
OpenBSD: add genbootstrap
MAINTAINERS: add Lorenz (xha) <me@xha.li> to OpenBSD
OpenBSD: os::exec update for checkless for loops
OpenBSD: unix::tty isatty() use fcntl(F_ISATTY)
OpenBSD: make bootstrap
OpenBSD: add .builds/openbsd.yml
configs/openbsd.mk remove my local path
OpenBSD: rt:: fix readlinkat, renameat
OpenBSD: rt:: sycalls introduce pathbuf1
OpenBSD: add rt::pledge()
OpenBSD: add rt::unveil()
FreeBSD: truncate files on creation by default
crypto::aes check for AVX before using the native interface
remove the fs::flag::TRUNC argument from os::create in cmd::hare
cmd::hare add comments and cleanup
OpenBSD: implement os::mkfifo and os::mkfile
os fs.ha: s/errors::errno/fs_to_errno/
OpenBSD: fix net/ calls to rt functions
rt/: prepare for IBT support
make rt/+{arch}/restore.s platform-specific to +linux
OpenBSD: fix CI
OpenBSD: rt fix munmap system call
configs/*.mk: don't always assume cross-compilation
*BSD: fsflags_to_bsd return unsupported instead of abort()
remove harec2 from the makefile all target
Makefile: more quoting
.builds/freebsd.yml drop CC=cc workaround again
OpenBSD: rt fix termios structures
OpenBSD: rt add kqueue(2) wrappers
OpenBSD: Use more precise checks in fsflags_to_bsd
debug: partial +openbsd support
Mallory Adams (1):
FreeBSD: Use more precise checks in fsflags_to_bsd
Martin Quinson (1):
More testing of encoding::base64
Miccah Castorina (3):
net::ip::fillmask: bug fix for ipv6 masks
net::ip: implement subnet_contains
strings::iter: Make riter use next to go forward
Michael Forney (2):
rt: fix riscv64 entry point
rt: fix riscv64 O_DIRECTORY value
Michael Tilli (1):
Advance after zero-length regex matches
Mohammed Anas (3):
strconv: correct `ztos` doc comment
unix::signal: fix typo in docs
cmd/haredoc: close read end of pipe after passing it to command
Mykyta Holubakha (33):
rt/+linux: added poll and timerfd_* syscalls
timerfd_settime: add const
rt: add nullability to timer_settime args
rt: add missing POLL* constants
rt: add sigset and implement sigsetops
rt: add signalfd syscall
rt: add sigprocmask syscall
rt: implement sigaction for signal handling
gen-stdlib: signals
rt: implement socket syscall
rt: connect, bind, listen and accept syscalls
rt: add send(to), recv(from) syscalls
rt: {get,set}sockopt syscalls
rt: epoll syscalls
rt: fix epoll_event layout for compat with kernel
format::elf: add definitions for auxv/vDSO parsing
linux: new module for linux-specific stuff
linux: implement getting symbols from vDSO
time::now: use vdso
rt/socket: sockaddr_in6 definition fix
net/ip: new module
net::ip: add conversion to rt::sockaddr
net/ip: added from_native function
rt: added getsockname syscall
rt: added getpeername syscall
net: add a high-level TCP server & client API
rt: add readv, writev, readmsg, sendmsg syscalls
rt: add umask syscall
rt: fix UNIX_PATH_MAX type
net::unix: unix socket address type
net: add high-level UNIX socket interface
Build fixup
rt: add functions to walk stack frames
Nihal Jere (6):
fs: fix typo
crypto: fix typo in README
datetime: remove obsolete todo
datetime: fix week of the year calculation and add test
datetime: implement %U format specifier and add a test
time::chrono: treat presence of both utcnt and stdcnt as invalid
Nikola (5):
Handling hash collisions by comparing both hashes and idents
Added regex::strerror
sort::search now returns an index to the element instead of a pointer
driver: make progress bar width fixed
rt: Fix stack alignment in _start
Nixon Enraght-Moony (2):
Makefile: propagate HAREC and QBE variable
time::chrono: Buffer read_leapsecfile
Noah Altunian (2):
errors: Fix misspelling in code comment
haredoc: update man page wording to be more clear
Noah Loomans (1):
cmd/hare: fix not erroring on unsupported target
Noah Pederson (2):
include glob and regex in install-mods
Add CLOEXEC, NONBLOCK flags to net::accept
Noam Preil (3):
cmd/hare: bell the terminal when build completes
strings::template: fix typo in README
strings::template: reject left braces
Nolan Prescott (2):
regex: require quantifier minimum in range
regex: trailing hyphen not a range
Patrick Widmer (1):
encoding::json: fix infinite loop in iterator next
Pedro Lucas Porcellis (1):
strings: fix typo in the suffix doc
Pierre Curto (11):
math: add trailing_zeros_u*
bytes: implement special cases for 2, 3 and 4 needle sizes in index
strings: update riter and remove push
net::ip: minor code updates
net::dial: handle IPv6 address with port
os::exec: fix pipe documentation
unix: use buffered I/O
sort::sorted: fix invalid results and add tests
haredoc: make submodules reference relative
hare/lex: handle threadlocal attribute on global declarations
hare::parse: remove duplicate tokens when checking types
Pinghao Wu (2):
linux::timerfd: read: report read errors
crypto::argon2: fix zeroing of h0
Romain Reignier (1):
strings::tokenize: fix example
Scott Little (1):
Display an error when lookup's mkdirs() fails
Sebastian (676):
xml: fix memory leak
hex: fix memory leak
unparse: add documentation for decl
socket: add missing IPROTO_* constants
unparse: more accurately format switch/match expressions
ast: add number_constant type
unparse: add parantheses when needed to show precedence
mime: remove unused io import
rt: rename sigval_t to sigval
module: fix typo in README
unparse: unparse documentation comments
haredoc: lookup functions by @symbol
dirs: add state functions
strings: s/dup_all/dupall/g
lex: add support for `raw strings`
shlex: use `raw strings` in tests
strings: add strcmp function
fs: move strerror from util.ha to types.ha
ascii: improve strcasecmp docs
ascii: always check if strings are ASCII in strcmp funcs
ascii: improve strcmp tests
Minor fixes in copyright.sh
rt: update malloc+debug.ha
lex: add support for `raw strings`
parse: use `raw strings` in tests
strings: more optimal `replace` design
strings: add additional tests for `replace`
bytes: correct typo in README
strings: add README
strconv: add README
strings: remove unused import
Update README.md early development secrecy section
sort: remove unused function declarations
strconv: fix double-space typo in comment
strconv: fix inaccurate doc comments
crypto::random: fix typos
all: remove trailing whitespace
bytes: add security warning to equal function
haredoc: add -a flag to manpage
strings: improve `replace` docs
ast: store both start and end location in decl
ast: store location in enum_field
haredoc: improve -Ftty syntax highlighting
ast: add copy allocation form
strings: clarify `join` ownership behavior
haredoc: remove unnecessary error types
haredoc: remove builtin type function
ascii: wrap isgraph doc comment at 80 columns
parse: rename expression to expr
module: add docs for strerror
lex: remove PLUSPLUS and MINUSMINUS tokens
unparse, haredoc: linewrap long tagged/tuple types
unparse: backslash-escaping in string/rune literals
strings: add multireplace
strings: rename iter_str to iterstr
ast: update docs for (switch|match)_(case|expr)
all: remove unnecessary imports
path: improve PATHSEP doc comments
all: fix typos and misc grammatical issues
types: fix string data comment
ip: style fix
ast: improve fndecl_attrs documentation
path: improve docs for dirname and basename
Remove unnecessary void returns
utf8: add README
all: s/package/module/g
parse: allow switch/match/compound within cast expr
parse: permit trailing comma in switch case
strings: add trimprefix and trimsuffix
types: don't export BUCKETS
lex: remove TODO in ncmp
unit: remove fndecl_attrs
rt+freebsd: implement strerror and errname
path: fix basename behavior
lex: handle try() failure in lex_unicode
lex: use lex_unicode buffer with length 8 instead of 9
parse: don't treat synassert msg as format string
parse: remove unused nametype function
all/README: don't surround module name in [[brackets]]
rt: style
ast: free docs in decl_free
fmt: remove fmt:: prefix in README link
hare::types: add more builtin types
hare::types: add documentation for builtin types
hare::types: add arch configuration for riscv64
slice: add more void functions
io: clarify documentation for writeitems
io: fix parameters for writeitem and writeitems
os: improve resolve documentation
fs: improve resolve documentation
haretype: flesh out program
format::ini: add README
endian: add README
hare: add hare::types to README
strings: remove c_empty
Rename module slice to slices
utf8sz: return void for invalid instead of SIZE_MAX
strings: account for NUL-terminator in fromc capacity
fnmatch: remove unnecessary cast
lex: rename ltoks GREATER/GREATEREQ to GT/GTEQ
parse: allow enums with rune storage
Always keep type specifier on same line as declaration
parse: assert that insert object is indexing expr
strings: add byteindex
lex, parse, unparse, haredoc: parse comments in structs, unions, and enums
all: remove unnecessary module prefixes in docs
sort: const `in` param and return value for search
sort: add types.ha
sort: improve documentation
sort: add README
sort: add bisect functions
sort: add strings and sortstrings
.builds/*.yml: switch to upstream qbe
argon2: use alloc instead of rt::malloc
unparse: print empty line between declarations
fmt: abort bsprint if buffer is too small
fmt: test bsprint
bufio: make fixed write stream seekable
slices, strings: add cap function
lex: more efficient comment building
format::xml: more informative error in xmltest
format::xml: return line number of syntax error
rt: account for NUL byte in from_c_unsafe capacity
sort: add sorted and strings_sorted
net::unix: s/null-terminated/NUL-terminated/g
unparse: better type_test
unparse: return correct size from struct_constant
parse: test returned unparse size in roundtrip
unparse: return correct size for tagged and tuple
parse: add tests for tagged/tuple types
unparse, haredoc: linewrap long function prototypes
parse: test long function prototype
install-mods: add datetime and log
ascii: rename isascii to valid
ascii: add validstr
ascii: remove strcmp
ascii: abort strcasecmp when non-ASCII encountered
ascii: add more strcasecmp tests
regex: remove ASCII charclass
regex: remove WORD charclass
gen-stdlib: add datetime dependency for log
ast: fix outdated docs
fmt: abort if too many parameters are given
gen-stdlib: add io dependency for dirs
ast: rename import_free to import_finish
hare::types: add strerror
hare::types: update builtin to match ast::builtin
hare::parse: test long tuple type
haredoc: show type-internal docs in HTML backend
hare::parse: fix imports
gen-stdlib: add missing dependencies for shlex
hare::ast: rename subunit_free to subunit_finish
hare::ast: rename decl_free to decl_finish
hare::unit: rename unit_free to unit_finish
unix::{hosts,resolvconf}: platform-specific file path
hare::parse: accept EOF after return or yield
ast, lex, parse, unparse: vaargs updates
hare::parse: add more loc tests
hare::parse: better error message for expr_testloc
hare::ast: rename type_free to type_finish
hare::ast: rename expr_free to expr_finish
hare::ast: struct_constant_free -> struct_constant_finish
regex: style
time::chrono: platform-specific file paths
crypto::random: add README
cmd/hare: add release to help text
haretype: use types::strerror
time+linux: don't export VDSO constants
gen-stdlib: remove duplicate dependency
hare::module: fix typo in struct comment
rt: fix C macro comment
path: add ownership info to "string" docs
haredoc: test parseident with keyword
hare::types: type assert instead of cast
hare::types: don't show implementation comments in haredoc
hare::module: more efficient identpath
fnmatch: style fixes
encoding::base{32,64}: style
hare::parse: grammatical fix for peek doc comment
exec: proper error handling in lookup
exec: fix documentation for pipe
docs/hare.scd: add riscv64 to arch list
docs/hare.scd: add haredoc to SEE ALSO
docs/hare.scd: document hare version -v
docs/hare.scd: fix typo
docs/hare.scd: more accurate HARECACHE summary
hare::module: document filetype
cmd/hare: reword the help text for hare version -v
base64: new_{decoder,encoder} -> new{decoder,encoder}
Allow returning an error from io::closer
all: don't use io::write when full write is required
all: use io::readall when full read is required
hare::ast: remove void from value
shlex: return number of bytes written for quote
hare::module: rename module_not_found to notfound
path: use PATHSEP where applicable
regex: remove regex:: prefix from links in README
regex: capitalize Hare in README
fmt: add fatalf
log: add fatalf and lfatalf
Change all strings::strcmp references to compare
haredoc: use object allocation in sort_decls
cmd/hare: make git_error an error type
os, fs: fix resolve doc comment
hare::ast: use label type for yield_expr label
haredoc: free interior state of decls
haredoc: free imports after parsing
cmd/hare: tagged union style
path: fix typo in dirname docs
hare::ast: remove label from for_expr doc comment
fs: rename dirent_free to dirent_finish
io: fix typo in zero doc comment
io: correct io::file docs
strio: clarify dynamic and string docs
hare::module: ignore unrecognized filetypes
hare::module: use strings::freeall in scan
getopt: migrate long doc comment to README
haredoc: fix submodule list within submodules
hare::module: superceeded -> superceded
hare::module: style
rt+linux: make cmsghdr arch-dependent
io: add docs for io::off
os: update stat docs to match fs::stat
haretype: use implicit subtyping for stream
hare::parse: remove unnecessary double cast
log: add period in doc comment
strings: style fix
regex: pass by pointer
Makefile: don't suppress output of rm in clean
Makefile: add scripts as dependencies
Makefile: add docs/html target
rt+test: remove NUL from ztos string
types: fix internal docs of string type
encoding::json: add strerror
slices: add static_* functions
hare::lex: properly lex strings separated by comments
strings: remove unicode module references
rt+linux: make __ADDR_BND_PKEY_PAD arch-specific
haredoc: handle module::error
hare::lex+test: better error message
hare::lex: use raw strings in string tests
rt::{memcpy,memmove}: make src const
cmd/hare: free defines and libs slices
haredoc: move utility functions from html.ha to util.ha
linux::keyctl: add strerror
linux::keyctl: document error
hare::parse: permit suffix on tuple access index
hare::parse: allow static binding in for expression
hare::module: rename parse_name to parsename
hare::lex: fix nested tuple access lexing
ascii: style
encoding::json: drop bufstream
encoding::json: fix number lexing
encoding::json: export unlex
encoding::json: return invalid on invalid escape
encoding::json: disallow unescaped control char in string
encoding::json: don't treat formfeed as whitespace
encoding::json: fix doc comments
encoding::json: use fnv::string instead of fnv::string64
encoding::json: disallow trailing comma
Makefile: add docs to .PHONY
encoding::json: clarify set docs
cmd/hare: use shlex to quote environ
encoding::json: add extension info to README
encoding::json: make del take in multiple keys
encoding::json: allow setting nesting limit for load
encoding::json: add equal function
encoding::json: add dump and dumpstr
encoding::json: add loadstr
encoding::json: add reset function
encoding::json: store location in invalid
encoding::json: expand tests
Handle negation in parse instead of lex
cmd/harec: remove unused imports
cmd/hare: free deleted tags in deltags
math: use isclose in tests
math: export more constants
math: add hypotf64
math: add atan2f64
math::complex: initial commit
encoding::utf8: use buffer of size 4
Export BUCKETS constants
Remove hare.sh
Remove scripts/platform
Makefile: don't use var in printf format str
Makefile: make hare.ssa depend on scripts/version
haredoc: highlight submodules bold in tty
config.mk: add BINOUT
Makefile: use $(HARECACHE) and $(BINOUT) in clean
math: don't reference UINT_SIZE in doc comments
math: remove isneginf and isposinf
math::complex: add some c64 functions
math::complex: add generic equal function
math: style fixes
os: ignore io::close error in fini_stdfd
haredoc: add -T and -X flags
net: add socket type
net: replace net::shutdown with net::close
log: fix README
temp: remove unused import and update gen-stdlib
docs/hare.scd: more user-friendly man page
linux::keyctl: fix undefined reference
rt: add STD*_FILENO constants
hare release: use tuple unpacking
hare::unit: use tuple unpacking
hare::module: use tuple unpacking
Parse labels in hare::parse instead of hare::lex
Makefile: remove docs/html in clean
hash::fnv: style: use ALL_CAPS for constants
hash::fnv: make string arch-dependent
gen-stdlib: update hash::fnv dependencies
hare::lex: fix number lexing
crypto: remove crypto:: prefix in doc comment
hare::lex: disallow f suffix on non-base-10 literals
encoding::utf8: move utf8sz to rune.ha
encoding::utf8: don't recognize 5/6 octet sequences as valid
bufio: return utf8::invalid in more cases
scripts/gen-docs.sh: use $(BINOUT)/haredoc
scripts/gen-docs.sh: quote $srcdir
rt+linux: add memfd_create
rt+linux: add splice
rt+linux: add tee
rt+linux: add alarm
rt: add fallocate and posix_fallocate
rt: fix lseek parameter type
rt: add SEEK_* constants
unix: make getuid, setuid, and groups platform specific
rt+linux: add EWOULDBLOCK
rt+freebsd: remove duplicates from strerror switch
rt+linux: add ENOTSUP
rt+linux: add EDEADLOCK
io: use writeall in copy_fallback
hare::lex: disallow leading zeros in number literal
haredoc: resolve symbols in root namespace
io: add note about infinite handles in drain docs
hare::parse: add missing error propagation
all: only type assert into direct members of tagged union
driver: use terminal escape instead of carriage return
rt: export jmpbuf, setjmp, and longjmp
rt: fix mknodat syscall
os: add link and symlink
rt: use path type for more syscalls
net::dial: remove harec bug workaround
all: don't autofill fields without a default value
bytes::contains: accept multiple needles
regex+test: print to stderr and abort on error
regex: make find and findall return [][]capture
os::exec: update and fix doc comments
path: update README
math: add pop_count functions
net::ip: remove rt dependency
os: make stderr a handle instead of a file
fmt: fix typo in abort message
strings: return utf8::invalid from fromc on invalid UTF-8
strconv: fix doc comment
os::exec: update doc comment
net::unix: fix imports
os::exec: add lifetime info to exitstr docs
gen-stdlib: update dependencies
os::exec+freebsd: update pipe docs to match +linux
haredoc: get default tags from `hare version`
rt: use path type for more syscalls
os::exec+linux: use signal name in exitstr
haredoc: separate highlighting for functions, globals, and typedefs
unix::signal: add code enum
fs: re-use path buffer in rmdirall
regex: add replace and rawreplace
regex: find consecutive matches in findall
os+linux: only call uname once
hare::types: platform-specific hash calculation
driver: handle invalid namespace identifier error
contrib: remove copyright.sh
contrib: add contributors.sh
docs/stdlib.md: remove extlib protocols
{bytes, strings}::tokenize: fix param name in docs
os+freebsd: don't autofill fields without default value
rt+linux: add sched_getaffinity and sched_setaffinity
unix: fix pipe documentation
time: add reference to `instant` documentation
time: fix reference
rt: make wait4 pointer params nullable
unix::signal: fix typo
unix::signal: add abort for unreachable switch case in signame
os: add cpucount function
unix::signal: add resetall
hare::ast: add align expression
unix::poll: add error type
haredoc: remove -Fgemtext
crypto/conventions.txt: recommend bytes::zero
gen-stdlib: print correct $(AR) utility
rt: add getrlimit and setrlimit
unix::tty: rename pty.ha to pty_common.ha
types::c: initial commit
Move C string funcs from strings to types::c
Remove char from language; add char to types::c
hare::*: remove char
types::c: fix typo
unix: pluralize flag in type names
rt+freebsd: add more signal functions and constants
unix::signal: implement on FreeBSD
Rewrite test runner
fs: fix memory leak
os::exec: fix peekany docs
rt+libc: fix typo
getopt: make switch in README exhaustive
test: print abort_fixed failure location
hare::*: permit C-style variadism with no named params
strconv: give base type a default value
net::unix: replace memcpy with slice assignment
os: use libc exit when linking with libc
os: move status type to separate file
hare::ast: add error_assert_expr
rt: implement shutdown
net: implement shutdown
types::c: add strings test
math::random: add assertions that n != 0
all: reorder tagged union fields to put error last
os::exec: split kill into kill and sig
ascii: allocate new string in strupper+strlower
ascii: consistent capitalization in docs
os::exec+freebsd: use unix::signal::signame
rt: fix typo
types::c: add limits
net: remove slices dependency
contributors.sh: read Co-authored-by
contributors.sh: use git ls-tree instead of find
unix::signal: replace signal type with sig enum
types::c: add tostrn and tostrn_unsafe
temp: require mode param for "file" and "named"
regex: add replacen and rawreplacen
types::c: add nulstr
strconv: recognize - and + in stou*
strconv: improve error messages
strconv: remove zch variable
strconv: append ".0" when float is representable as integer
hare::unparse: add newline between imports and decls
hare::unparse: add README
math::complex: add README
hare::ast: add README
math::checked: initial commit
hare::parse+test: add and use roundtrip_reparse
hare::parse: improve struct/union/enum comments
hare::parse: fix abort in name_list
hare::parse: allow return and yield in more places
Use cap builtin
Remove slices:: and strings::cap
hare::*: remove implicit const flag from functions
hare::lex: add static assertion for bmap length
Don't rely on loose pointer assignability semantics
mime: fix compilation on +libc
format::ini: fix and test error line numbering
test: reset environment before first test is run
Stop using unary +
hare::*: remove unary +
path: fix capitalization of docstring
rt: remove syscallsarch+*.ha
Remove unused imports
Use opaque type
hare::*: add opaque
hare::types: remove builtin_null
math::complex: re-enable test
types::c: remove tables from README
hare::*: add rconst
hare::types: precompute builtin hashes
Remove assignments from f64 to f32
sort: stop using void array
all: take advantage of loosened rune castability rules
path: exclude nul terminator from PATH_MAX
path: remove PATH prefix from constants
crypto: s/SIZE/SZ/g in READMEs
unix::signal+freebsd: add SIGIOT
unix::signal+freebsd: s/POLL/IO/g
types::c: add more static assert tests
time::chrono: return statically-allocated slices
rt: fix getmeta docs
hare::lex: test \x, \u, and \U in strings
Use never type
hare::*: add never and remove @noreturn
os::exec: remove free
os::exec: don't allocate in unsetenv
Remove some unnecessary casts
strings: fix typo
dirs: remove *fs functions
rt: add RLIM_INFINITY
crypto: remove comma after ... in prototypes
hare::types: add VALIST to storage enum
all: make switches exhaustive
os::exec: add check for \0 in value
rt+linux: use iconst for PR_* constants
crypto::bigint: fix unresolved references
io: remove unused strings import
path: statically allocate result
rt: print unknown errno number in strerror/errname
rt: don't add 1 to PATH_MAX
test: reset working directory after every test
time::date: fix typo in docs
math: remove non-u64 popcount variants
hare::parse: add ident_test helper function
hare::parse: measure ident length correctly
hare::parse: improve location in ident length error msg
getopt: remove unnecessary null check
hare deps: remove always true condition
hare::module: improve find error message
unix::tty+freebsd: add noecho
encoding::base*: use slice assignment instead of for-loop
hare::unparse: fix reference in README
all: use os::status in os::exit calls
os: make cpucount return size
bufio: rename old scan* functions to read_*
bufio: update README
fs, os: improve some docs
rt: drop wrap_errno
Remove unnecessary rt::errno->int casts
rt+linux: use sa_family_t for AF_* constants
sort::cmp: initial commit
hare::parse: disallow comma after ... in prototype
hare::parse: disallow comma after ... in array literal
hare::parse: disallow comma after ... in struct literal
hare::parse: disallow comma after ... in call expr
all: don't use invalid UTF-8 in runes
cmd/hare: improve some help text
driver: add -F freestanding flag
hare version: remove machine-readable output
glob: use os:: fs wrappers
glob: recognize escapes in last path component
all: document when strerror statically allocates
getopt: add strerror
glob: add strerror
time::chrono: use static buffer in strerror
time::date: improve parsefail error message
cmd/hare: only allow one ^ in -T
hare.1: update and split up
hare::unparse: overhaul with synfunc
haredoc: refactor to use unparse::syn
hare::unparse: unexport prototype function
haredoc: don't exit early on emit error
haredoc: don't emit escape sequences when NO_COLOR is set
haredoc: distinguish between modules and decls better
haredoc: check symbol of globals
haredoc: allow path to be a file
hare::*: update append/insert parsing
hare::ast: remove default field from match_expr
hare::parse: disallow empty expression lists
hare::unparse: fix inexhaustive match
hare::ast: remove indirect field from assign_expr
hare::parse+test: add more assignment tests
hare::parse+test: use errorfln instead of fatalf
hare::parse: disallow binding/defer outside compound/for
hare::parse+test: add more switch/match case tests
hare::parse+test: test switch/match as unary operand
hare::parse: use objsel for vaarg/vaend operand
hare::unit: pass around pointers
hare::unparse: use strings::tokenizer for comments
hare::ast: pass around pointers
crypto: clarify doc comment
types::c: make schar and uchar not arch specific
hare::*: implement local constant definitions
Revert "time::date: move def to global scope"
Makefile: add more quotes
hare::parse: allow ident for all functions
cmd::hare::build: unexport job
fmt: fix reference in README
io: use writeall for teestream
bufio: document that scan result omits delimiter
cmd/haredoc: fix help text
hare::parse: statically allocate error msg
fs: skip . and .. when iterating
bufio: allow unreading more than scan.readout
haredoc: remove -Fhare
haredoc: show initializer functions for types
haredoc: only show undocumented submodules with -a
haredoc: print message when no decls are exported
hare::*: support top-level static assertions
hare::lex: use top-level static assertion
haredoc: fix memory leak
encoding::pem: restructure decoder
sort: replace rt::memmove with slice assignment
haredoc: fix HAREDOC_COLORS bugs
hare::lex: take in scanner
hare::parse: export ident_trailing
all: add trailing :: to module references in docs
hare::parse::doc: rewrite
hare-doc(5): document trailing :: for modules
scripts/genbootstrap: quote $BINOUT
rt: deduplicate init and fini
glob+test: use == for string equality checks
hare::unparse: pass around pointers
hare::ast: store ptrs in decl_func and decl_type
hare::ast: s/fndecl_attrs/fndecl_attr/g
encoding::utf8: add strerror
strings::template: add invalid type
shlex: add strerror
driver: remove #875 workaround
all: remove self-namespace from doc refs
mime: simplify and improve load_systemdb
os: remove finish
cmd/parsechk: initial commit
time::chrono: drop unused leapsecs parameter
all: fix test failure memory leaks
all: style fix
test: disallow expectabort outside @test
test: implement skip function
crypto: use test::skip
hare::*: remove unused import forms
crypto::sha1: document BLOCKSZ
rt: simplify frame-walking functions
hare cache: exit after printing usage text
encoding::utf8: operate exclusively on byte slices
strings: drop pad functions
strings: use static append where applicable
strings: consistently use fromutf8_unsafe
strings: take direction into account in iterstr
strings: remove duplicate allocation in multireplace
strings: simplify sub
strings: improve docstrings
strings: remove pre-allocation
strings: simplify ltrim and rtrim
bytes: simplify reverse
bytes: replace if expressions with logical and
bytes: improve tests style and add test
cmd/hare: fix memory leaks
test: hexdump non-printable ASCII
wordexp: correctly handle string containing only whitespace
math::complex: clarify isnan behavior
Fix FreeBSD CI
all: update labelled loop syntax
hare::*: support for/switch/match labels
hare::parse+test: add labelled compound test
hare build: only overwrite executable files
hare::ast: s/constant/literal/g
hare::parse: disallow mixing @init, @fini, and @test
ascii: add strlower_buf and strupper_buf
cmd/*: fix memory leaks
memio+test: use defer for closing streams
docs/rfc-template: wrap at 72 columns
path: mention fs::resolve in README
hare::ast: remove inaccurate comment
strings: test concat with only one argument
strings: test join with only one variadic argument
strings: test contains with no variadic arguments
strings: use type assertion in iter tests
hare::parse: improve assign expr error message
rt+linux: fix some types
os+openbsd: remove extra License: header
docs: rename hare-doc(5) to haredoc(5)
haredoc: error out when more than one arg supplied
hare::parse::doc: add docs
all: always use tabs for indentation
getopt: improve docs
hare build: fix order of flags
haredoc: submodules newline fixes
os+linux: s/Unix/Unix-like/
os+linux: add mkfile
hare deps: print more intuitive msg when no deps
test: display special msg when no tests are run
io: improve seek and whence docs
cmd/haredoc: replace split with rtokenize
os: add arch type and functions
haretype: use system architecture
cmd/{hare,haredoc}: Don't allocate tags
cmd/{hare,haredoc}: remove unused imports
time: change signature of *_to_timespec funcs
regex: use types::SIZE_MAX instead of 9999999
rt: add exported syscall function
types::c: minor fix for unterminatedstr docs
types::c: add nullptr_t to README
types::c: add info about unsupported types to README
strings: replace O(n^2) algorithm in rsplitn
hare::module: add rationale for linear search
os::exec: add reference to doc comment
encoding::utf8: minor README fix
time::date: fix weird formatting in doc comment
time::date: add reference to doc comment
unix: document ownership for unix::getgroups
unix: add getpid
unix: add getpid (fix makefiles)
Sebastian LaVine (13):
Provide more descriptive "not implemented" abort messages
hare::ast: Add start, end fields to import
Fix indentation
Rename strings::try_fromutf8 to strings::fromutf8
Add os::status
regex: Document when the caller must free the return value
io: make io::writeall take const []u8
unix::tty: add noncanonical
unix::tty: Add README
strings: Further simplify sub
encoding::utf8: Rename valid() to validate() and change return type
fmt: Fix fmt::mods documentation
strings: Simplify fromutf8
Seedo Paul (1):
gen-stdlib: fix missing dependencies
Sertonix (6):
hash: remove unused fmt dependency
io: bounds check readv/writev
memio: return io::EOF on 0 bytes read
*: remove full module name usage
scripts/genbootstrap: reset platformtags
os: handle errors on file system iteration
Simon Ser (2):
dirs/xdg: ignore relative paths
dirs/xdg: add runtime
Stacy Harper (6):
hare::ast: Make struct_type a struct on its own
Add @packed to lexers/parsers
Add @packed to haredoc
Fix memory leak on os::diropen
Add flock syscalls wrappers
Add inotify syscalls wrappers
Steven Guikal (6):
stdlib: add math::random
math::random: new module
Update more references in READMEs
sort: use binary insertion sort
encoding::base64: new module
encoding::base64: fixup documentation
Sudipto Mallick (10):
strconv: implement f64 to string conversion
fs::rmdirall: relocate repetitive path::join calls
strconv: implement string to floating-point number conversion
hare::lex: fix exponent of floating-point literal
types/limits.ha: fix typo in constants
strconv: implement f32 to string conversion
math/floats.ha: functions and constants related to floats
strings: add ltrim, rtrim and trim
strconv: implement Eisel-Lemire fast float parsing algorithm
Match/switch syntax change in aarch64 specific files in rt/
Thomas Bracht Laumann Jespersen (21):
crypto: Add sha1
crypto/math: Add rot{l,r}64
minor: Fix typos in README.md
crypto: Add sha512
crypto: Add MD5
fs: Change is_something functions to issomething
crypto/curve25519: New module
crypto: testing: use encoding::hex::encodestr()
rt: Add socketpair() syscall (both linux and freebsd)
net/unix: Add socketpair()
bytes: Add hasprefix() and hassuffix()
strings: Rename has_{prefix,suffix} -> has{prefix,suffix}
rt/+freebsd: Rename start*.s files to include -libc
io/stream: Fix syntax in comment
crypto/math: Add constant-time byte slice comparison
encoding/base64: Provide a decoder as an io::stream
encoding/base64: Use error propagation in decodestream_reader()
os/freebsd: Remove duplicate BUFSIZ declaration
hare::parse: free lexer.comment to avoid duplication
rt/+linux/syscalls: fix small typo
encoding/base64: fix partial write bug
Tilman Sauerbeck (2):
hare/lex: Use buffered IO
bufio/scanner: Decode all bytes in the input buffer
Tim Culverhouse (1):
bufio::scan_rune: properly read last 3 bytes
Tobias Heider (1):
OpenBSD: arm64 is called aarch64 in hare
Tom Lebreux (13):
bufio::dynamic: free resources on io::close
hare::module: fix fd leak when walking directories
net::uri: Fix missing fmt::printf arguments
net::uri: surround ipv6 host with [ and ]
net::uri: add ? before query element
net::uri: fix missing // for file uri
net::uri: add fmt tests
fs: add missing cases to strerror
net: add getflags
net: add setname
rt/+linux/socket: add sockaddr_nl
bufio: allow borrowedread up to last byte
linux::keyctl: Add chown and setperm
Tom Regner (3):
strings: splitn: don't add non existing tokens
Fix memory leaks in time::chrono @init
Fix crash when timezone is unspecified
Umar Getagazov (13):
fs::chmod: fix the permission mask
unix: add umask wrapper for Linux
fs, unix::umask: don't clear file mode bits
haredoc: skip reserved directories and non-modules
net::uri: fix documentation reference
haredoc: use uri::parse for link detection
haredoc: multi-line lists, references in lists
contrib: fix copyright.sh
haredoc: fix newline trimming
all: various documentation fixes
haredoc: fix extraneous newline after reference
haredoc: fix lists parsed as text in decl docs
haredoc: don't linkify <word> and comma
Vincent Dagonneau (3):
rt/linux: add {get,set}sid syscalls and a couple of tty related constants.
linux/timerfd: interface for Linux's timerfd
rt/+linux: add execve syscall
Vlad-Stefan Harbuz (58):
Add a variety of float functions to math/floats.ha
Add math.ha and clean up floats.ha
Add trig functions, uint functions and various other math functions
Add strings::replace,padleft,padright,index_string
fix missing case in absi() and signi()
strings: add to_cbuf()
add copyright.sh
copyright.sh: add ability to ignore commits
add regex
fix typo s/nonexistant/nonexistent/
add strptime()
correct datetime::new() docstring
update gen-stdlib
comment out format tests
add ISO8601 format constant
add datetime comparison functions
add print_period()
add period_eq()
add calc_n_days_in_month() and calc_n_days_in_year()
add is_ymd_valid()
add clone()
add is_valid_ymd()
fix bug in calc_yearday()
add calc_epochal_from_yd()
simplify clone()
add calc_epochal_from_ywd()
add long date format options e.g. {year}
remove long format specifiers
remove superfluous specifiers from format()
remove superfluous specifiers from parse()
remove formatting localization TODOs
add arithmetic functions
correct tests, use new chrono::UTC
datetime: add copyright
regex: rename regex_free to regex_finish and have it take pointer, fixes #625
correct regex::find and ::findall docstrings
regex: correct arguments in README
regex: fix line length in README
regex: add some printing to README example to make usage clearer
regex: rename "matchgroup" to "capture"
regex: correct [] usage
regex: update free_*() functions
regex: add test()
regex: add test() example to README
regex: remove now-unused imports
regex: rename regex_finish to finish
ioctlgen: update with regex_finish name change
regex: find/findall/test can no longer error
ioctlgen: update with regex error handling changes
strings::contains: accept multiple needles. Fixes #570
regex: release memory in tests
regex: improve performance
regex: fix subcapture content and add tests
haredoc: break long names on narrow screens
regex: fix typo
regex: clarify returned result in README
regex: add replace() to README
regex: improve README examples
Willow Barraco (2):
rt: Add flock LOCK_NB (and fix LOCK_UN value)
bufio/scanner: fix slice or array access out of bounds
Yasumasa Tada (15):
fnmatch: don't match brackets incorrectly
strio: use io::writeall
glob: new module
glob: consistent style
glob: support NOSORT
glob: handle a leading period correctly
glob: style
glob: handle search failure
glob: support GLOB_NOCHECK
glob: support NOESCAPE
glob: support MARK
glob: handle errors explicitly
glob: rename functions
glob: handle patterns ending with slash
glob: escape characters correctly
grobe0ba (1):
cmd/hare: accept build arguments from environment
iamthenoname (2):
time::chrono: fix memory leak in load_tzif()
unix::passwd: improve getuid and getgid performance
illiliti (14):
make: fix build for bmake
crypto::chacha20: add hchacha20
os::exec: add cmdfile function
hare/module: use buffered io
rt: add missing SIG_* constants
unix::signal: add reset and ignore functions
net::udp: add reuseaddr/reuseport support
crypto::salsa20: add hsalsa20
rt+freebsd: add fstat, AT_EMPTY_PATH, S_IF*
os::exec+freebsd: only open() regular files
os::exec: fix TOCTOU
rt+linux: add low-level io_uring constants and definitions
rt+linux: change io_uring_setup params to accept io_uring_params
rt+linux: add io_uring_enter2
khac (1):
Add math::random::f64rand
lukechampine (2):
crypto::ed25519: add package
crypto::ed25519: fix bugs in point_decode
minus (1):
strings::template: Optimize escaped dollar sign
the lemons (3):
fmt::fatal - exit with 255
path::extension: make the extension begin from the last dot rather than the first
unix::tty: implement pty handling