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