and get rid of contributors.sh. also enforce that license headers are
added in the correct format in ci
Signed-off-by: Ember Sawady <ecs@d2evs.net>
---
v2: add license headers, drop contributors.sh, add copyright.sh + ci
glue. successful build since this makes changes to the ci:
https://builds.sr.ht/~ecs/job/1057882
everything in cmd/ uses gpl, and everything in the stdlib uses mpl with
the exception of a few files in crypto/blowfish which are mit from go
stdlib and hare/parse/doc which is still gpl pending approval to
relicense from yyp and handlerug
.builds/alpine.yml | 3 ++
ascii/ctype.ha | 2 --
ascii/string.ha | 3 +-
ascii/valid.ha | 3 +-
bufio/scanner.ha | 4 +--
bufio/scanner_test+test.ha | 2 ++
bufio/stream.ha | 5 +--
bufio/stream_test+test.ha | 2 ++
bytes/contains.ha | 3 --
bytes/equal.ha | 1 -
bytes/index.ha | 3 --
bytes/reverse.ha | 1 -
bytes/tokenize.ha | 4 +--
bytes/trim.ha | 2 ++
bytes/two_way.ha | 2 +-
bytes/zero.ha | 2 +-
cmd/hare/arch.ha | 2 ++
cmd/hare/build.ha | 2 ++
cmd/hare/build/gather.ha | 2 ++
cmd/hare/build/queue.ha | 2 ++
cmd/hare/build/types.ha | 2 ++
cmd/hare/build/util.ha | 2 ++
cmd/hare/cache.ha | 2 ++
cmd/hare/deps.ha | 2 ++
cmd/hare/error.ha | 2 ++
cmd/hare/main.ha | 3 +-
cmd/hare/util.ha | 2 ++
cmd/hare/version.ha | 2 ++
cmd/harec/context.ha | 3 +-
cmd/harec/errors.ha | 3 +-
cmd/harec/gen.ha | 4 +--
cmd/harec/genutil.ha | 2 +-
cmd/harec/main.ha | 4 +--
cmd/harec/qbe.ha | 3 +-
cmd/harec/qtype.ha | 3 +-
cmd/haredoc/arch.ha | 2 ++
cmd/haredoc/doc/color.ha | 2 +-
cmd/haredoc/doc/hare.ha | 4 +--
cmd/haredoc/doc/html.ha | 6 ----
cmd/haredoc/doc/resolve.ha | 4 +--
cmd/haredoc/doc/sort.ha | 3 +-
cmd/haredoc/doc/tty.ha | 4 +--
cmd/haredoc/doc/types.ha | 3 +-
cmd/haredoc/doc/util.ha | 3 +-
cmd/haredoc/error.ha | 2 ++
cmd/haredoc/main.ha | 5 +--
cmd/haredoc/util.ha | 2 ++
cmd/haretype/main.ha | 2 +-
cmd/ioctlgen/main.ha | 2 ++
contrib/contributors.sh | 48 ----------------------------
crypto/+test/authenc_test.ha | 2 +-
crypto/aes/+test/gcm.ha | 2 ++
crypto/aes/+test/ni_test+x86_64.ha | 2 ++
crypto/aes/+x86_64/ni.ha | 2 ++
crypto/aes/aes+x86_64.ha | 2 +-
crypto/aes/aes.ha | 2 +-
crypto/aes/aes_ct64.ha | 2 --
crypto/aes/block.ha | 2 +-
crypto/aes/cbc+test.ha | 3 +-
crypto/aes/ct64+test.ha | 3 +-
crypto/aes/ctr+test.ha | 3 +-
crypto/aes/rt+test.ha | 3 +-
crypto/aes/xts/+test.ha | 2 +-
crypto/aes/xts/xts.ha | 2 +-
crypto/argon2/+test.ha | 3 +-
crypto/argon2/argon2.ha | 2 ++
crypto/authenc.ha | 3 +-
crypto/bcrypt/+test.ha | 2 ++
crypto/bcrypt/base64.ha | 4 +--
crypto/bcrypt/bcrypt.ha | 4 +--
crypto/bigint/+test/arithm_test.ha | 2 ++
crypto/bigint/+test/encoding_test.ha | 2 ++
crypto/bigint/+test/monty_test.ha | 1 +
crypto/bigint/+test/utils.ha | 2 ++
crypto/bigint/arithm.ha | 2 ++
crypto/bigint/encoding.ha | 2 ++
crypto/bigint/monty.ha | 2 ++
crypto/bigint/types.ha | 2 ++
crypto/bigint/util.ha | 2 ++
crypto/blake2b/+test.ha | 5 +--
crypto/blake2b/blake2b.ha | 4 +--
crypto/blake2b/vectors+test.ha | 1 -
crypto/blowfish/+test.ha | 2 ++
crypto/blowfish/blowfish.ha | 3 +-
crypto/blowfish/const.ha | 2 --
crypto/chacha/+test.ha | 2 +-
crypto/chacha/chacha20.ha | 2 +-
crypto/chachapoly/chachapoly.ha | 2 +-
crypto/chachapoly/encryption+test.ha | 2 +-
crypto/cipher/block.ha | 2 --
crypto/cipher/cbc.ha | 3 +-
crypto/cipher/cipher.ha | 1 -
crypto/cipher/ctr.ha | 3 +-
crypto/cipher/gcm.ha | 2 +-
crypto/cipher/ghash.ha | 2 ++
crypto/cipher/stream.ha | 2 +-
crypto/curve25519/+test.ha | 2 +-
crypto/curve25519/curve25519.ha | 2 +-
crypto/ed25519/+test.ha | 2 +-
crypto/ed25519/ed25519.ha | 1 -
crypto/ed25519/edwards25519.ha | 1 -
crypto/hkdf/+test.ha | 2 +-
crypto/hkdf/hkdf.ha | 2 +-
crypto/hmac/+test.ha | 2 +-
crypto/hmac/hmac.ha | 3 +-
crypto/hmac/sha1.ha | 2 +-
crypto/hmac/sha256.ha | 2 +-
crypto/keyderiv.ha | 2 +-
crypto/keystore/impl+linux.ha | 2 ++
crypto/keystore/impl.ha | 2 ++
crypto/mac/mac.ha | 2 +-
crypto/math/arithm.ha | 3 +-
crypto/math/bits.ha | 3 --
crypto/poly1305/+test.ha | 2 +-
crypto/poly1305/poly1305.ha | 1 -
crypto/random/+freebsd.ha | 3 +-
crypto/random/+linux.ha | 3 +-
crypto/random/random.ha | 3 +-
crypto/rsa/+test/core_test.ha | 2 +-
crypto/rsa/+test/keys_test.ha | 2 +-
crypto/rsa/+test/pkcs1_test.ha | 2 +-
crypto/rsa/core.ha | 2 ++
crypto/rsa/errors.ha | 2 +-
crypto/rsa/keys.ha | 2 +-
crypto/rsa/pkcs1.ha | 2 +-
crypto/salsa/+test.ha | 2 +-
crypto/salsa/salsa20.ha | 2 +-
crypto/sha1/+test.ha | 4 +--
crypto/sha1/sha1.ha | 5 +--
crypto/sha256/+test.ha | 4 +--
crypto/sha256/sha256.ha | 4 +--
crypto/sha512/+test.ha | 4 +--
crypto/sha512/sha512.ha | 6 +---
crypto/x25519/+test.ha | 2 +-
crypto/x25519/x25519.ha | 2 +-
dirs/xdg.ha | 6 +---
encoding/base32/base32.ha | 2 +-
encoding/base64/base64.ha | 7 +---
encoding/hex/hex.ha | 5 +--
encoding/pem/+test.ha | 2 +-
encoding/pem/pem.ha | 2 +-
encoding/utf8/decode.ha | 3 --
encoding/utf8/decodetable.ha | 2 ++
encoding/utf8/encode.ha | 1 -
encoding/utf8/rune.ha | 1 -
endian/big.ha | 2 --
endian/endian.ha | 2 --
endian/host+aarch64.ha | 1 -
endian/host+riscv64.ha | 1 -
endian/host+x86_64.ha | 1 -
endian/little.ha | 2 --
endian/network.ha | 1 -
errors/common.ha | 3 --
errors/opaque.ha | 2 --
errors/rt.ha | 2 +-
errors/string.ha | 2 --
fmt/fmt.ha | 7 +---
fnmatch/+test.ha | 1 -
fnmatch/fnmatch.ha | 7 +---
format/elf/arch+aarch64.ha | 1 -
format/elf/arch+riscv64.ha | 1 -
format/elf/arch+x86_64.ha | 1 -
format/elf/platform+freebsd.ha | 1 -
format/elf/platform+linux.ha | 1 -
format/elf/types.ha | 3 --
format/ini/+test.ha | 2 +-
format/ini/scan.ha | 5 +--
format/ini/types.ha | 4 +--
format/tar/reader.ha | 2 +-
format/tar/types.ha | 2 +-
fs/fs.ha | 8 +----
fs/types.ha | 5 +--
fs/util.ha | 5 +--
getopt/getopts.ha | 7 +---
glob/+test.ha | 2 ++
glob/glob.ha | 2 +-
hare/ast/decl.ha | 3 +-
hare/ast/expr.ha | 4 +--
hare/ast/ident.ha | 4 +--
hare/ast/import.ha | 3 +-
hare/ast/type.ha | 4 +--
hare/ast/unit.ha | 2 --
hare/lex/+test.ha | 7 +---
hare/lex/lex.ha | 7 +---
hare/lex/token.ha | 4 +--
hare/module/cache.ha | 2 ++
hare/module/deps.ha | 2 ++
hare/module/format.ha | 2 ++
hare/module/srcs.ha | 2 ++
hare/module/types.ha | 2 ++
hare/module/util.ha | 2 ++
hare/parse/+test/expr_test.ha | 5 ---
hare/parse/+test/ident_test.ha | 3 +-
hare/parse/+test/loc.ha | 4 +--
hare/parse/+test/roundtrip.ha | 5 +--
hare/parse/+test/types.ha | 1 -
hare/parse/+test/unit_test.ha | 6 +---
hare/parse/decl.ha | 3 +-
hare/parse/doc/doc.ha | 6 +---
hare/parse/expr.ha | 6 +---
hare/parse/ident.ha | 4 +--
hare/parse/import.ha | 3 +-
hare/parse/parse.ha | 5 +--
hare/parse/type.ha | 4 +--
hare/parse/unit.ha | 3 +-
hare/types/+aarch64/writesize.ha | 2 ++
hare/types/+riscv64/writesize.ha | 2 ++
hare/types/+test.ha | 6 +---
hare/types/+x86_64/writesize.ha | 2 ++
hare/types/arch.ha | 1 -
hare/types/builtins.ha | 1 -
hare/types/class.ha | 2 --
hare/types/hash.ha | 3 +-
hare/types/lookup.ha | 3 +-
hare/types/store.ha | 4 +--
hare/types/types.ha | 4 +--
hare/unit/+test.ha | 3 +-
hare/unit/check.ha | 3 +-
hare/unit/context.ha | 2 +-
hare/unit/errors.ha | 2 +-
hare/unit/expr.ha | 2 +-
hare/unit/process.ha | 6 +---
hare/unit/scan.ha | 4 +--
hare/unit/scope.ha | 3 +-
hare/unit/unit.ha | 2 +-
hare/unparse/decl.ha | 5 +--
hare/unparse/expr.ha | 5 +--
hare/unparse/ident.ha | 4 +--
hare/unparse/import.ha | 4 +--
hare/unparse/type.ha | 4 +--
hare/unparse/unit.ha | 3 +-
hare/unparse/util.ha | 3 +-
hash/adler32/adler32.ha | 4 +--
hash/crc16/crc16.ha | 4 +--
hash/crc32/crc32.ha | 4 +--
hash/crc64/crc64.ha | 4 +--
hash/fnv/+aarch64.ha | 2 --
hash/fnv/+riscv64.ha | 2 --
hash/fnv/+x86_64.ha | 2 --
hash/fnv/fnv.ha | 3 +-
hash/hash.ha | 4 +--
hash/siphash/+test.ha | 2 ++
hash/siphash/siphash.ha | 2 ++
io/+freebsd/mmap.ha | 3 +-
io/+freebsd/platform_file.ha | 3 +-
io/+freebsd/vector.ha | 2 +-
io/+linux/mmap.ha | 3 +-
io/+linux/platform_file.ha | 4 +--
io/+linux/vector.ha | 2 +-
io/+test/limit_test.ha | 4 +--
io/+test/stream_test.ha | 2 --
io/arch+aarch64.ha | 1 -
io/arch+riscv64.ha | 1 -
io/arch+x86_64.ha | 1 -
io/copy.ha | 3 +-
io/drain.ha | 3 --
io/empty.ha | 2 --
io/file.ha | 1 +
io/handle.ha | 2 --
io/limit.ha | 3 --
io/stream.ha | 4 +--
io/tee.ha | 2 --
io/types.ha | 3 +-
io/util.ha | 3 --
io/zero.ha | 3 +-
linux/env.ha | 2 +-
linux/keyctl/keyctl.ha | 2 ++
linux/keyctl/types.ha | 2 ++
linux/start+libc.ha | 2 +-
linux/start.ha | 2 +-
linux/timerfd/timerfd.ha | 1 -
linux/vdso/vdso.ha | 4 +--
log/funcs.ha | 2 ++
log/global.ha | 2 ++
log/logger.ha | 2 ++
log/silent.ha | 2 ++
math/+test/data.ha | 2 --
math/+test/floats_test.ha | 2 ++
math/+test/math_test.ha | 2 ++
math/+test/trig_test.ha | 2 ++
math/checked/checked.ha | 2 ++
math/complex/+test.ha | 2 --
math/complex/complex.ha | 2 --
math/fenv+aarch64.ha | 1 -
math/fenv+riscv64.ha | 2 --
math/fenv+x86_64.ha | 1 -
math/fenv_func.ha | 2 +-
math/floats.ha | 6 +---
math/ints.ha | 5 +--
math/math.ha | 3 --
math/random/random.ha | 1 -
math/trig.ha | 1 -
math/uints.ha | 1 -
memio/ops.ha | 4 +--
memio/stream.ha | 5 +--
mime/database.ha | 2 +-
mime/lookup.ha | 2 +-
mime/parse.ha | 2 +-
mime/system.ha | 2 +-
net/+freebsd.ha | 4 +--
net/+linux.ha | 4 +--
net/dial/dial.ha | 2 +-
net/dial/ip.ha | 3 --
net/dial/registry.ha | 3 +-
net/dial/resolve.ha | 3 +-
net/dns/decode.ha | 3 +-
net/dns/encode.ha | 2 +-
net/dns/error.ha | 3 +-
net/dns/query.ha | 2 +-
net/dns/strdomain.ha | 2 +-
net/dns/types.ha | 5 +--
net/errors.ha | 4 +--
net/ip/+freebsd.ha | 3 +-
net/ip/+linux.ha | 4 +--
net/ip/ip.ha | 9 +-----
net/ip/test+test.ha | 6 +---
net/msg.ha | 1 -
net/tcp/+freebsd.ha | 3 +-
net/tcp/+linux.ha | 3 +-
net/tcp/listener.ha | 2 +-
net/tcp/options.ha | 2 +-
net/types.ha | 2 ++
net/udp/+freebsd.ha | 3 +-
net/udp/+linux.ha | 3 +-
net/udp/options.ha | 2 +-
net/unix/+freebsd.ha | 3 +-
net/unix/+linux.ha | 4 +--
net/unix/addr.ha | 2 --
net/unix/cmsg.ha | 2 +-
net/unix/dial.ha | 3 +-
net/unix/listener.ha | 2 +-
net/unix/options.ha | 2 +-
net/unix/socketpair.ha | 3 +-
net/uri/+test.ha | 2 ++
net/uri/fmt.ha | 2 ++
net/uri/parse.ha | 3 +-
net/uri/query.ha | 2 ++
net/uri/uri.ha | 2 ++
os/+freebsd/dirfdfs.ha | 4 +--
os/+freebsd/exit+libc-test.ha | 2 ++
os/+freebsd/exit+test.ha | 1 -
os/+freebsd/exit.ha | 2 +-
os/+freebsd/fs.ha | 3 +-
os/+freebsd/platform_environ.ha | 3 +-
os/+freebsd/status.ha | 2 ++
os/+freebsd/stdfd.ha | 3 +-
os/+linux/dirfdfs.ha | 6 +---
os/+linux/exit+libc-test.ha | 2 ++
os/+linux/exit+test.ha | 1 -
os/+linux/exit.ha | 2 +-
os/+linux/fs.ha | 3 +-
os/+linux/memory.ha | 2 ++
os/+linux/platform_environ.ha | 3 +-
os/+linux/status.ha | 2 ++
os/+linux/stdfd.ha | 3 +-
os/environ.ha | 2 ++
os/exec/cmd.ha | 4 +--
os/exec/exec+freebsd.ha | 3 +-
os/exec/exec+linux.ha | 3 +-
os/exec/process+freebsd.ha | 4 +--
os/exec/process+linux.ha | 4 +--
os/exec/types.ha | 3 +-
os/os.ha | 5 +--
path/+freebsd.ha | 1 -
path/+linux.ha | 1 -
path/buffer.ha | 3 +-
path/error.ha | 2 ++
path/ext_stack.ha | 1 +
path/iter.ha | 4 +--
path/posix.ha | 4 +--
path/prefix.ha | 2 ++
path/stack.ha | 2 +-
regex/+test.ha | 2 +-
regex/regex.ha | 2 +-
rt/+aarch64/arch_jmp.ha | 1 -
rt/+aarch64/backtrace.ha | 3 --
rt/+aarch64/cpuid.ha | 2 ++
rt/+freebsd/+aarch64.ha | 2 ++
rt/+freebsd/+riscv64.ha | 2 ++
rt/+freebsd/+x86_64.ha | 2 ++
rt/+freebsd/env.ha | 1 -
rt/+freebsd/errno.ha | 1 -
rt/+freebsd/platform_abort.ha | 1 -
rt/+freebsd/platformstart.ha | 1 -
rt/+freebsd/segmalloc.ha | 2 --
rt/+freebsd/signal.ha | 1 -
rt/+freebsd/socket.ha | 2 --
rt/+freebsd/syscallno.ha | 1 -
rt/+freebsd/syscalls.ha | 3 --
rt/+freebsd/types.ha | 4 ---
rt/+linux/+aarch64.ha | 3 --
rt/+linux/+riscv64.ha | 3 --
rt/+linux/+x86_64.ha | 2 --
rt/+linux/env.ha | 1 -
rt/+linux/errno.ha | 2 --
rt/+linux/platform_abort.ha | 1 -
rt/+linux/platformstart-libc.ha | 2 --
rt/+linux/prctl.ha | 1 -
rt/+linux/segmalloc.ha | 2 --
rt/+linux/signal.ha | 1 -
rt/+linux/socket.ha | 2 --
rt/+linux/stat.ha | 1 -
rt/+linux/syscallno+aarch64.ha | 1 -
rt/+linux/syscallno+riscv64.ha | 1 -
rt/+linux/syscallno+x86_64.ha | 1 -
rt/+linux/syscalls.ha | 6 ----
rt/+linux/types.ha | 8 -----
rt/+riscv64/arch_jmp.ha | 1 -
rt/+riscv64/backtrace.ha | 2 --
rt/+riscv64/cpuid.ha | 2 ++
rt/+riscv64/fenv.s | 3 --
rt/+test/signal_test.ha | 1 -
rt/+x86_64/arch_jmp.ha | 1 -
rt/+x86_64/backtrace.ha | 3 --
rt/+x86_64/cpuid.ha | 2 ++
rt/abort+test.ha | 2 --
rt/abort.ha | 1 -
rt/ensure.ha | 2 --
rt/fenv_defs.ha | 1 -
rt/jmp.ha | 1 -
rt/malloc+debug.ha | 1 -
rt/malloc+libc.ha | 1 -
rt/malloc.ha | 2 ++
rt/memcpy.ha | 1 -
rt/memmove.ha | 1 -
rt/memset.ha | 1 -
rt/start+libc.ha | 1 -
rt/start+test+libc.ha | 1 -
rt/start+test.ha | 1 -
rt/start.ha | 2 --
rt/strcmp.ha | 1 -
rt/u64tos.ha | 2 ++
rt/unknown_errno.ha | 2 ++
scripts/copyright.sh | 30 +++++++++++++++++
shlex/+test.ha | 3 +-
shlex/escape.ha | 3 +-
shlex/split.ha | 3 +-
sort/+test.ha | 2 --
sort/bisect.ha | 1 -
sort/cmp/cmp.ha | 2 ++
sort/search.ha | 1 -
sort/sort.ha | 2 --
sort/types.ha | 1 -
strconv/+test/stoi_test.ha | 5 +--
strconv/+test/stou_test.ha | 3 --
strconv/ftos.ha | 6 ----
strconv/ftostof+test.ha | 2 ++
strconv/itos.ha | 4 +--
strconv/numeric.ha | 3 +-
strconv/stof.ha | 3 --
strconv/stof_data.ha | 1 -
strconv/stoi.ha | 5 +--
strconv/stou.ha | 4 +--
strconv/types.ha | 3 --
strconv/utos.ha | 4 +--
strings/compare.ha | 2 ++
strings/concat.ha | 1 -
strings/contains.ha | 4 +--
strings/dup.ha | 5 +--
strings/index.ha | 4 +--
strings/iter.ha | 6 +---
strings/pad.ha | 2 +-
strings/replace.ha | 2 --
strings/runes.ha | 2 +-
strings/sub.ha | 5 +--
strings/suffix.ha | 4 +--
strings/template/template.ha | 2 +-
strings/tokenize.ha | 5 +--
strings/trim.ha | 5 +--
strings/utf8.ha | 2 +-
temp/+freebsd.ha | 5 +--
temp/+linux.ha | 5 +--
test/+test.ha | 2 ++
test/common.ha | 2 ++
test/fail+test.ha | 2 ++
time/+freebsd/functions.ha | 3 +-
time/+linux/+aarch64.ha | 1 -
time/+linux/+riscv64.ha | 1 -
time/+linux/+x86_64.ha | 1 -
time/+linux/functions.ha | 4 +--
time/arithm.ha | 3 +-
time/chrono/+freebsd.ha | 1 -
time/chrono/+linux.ha | 1 -
time/chrono/arithmetic.ha | 2 +-
time/chrono/chronology.ha | 2 +-
time/chrono/error.ha | 2 +-
time/chrono/leapsec.ha | 2 +-
time/chrono/timescale.ha | 2 +-
time/chrono/timezone.ha | 2 +-
time/chrono/tzdb.ha | 2 +-
time/conv.ha | 2 ++
time/date/date.ha | 3 +-
time/date/daydate.ha | 2 --
time/date/daytime.ha | 2 +-
time/date/error.ha | 1 -
time/date/format.ha | 4 +--
time/date/locality.ha | 3 +-
time/date/observe.ha | 2 +-
time/date/parithm.ha | 4 +--
time/date/parse.ha | 4 +--
time/date/period.ha | 1 -
time/date/reckon.ha | 2 +-
time/date/tarithm.ha | 2 +-
time/date/virtual.ha | 2 +-
time/types.ha | 3 +-
types/arch+aarch64.ha | 1 -
types/arch+riscv64.ha | 1 -
types/arch+x86_64.ha | 1 -
types/c/+test.ha | 2 ++
types/c/arch+aarch64.ha | 2 ++
types/c/arch+riscv64.ha | 2 ++
types/c/arch+x86_64.ha | 2 ++
types/c/strings.ha | 2 ++
types/c/types.ha | 2 ++
types/classes.ha | 1 -
types/limits.ha | 2 --
unix/+freebsd/getuid.ha | 2 +-
unix/+freebsd/groups.ha | 2 ++
unix/+freebsd/nice.ha | 3 +-
unix/+freebsd/pipe.ha | 3 +-
unix/+freebsd/setuid.ha | 3 +-
unix/+freebsd/umask.ha | 2 +-
unix/+linux/getuid.ha | 2 +-
unix/+linux/groups.ha | 2 ++
unix/+linux/nice.ha | 3 +-
unix/+linux/pipe.ha | 2 +-
unix/+linux/setuid.ha | 3 +-
unix/+linux/umask.ha | 3 +-
unix/hosts/+freebsd.ha | 1 -
unix/hosts/+linux.ha | 1 -
unix/hosts/hosts.ha | 5 +--
unix/hosts/test+test.ha | 2 +-
unix/passwd/group.ha | 4 +--
unix/passwd/passwd.ha | 4 +--
unix/passwd/types.ha | 2 --
unix/poll/+freebsd.ha | 3 +-
unix/poll/+linux.ha | 3 +-
unix/poll/types.ha | 2 ++
unix/resolvconf/+freebsd.ha | 1 -
unix/resolvconf/+linux.ha | 1 -
unix/resolvconf/load.ha | 4 +--
unix/signal/+freebsd.ha | 2 ++
unix/signal/+linux.ha | 2 +-
unix/signal/types.ha | 1 -
unix/tty/+freebsd/isatty.ha | 3 +-
unix/tty/+freebsd/open.ha | 3 +-
unix/tty/+freebsd/pty.ha | 2 +-
unix/tty/+freebsd/termios.ha | 3 +-
unix/tty/+freebsd/winsize.ha | 3 +-
unix/tty/+linux/isatty.ha | 5 +--
unix/tty/+linux/open.ha | 5 +--
unix/tty/+linux/pty.ha | 2 +-
unix/tty/+linux/termios.ha | 3 +-
unix/tty/+linux/winsize.ha | 4 +--
unix/tty/pty_common.ha | 2 ++
unix/tty/types.ha | 4 +--
uuid/uuid.ha | 4 +--
557 files changed, 533 insertions(+), 996 deletions(-)
delete mode 100755 contrib/contributors.sh
create mode 100755 scripts/copyright.sh
diff --git a/.builds/alpine.yml b/.builds/alpine.yml
index 0dec402f..685218b4 100644
--- a/.builds/alpine.yml
+++ b/.builds/alpine.yml
@@ -44,6 +44,9 @@ tasks:
- check_with_libc: |
cd hare
.bin/hare-tests-libc
+- copyright: |
+ cd hare
+ ./scripts/copyright.sh
- docs: |
if [ $BUILD_SUBMITTER != "git.sr.ht" ]
then
diff --git a/ascii/ctype.ha b/ascii/ctype.ha
index 356ec215..5440d869 100644
--- a/ascii/ctype.ha
+++ b/ascii/ctype.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
def U: u8 = 0o1;
def L: u8 = 0o2;
diff --git a/ascii/string.ha b/ascii/string.ha
index c006c1c1..84ee12a1 100644
--- a/ascii/string.ha
+++ b/ascii/string.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use encoding::utf8;
use strings;
diff --git a/ascii/valid.ha b/ascii/valid.ha
index 2859cc2a..73be4a83 100644
--- a/ascii/valid.ha
+++ b/ascii/valid.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
-// (c) 2021 Drew Devault <sir@cmpwn.com>
+
use strings;
// Returns true if a rune is a valid ASCII character.
diff --git a/bufio/scanner.ha b/bufio/scanner.ha
index 31d4e188..4eda17d5 100644
--- a/bufio/scanner.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2023 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2023 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use encoding::utf8;
use errors;
diff --git a/bufio/scanner_test+test.ha b/bufio/scanner_test+test.ha
index 5cdb380c..730ea128 100644
--- a/bufio/scanner_test+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use encoding::utf8;
use io;
diff --git a/bufio/stream.ha b/bufio/stream.ha
index e787429d..d58bc53e 100644
--- a/bufio/stream.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use encoding::utf8;
use errors;
diff --git a/bufio/stream_test+test.ha b/bufio/stream_test+test.ha
index 2a6a50b4..f40bbf05 100644
--- a/bufio/stream_test+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use io;
use memio;
diff --git a/bytes/contains.ha b/bytes/contains.ha
index 295c25e7..6cb6cae1 100644
--- a/bytes/contains.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
// Returns true if a byte slice contains a byte or a sequence of bytes.
export fn contains(haystack: []u8, needles: (u8 | []u8)...) bool = {
diff --git a/bytes/equal.ha b/bytes/equal.ha
index 2d70c91b..e6a952e7 100644
--- a/bytes/equal.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Returns true if the two byte sequences are identical.
//
diff --git a/bytes/index.ha b/bytes/index.ha
index ac3e581c..de765e80 100644
--- a/bytes/index.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Returns the offset of the first instance of "needle" in a "haystack" of
// bytes, or void if it is not found.
diff --git a/bytes/reverse.ha b/bytes/reverse.ha
index d0d7f5cf..494400f6 100644
--- a/bytes/reverse.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Reverses a slice of bytes.
export fn reverse(b: []u8) void = {
diff --git a/bytes/tokenize.ha b/bytes/tokenize.ha
index 01ce6597..44254c55 100644
--- a/bytes/tokenize.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use types;
export type tokenizer = struct {
diff --git a/bytes/trim.ha b/bytes/trim.ha
index 77f5cd72..d40fd768 100644
--- a/bytes/trim.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// Returns a slice (borrowed from given input slice) after trimming off of
// the start of the input slice the bytes in the given list.
export fn ltrim(in: []u8, trim: u8...) []u8 = {
diff --git a/bytes/two_way.ha b/bytes/two_way.ha
index e37ea2c9..3d5f6623 100644
--- a/bytes/two_way.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
+
use types;
// Implements the so called Two-way string matching algorithm by Crochemore and
diff --git a/bytes/zero.ha b/bytes/zero.ha
index 5924094b..e0b07c0a 100644
--- a/bytes/zero.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use rt;
// Sets all bytes in a slice to zero. This is suitable for erasing private data
diff --git a/cmd/hare/arch.ha b/cmd/hare/arch.ha
index b9328ef4..880874f9 100644
--- a/cmd/hare/arch.ha
+++ b/cmd/hare/arch.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use hare::module;
use os;
use strings;
diff --git a/cmd/hare/build.ha b/cmd/hare/build.ha
index fa55878d..8966d151 100644
--- a/cmd/hare/build.ha
+++ b/cmd/hare/build.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use cmd::hare::build;
use errors;
use fmt;
diff --git a/cmd/hare/build/gather.ha b/cmd/hare/build/gather.ha
index 7811375f..7c6a4611 100644
--- a/cmd/hare/build/gather.ha
+++ b/cmd/hare/build/gather.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use fs;
use hare::ast;
use hare::module;
diff --git a/cmd/hare/build/queue.ha b/cmd/hare/build/queue.ha
index 26b03acd..50782535 100644
--- a/cmd/hare/build/queue.ha
+++ b/cmd/hare/build/queue.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use crypto::sha256;
use encoding::hex;
use errors;
diff --git a/cmd/hare/build/types.ha b/cmd/hare/build/types.ha
index 34461b6a..0dbded53 100644
--- a/cmd/hare/build/types.ha
+++ b/cmd/hare/build/types.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use crypto::sha256;
use fs;
use hare::ast;
diff --git a/cmd/hare/build/util.ha b/cmd/hare/build/util.ha
index f421699c..da554175 100644
--- a/cmd/hare/build/util.ha
+++ b/cmd/hare/build/util.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use crypto::sha256;
use fmt;
use hare::ast;
diff --git a/cmd/hare/cache.ha b/cmd/hare/cache.ha
index 1a71e1ab..12b96f48 100644
--- a/cmd/hare/cache.ha
+++ b/cmd/hare/cache.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use fmt;
use fs;
use getopt;
diff --git a/cmd/hare/deps.ha b/cmd/hare/deps.ha
index fe45ead3..06e80fce 100644
--- a/cmd/hare/deps.ha
+++ b/cmd/hare/deps.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use fmt;
use getopt;
use hare::ast;
diff --git a/cmd/hare/error.ha b/cmd/hare/error.ha
index c3d70d74..cf433c15 100644
--- a/cmd/hare/error.ha
+++ b/cmd/hare/error.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use fs;
use hare::module;
use hare::parse;
diff --git a/cmd/hare/main.ha b/cmd/hare/main.ha
index c4d67ce7..164a1cae 100644
--- a/cmd/hare/main.ha
+++ b/cmd/hare/main.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use fs;
use getopt;
diff --git a/cmd/hare/util.ha b/cmd/hare/util.ha
index f7d8f86e..04ee87a6 100644
--- a/cmd/hare/util.ha
+++ b/cmd/hare/util.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use ascii;
use dirs;
use errors;
diff --git a/cmd/hare/version.ha b/cmd/hare/version.ha
index 44f05712..08a91338 100644
--- a/cmd/hare/version.ha
+++ b/cmd/hare/version.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use ascii;
use bufio;
use fmt;
diff --git a/cmd/harec/context.ha b/cmd/harec/context.ha
index 30002db7..6b4213b7 100644
--- a/cmd/harec/context.ha
+++ b/cmd/harec/context.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use io;
use hare::types;
use hare::unit;
diff --git a/cmd/harec/errors.ha b/cmd/harec/errors.ha
index d5b8f40f..cfa78399 100644
--- a/cmd/harec/errors.ha
+++ b/cmd/harec/errors.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use fmt;
use hare::lex;
diff --git a/cmd/harec/gen.ha b/cmd/harec/gen.ha
index f078febe..e7176c55 100644
--- a/cmd/harec/gen.ha
+++ b/cmd/harec/gen.ha
@@ -1,7 +1,5 @@
// License: GPL-3.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use hare::ast;
use hare::lex;
diff --git a/cmd/harec/genutil.ha b/cmd/harec/genutil.ha
index 1cb61695..5be32e61 100644
--- a/cmd/harec/genutil.ha
+++ b/cmd/harec/genutil.ha
@@ -1,5 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use fmt;
fn mklabel(ctx: *context, name: str) str = {
diff --git a/cmd/harec/main.ha b/cmd/harec/main.ha
index d3835090..b05bba65 100644
--- a/cmd/harec/main.ha
+++ b/cmd/harec/main.ha
@@ -1,7 +1,5 @@
// License: GPL-3.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use fmt;
use fs;
diff --git a/cmd/harec/qbe.ha b/cmd/harec/qbe.ha
index bc0fe289..c14dfdd6 100644
--- a/cmd/harec/qbe.ha
+++ b/cmd/harec/qbe.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use io;
use hare::types;
diff --git a/cmd/harec/qtype.ha b/cmd/harec/qtype.ha
index 601a10c0..944f6a77 100644
--- a/cmd/harec/qtype.ha
+++ b/cmd/harec/qtype.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use hare::types;
use hare::types::{builtin};
diff --git a/cmd/haredoc/arch.ha b/cmd/haredoc/arch.ha
index 81769ea5..c77663aa 100644
--- a/cmd/haredoc/arch.ha
+++ b/cmd/haredoc/arch.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use hare::module;
use os;
use strings;
diff --git a/cmd/haredoc/doc/color.ha b/cmd/haredoc/doc/color.ha
index 9b8497e0..c8356fe9 100644
--- a/cmd/haredoc/doc/color.ha
+++ b/cmd/haredoc/doc/color.ha
@@ -1,5 +1,5 @@
// License: GPL-3.0
-// (c) 2022 Byron Torres <b@torresjrjr.com>
+
use ascii;
use fmt;
use io;
diff --git a/cmd/haredoc/doc/hare.ha b/cmd/haredoc/doc/hare.ha
index 9b8e8333..5ac953af 100644
--- a/cmd/haredoc/doc/hare.ha
+++ b/cmd/haredoc/doc/hare.ha
@@ -1,7 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use fmt;
use hare::ast;
diff --git a/cmd/haredoc/doc/html.ha b/cmd/haredoc/doc/html.ha
index 79488e48..e9e53317 100644
--- a/cmd/haredoc/doc/html.ha
+++ b/cmd/haredoc/doc/html.ha
@@ -1,10 +1,4 @@
// License: GPL-3.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Byron Torres <b@torresjrjr.com>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
-// (c) 2022 Umar Getagazov <umar@handlerug.me>
// Note: ast::ident should never have to be escaped
use encoding::utf8;
diff --git a/cmd/haredoc/doc/resolve.ha b/cmd/haredoc/doc/resolve.ha
index f113d6b5..cd1e20ca 100644
--- a/cmd/haredoc/doc/resolve.ha
+++ b/cmd/haredoc/doc/resolve.ha
@@ -1,7 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
+
use fmt;
use fs;
use hare::ast;
diff --git a/cmd/haredoc/doc/sort.ha b/cmd/haredoc/doc/sort.ha
index b3deb38f..5e0fa8ed 100644
--- a/cmd/haredoc/doc/sort.ha
+++ b/cmd/haredoc/doc/sort.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
use sort;
use strings;
diff --git a/cmd/haredoc/doc/tty.ha b/cmd/haredoc/doc/tty.ha
index 744e582e..82381489 100644
--- a/cmd/haredoc/doc/tty.ha
+++ b/cmd/haredoc/doc/tty.ha
@@ -1,7 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use ascii;
use bufio;
use fmt;
diff --git a/cmd/haredoc/doc/types.ha b/cmd/haredoc/doc/types.ha
index 8398f6e3..232f7081 100644
--- a/cmd/haredoc/doc/types.ha
+++ b/cmd/haredoc/doc/types.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fs;
use hare::ast;
use hare::lex;
diff --git a/cmd/haredoc/doc/util.ha b/cmd/haredoc/doc/util.ha
index d6016539..ad652cbd 100644
--- a/cmd/haredoc/doc/util.ha
+++ b/cmd/haredoc/doc/util.ha
@@ -1,6 +1,5 @@
// License: GPL-3.0
-// (c) 2022 Byron Torres <b@torresjrjr.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use fmt;
use fs;
use hare::module;
diff --git a/cmd/haredoc/error.ha b/cmd/haredoc/error.ha
index 9bcf6f1d..10072d10 100644
--- a/cmd/haredoc/error.ha
+++ b/cmd/haredoc/error.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use cmd::haredoc::doc;
use fs;
use hare::module;
diff --git a/cmd/haredoc/main.ha b/cmd/haredoc/main.ha
index c6919dce..d777655d 100644
--- a/cmd/haredoc/main.ha
+++ b/cmd/haredoc/main.ha
@@ -1,8 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use cmd::haredoc::doc;
use fmt;
use fs;
diff --git a/cmd/haredoc/util.ha b/cmd/haredoc/util.ha
index fdd9e603..85cfb066 100644
--- a/cmd/haredoc/util.ha
+++ b/cmd/haredoc/util.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use ascii;
use dirs;
use errors;
diff --git a/cmd/haretype/main.ha b/cmd/haretype/main.ha
index 4e243a6e..199314da 100644
--- a/cmd/haretype/main.ha
+++ b/cmd/haretype/main.ha
@@ -1,5 +1,5 @@
// License: GPL-3.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use fmt;
use getopt;
use hare::ast;
diff --git a/cmd/ioctlgen/main.ha b/cmd/ioctlgen/main.ha
index 497e7942..dcad2ecb 100644
--- a/cmd/ioctlgen/main.ha
+++ b/cmd/ioctlgen/main.ha
@@ -1,3 +1,5 @@
+// License: GPL-3.0
+
use bufio;
use fmt;
use hare::ast;
diff --git a/contrib/contributors.sh b/contrib/contributors.sh
deleted file mode 100755
index 8b107a14..00000000
--- a/contrib/contributors.sh
@@ -1,48 +0,0 @@
-#!/bin/sh -eu
-
-authors=
-commits=
-
-while true; do
- files=${1:-.}
- if [ -d "$files" ]; then
- files=$(git ls-tree -r --name-only HEAD "$files")
- files=$(printf '%s' "$files" | grep -E '(\.(ha|s)|(^|/)README)$')
- fi
-
- for file in $files; do
- authorinfo=$(git blame "$file" --porcelain --incremental)
-
- # Format as: Author Name <test@example.com>
- while read -r line; do
- if printf '%s' "$line" | grep -qE '^[0-9a-f]{40} \d+ \d+ \d+$'; then
- commits=$(printf '%s\n%s' "$commits" \
- "$(printf '%s' "$line" | cut -d' ' -f1)")
- continue
- fi
- case "$line" in
- "author "*) author=$(printf '%s' "$line" | sed 's/author //') ;;
- "author-mail "*) mail=$(printf '%s' "$line" | sed 's/author-mail //') ;;
- "filename "*) authors=$(printf '%s\n%s' "$authors" "$author $mail") ;;
- *) ;;
- esac
- done << EOF
- $authorinfo
-EOF
- done
-
- if [ $# -eq 1 ]; then
- break
- fi
- shift 1
-done
-
-# Get co-authors of commits
-for commit in $(printf '%s' "$commits" | sort -u); do
- coauthors=$(git show "$commit" | grep '^ Co-authored-by:' \
- | sed 's/ Co-authored-by: *//g')
- authors=$(printf '%s\n%s' "$authors" "$coauthors")
-done
-
-# Get only the unique author names
-printf '%s\n' "$authors" | tail -n+2 | sort -u
diff --git a/crypto/+test/authenc_test.ha b/crypto/+test/authenc_test.ha
index 61c70426..90f65d8d 100644
--- a/crypto/+test/authenc_test.ha
+++ b/crypto/+test/authenc_test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use errors;
diff --git a/crypto/aes/+test/gcm.ha b/crypto/aes/+test/gcm.ha
index 30770be8..5f94aad9 100644
--- a/crypto/aes/+test/gcm.ha
+++ b/crypto/aes/+test/gcm.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use crypto::cipher;
use errors;
diff --git a/crypto/aes/+test/ni_test+x86_64.ha b/crypto/aes/+test/ni_test+x86_64.ha
index 5e05695b..cd7daf4c 100644
--- a/crypto/aes/+test/ni_test+x86_64.ha
+++ b/crypto/aes/+test/ni_test+x86_64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use crypto::cipher;
diff --git a/crypto/aes/+x86_64/ni.ha b/crypto/aes/+x86_64/ni.ha
index 4da5e584..eee560d9 100644
--- a/crypto/aes/+x86_64/ni.ha
+++ b/crypto/aes/+x86_64/ni.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use crypto::cipher;
use rt;
diff --git a/crypto/aes/aes+x86_64.ha b/crypto/aes/aes+x86_64.ha
index 029ca59f..813d6173 100644
--- a/crypto/aes/aes+x86_64.ha
+++ b/crypto/aes/aes+x86_64.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use crypto::cipher;
def MAXEXPKEYSZ: size = CT64_EXPKEYSZ;
diff --git a/crypto/aes/aes.ha b/crypto/aes/aes.ha
index 985496db..6de4cbea 100644
--- a/crypto/aes/aes.ha
+++ b/crypto/aes/aes.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use crypto::cipher;
def MAXEXPKEYSZ: size = CT64_EXPKEYSZ;
diff --git a/crypto/aes/aes_ct64.ha b/crypto/aes/aes_ct64.ha
index 985b7e53..3d2c6bbb 100644
--- a/crypto/aes/aes_ct64.ha
+++ b/crypto/aes/aes_ct64.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Constant time aes implementation optimized for 64bit CPUs.
// The code was ported from BearSSL, which contained the following notice:
diff --git a/crypto/aes/block.ha b/crypto/aes/block.ha
index 1ebc11ec..c0bf2d05 100644
--- a/crypto/aes/block.ha
+++ b/crypto/aes/block.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::cipher;
diff --git a/crypto/aes/cbc+test.ha b/crypto/aes/cbc+test.ha
index ca61cf2e..21dd2257 100644
--- a/crypto/aes/cbc+test.ha
+++ b/crypto/aes/cbc+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use crypto::cipher;
use bytes;
diff --git a/crypto/aes/ct64+test.ha b/crypto/aes/ct64+test.ha
index a8b11172..495d1458 100644
--- a/crypto/aes/ct64+test.ha
+++ b/crypto/aes/ct64+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use crypto::cipher;
use bytes;
diff --git a/crypto/aes/ctr+test.ha b/crypto/aes/ctr+test.ha
index 41a8641d..57cd0f9f 100644
--- a/crypto/aes/ctr+test.ha
+++ b/crypto/aes/ctr+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use crypto::cipher;
use errors;
diff --git a/crypto/aes/rt+test.ha b/crypto/aes/rt+test.ha
index fffdb8ba..1a9a126f 100644
--- a/crypto/aes/rt+test.ha
+++ b/crypto/aes/rt+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use crypto::cipher;
use bytes;
diff --git a/crypto/aes/xts/+test.ha b/crypto/aes/xts/+test.ha
index 5c5fb781..0f0f5cc3 100644
--- a/crypto/aes/xts/+test.ha
+++ b/crypto/aes/xts/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
@test fn oneblock() void = {
diff --git a/crypto/aes/xts/xts.ha b/crypto/aes/xts/xts.ha
index 1ad2daee..613f6fb6 100644
--- a/crypto/aes/xts/xts.ha
+++ b/crypto/aes/xts/xts.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use crypto::aes;
use bytes;
use crypto::cipher;
diff --git a/crypto/argon2/+test.ha b/crypto/argon2/+test.ha
index 0e997c21..4e413da7 100644
--- a/crypto/argon2/+test.ha
+++ b/crypto/argon2/+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use encoding::hex;
use strings;
diff --git a/crypto/argon2/argon2.ha b/crypto/argon2/argon2.ha
index 219b34e2..c0a31857 100644
--- a/crypto/argon2/argon2.ha
+++ b/crypto/argon2/argon2.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// (c) 2022 Alexey Yerin <yyp@disroot.org>
// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
diff --git a/crypto/authenc.ha b/crypto/authenc.ha
index 004f18a1..9cb0c753 100644
--- a/crypto/authenc.ha
+++ b/crypto/authenc.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2023 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use crypto::chachapoly;
use crypto::math;
diff --git a/crypto/bcrypt/+test.ha b/crypto/bcrypt/+test.ha
index d1d98a5a..70bf2716 100644
--- a/crypto/bcrypt/+test.ha
+++ b/crypto/bcrypt/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use strings;
use fmt;
diff --git a/crypto/bcrypt/base64.ha b/crypto/bcrypt/base64.ha
index f9e2276b..3c3d28a5 100644
--- a/crypto/bcrypt/base64.ha
+++ b/crypto/bcrypt/base64.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2011 The Go Authors
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
-//
+
// bcrypt uses a crappy variant of base64 with its own special alphabet and no
// padding. This file glues encoding::base64 to the bcrypt semantics.
use encoding::base64;
diff --git a/crypto/bcrypt/bcrypt.ha b/crypto/bcrypt/bcrypt.ha
index 9b22c713..03dae123 100644
--- a/crypto/bcrypt/bcrypt.ha
+++ b/crypto/bcrypt/bcrypt.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2011 The Go Authors
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
-//
+
// This implementation is not great, but neither is this algorithm. Mostly
// ported from Go.
//
diff --git a/crypto/bigint/+test/arithm_test.ha b/crypto/bigint/+test/arithm_test.ha
index 29930acd..7d57b038 100644
--- a/crypto/bigint/+test/arithm_test.ha
+++ b/crypto/bigint/+test/arithm_test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
@test fn add() void = {
diff --git a/crypto/bigint/+test/encoding_test.ha b/crypto/bigint/+test/encoding_test.ha
index 6c7c013a..e952173e 100644
--- a/crypto/bigint/+test/encoding_test.ha
+++ b/crypto/bigint/+test/encoding_test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
@test fn encode() void = {
diff --git a/crypto/bigint/+test/monty_test.ha b/crypto/bigint/+test/monty_test.ha
index bc7e9157..e7d9a6cb 100644
--- a/crypto/bigint/+test/monty_test.ha
+++ b/crypto/bigint/+test/monty_test.ha
@@ -1,3 +1,4 @@
+// License: MPL-2.0
@test fn montyencode() void = {
let m = fromhex("0010000061");
diff --git a/crypto/bigint/+test/utils.ha b/crypto/bigint/+test/utils.ha
index 9473e934..3dac95f3 100644
--- a/crypto/bigint/+test/utils.ha
+++ b/crypto/bigint/+test/utils.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use encoding::hex;
// The caller must free the result.
diff --git a/crypto/bigint/arithm.ha b/crypto/bigint/arithm.ha
index c8967bd5..a046424f 100644
--- a/crypto/bigint/arithm.ha
+++ b/crypto/bigint/arithm.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/bigint/encoding.ha b/crypto/bigint/encoding.ha
index f3892aec..81e90977 100644
--- a/crypto/bigint/encoding.ha
+++ b/crypto/bigint/encoding.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/bigint/monty.ha b/crypto/bigint/monty.ha
index 78fb4451..dc36a3ab 100644
--- a/crypto/bigint/monty.ha
+++ b/crypto/bigint/monty.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/bigint/types.ha b/crypto/bigint/types.ha
index 85f4a283..c44a53fd 100644
--- a/crypto/bigint/types.ha
+++ b/crypto/bigint/types.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// A big integer is stored in an array of words. The first word holds
// information about the effective size of the big integer. The subsequend
// words encode the value in little-endian order. The [[WORD_BITMASK]] masks the
diff --git a/crypto/bigint/util.ha b/crypto/bigint/util.ha
index 7fa657db..23c86283 100644
--- a/crypto/bigint/util.ha
+++ b/crypto/bigint/util.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/blake2b/+test.ha b/crypto/blake2b/+test.ha
index 6a670c43..eb188a20 100644
--- a/crypto/blake2b/+test.ha
+++ b/crypto/blake2b/+test.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use encoding::hex;
use fmt;
diff --git a/crypto/blake2b/blake2b.ha b/crypto/blake2b/blake2b.ha
index 1a43ed59..01439aa9 100644
--- a/crypto/blake2b/blake2b.ha
+++ b/crypto/blake2b/blake2b.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use crypto::math;
use endian;
diff --git a/crypto/blake2b/vectors+test.ha b/crypto/blake2b/vectors+test.ha
index c929592f..c918841a 100644
--- a/crypto/blake2b/vectors+test.ha
+++ b/crypto/blake2b/vectors+test.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
type vector = struct {
in: str,
diff --git a/crypto/blowfish/+test.ha b/crypto/blowfish/+test.ha
index f1508f9d..33c39d1c 100644
--- a/crypto/blowfish/+test.ha
+++ b/crypto/blowfish/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use crypto::cipher;
diff --git a/crypto/blowfish/blowfish.ha b/crypto/blowfish/blowfish.ha
index d8441de4..5d400f05 100644
--- a/crypto/blowfish/blowfish.ha
+++ b/crypto/blowfish/blowfish.ha
@@ -1,7 +1,6 @@
-// License: MPL-2.0
// License: MIT
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
// (c) 2010 The Go Authors. All rights reserved.
+
use bytes;
use crypto::cipher;
use endian;
diff --git a/crypto/blowfish/const.ha b/crypto/blowfish/const.ha
index da331e0d..8882a6b9 100644
--- a/crypto/blowfish/const.ha
+++ b/crypto/blowfish/const.ha
@@ -1,6 +1,4 @@
-// License: MPL-2.0
// License: MIT
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
// (c) 2010 The Go Authors. All rights reserved.
const s0: [256]u32 = [
diff --git a/crypto/chacha/+test.ha b/crypto/chacha/+test.ha
index 0a66bb1f..667a7c01 100644
--- a/crypto/chacha/+test.ha
+++ b/crypto/chacha/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::cipher;
use io;
diff --git a/crypto/chacha/chacha20.ha b/crypto/chacha/chacha20.ha
index 3792d7c6..cd8cbd91 100644
--- a/crypto/chacha/chacha20.ha
+++ b/crypto/chacha/chacha20.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::cipher;
use crypto::math::{rotl32, xor};
diff --git a/crypto/chachapoly/chachapoly.ha b/crypto/chachapoly/chachapoly.ha
index 4e1f4f9e..6cafbb11 100644
--- a/crypto/chachapoly/chachapoly.ha
+++ b/crypto/chachapoly/chachapoly.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::chacha;
use crypto::mac;
diff --git a/crypto/chachapoly/encryption+test.ha b/crypto/chachapoly/encryption+test.ha
index 458afca2..35b9cf8e 100644
--- a/crypto/chachapoly/encryption+test.ha
+++ b/crypto/chachapoly/encryption+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use io;
use memio;
diff --git a/crypto/cipher/block.ha b/crypto/cipher/block.ha
index e39df528..5a99f50b 100644
--- a/crypto/cipher/block.ha
+++ b/crypto/cipher/block.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// An abstract interface for implementing block ciphers.
export type blockvtable = struct {
diff --git a/crypto/cipher/cbc.ha b/crypto/cipher/cbc.ha
index a6785396..9e614688 100644
--- a/crypto/cipher/cbc.ha
+++ b/crypto/cipher/cbc.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use crypto::math;
export type cbc_mode = struct {
diff --git a/crypto/cipher/cipher.ha b/crypto/cipher/cipher.ha
index ed605fd1..dab11e31 100644
--- a/crypto/cipher/cipher.ha
+++ b/crypto/cipher/cipher.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
// Discards any state associated with a block or a stream cipher algorithm,
// securely erasing secret data from memory.
diff --git a/crypto/cipher/ctr.ha b/crypto/cipher/ctr.ha
index 07be32e2..370373dd 100644
--- a/crypto/cipher/ctr.ha
+++ b/crypto/cipher/ctr.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use crypto::math;
use crypto::math::{xor};
diff --git a/crypto/cipher/gcm.ha b/crypto/cipher/gcm.ha
index 870cfecd..6b64f37c 100644
--- a/crypto/cipher/gcm.ha
+++ b/crypto/cipher/gcm.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::math::{xor,eqslice};
use endian::{beputu64, beputu32, begetu32};
diff --git a/crypto/cipher/ghash.ha b/crypto/cipher/ghash.ha
index d342ea40..bad98606 100644
--- a/crypto/cipher/ghash.ha
+++ b/crypto/cipher/ghash.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/cipher/stream.ha b/crypto/cipher/stream.ha
index 56ebf3fa..6e2c5b27 100644
--- a/crypto/cipher/stream.ha
+++ b/crypto/cipher/stream.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use io;
use crypto::math::{xor};
diff --git a/crypto/curve25519/+test.ha b/crypto/curve25519/+test.ha
index a87de461..f873e133 100644
--- a/crypto/curve25519/+test.ha
+++ b/crypto/curve25519/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use bytes;
use fmt;
use io;
diff --git a/crypto/curve25519/curve25519.ha b/crypto/curve25519/curve25519.ha
index 9aa76172..cf386e1b 100644
--- a/crypto/curve25519/curve25519.ha
+++ b/crypto/curve25519/curve25519.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use bytes;
// Implements the curve25519 elliptic curve
diff --git a/crypto/ed25519/+test.ha b/crypto/ed25519/+test.ha
index 05df6d45..629dddb6 100644
--- a/crypto/ed25519/+test.ha
+++ b/crypto/ed25519/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Luke Champine <luke.champine@gmail.com>
+
use bytes;
use encoding::hex;
use strings;
diff --git a/crypto/ed25519/ed25519.ha b/crypto/ed25519/ed25519.ha
index c9f99871..0e1f3fd5 100644
--- a/crypto/ed25519/ed25519.ha
+++ b/crypto/ed25519/ed25519.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Luke Champine <luke.champine@gmail.com>
// Implements the Ed25519 signature scheme.
//
diff --git a/crypto/ed25519/edwards25519.ha b/crypto/ed25519/edwards25519.ha
index 6fe93941..e8c383d1 100644
--- a/crypto/ed25519/edwards25519.ha
+++ b/crypto/ed25519/edwards25519.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Luke Champine <luke.champine@gmail.com>
def FIELDSZ: size = 16;
type elem = [FIELDSZ]i64;
diff --git a/crypto/hkdf/+test.ha b/crypto/hkdf/+test.ha
index ae7f1cd1..94a0424f 100644
--- a/crypto/hkdf/+test.ha
+++ b/crypto/hkdf/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::sha1;
use crypto::sha256;
diff --git a/crypto/hkdf/hkdf.ha b/crypto/hkdf/hkdf.ha
index ed9fa338..2507f40f 100644
--- a/crypto/hkdf/hkdf.ha
+++ b/crypto/hkdf/hkdf.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::hmac;
use crypto::mac;
diff --git a/crypto/hmac/+test.ha b/crypto/hmac/+test.ha
index 4cd865f9..5c60308b 100644
--- a/crypto/hmac/+test.ha
+++ b/crypto/hmac/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::mac;
use crypto::sha1;
diff --git a/crypto/hmac/hmac.ha b/crypto/hmac/hmac.ha
index d2f5c5e1..abdec2e1 100644
--- a/crypto/hmac/hmac.ha
+++ b/crypto/hmac/hmac.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use crypto::mac;
use hash;
diff --git a/crypto/hmac/sha1.ha b/crypto/hmac/sha1.ha
index 8112caa9..e2df3784 100644
--- a/crypto/hmac/sha1.ha
+++ b/crypto/hmac/sha1.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use crypto::mac;
use crypto::sha1;
diff --git a/crypto/hmac/sha256.ha b/crypto/hmac/sha256.ha
index 3ba02980..76c03782 100644
--- a/crypto/hmac/sha256.ha
+++ b/crypto/hmac/sha256.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::mac;
use crypto::sha256;
diff --git a/crypto/keyderiv.ha b/crypto/keyderiv.ha
index 75edfe54..2ffd9ef7 100644
--- a/crypto/keyderiv.ha
+++ b/crypto/keyderiv.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use errors;
use crypto::argon2;
diff --git a/crypto/keystore/impl+linux.ha b/crypto/keystore/impl+linux.ha
index 49fa09c3..322a273d 100644
--- a/crypto/keystore/impl+linux.ha
+++ b/crypto/keystore/impl+linux.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use errors;
use linux::keyctl;
diff --git a/crypto/keystore/impl.ha b/crypto/keystore/impl.ha
index bbc661d7..28919f81 100644
--- a/crypto/keystore/impl.ha
+++ b/crypto/keystore/impl.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// TODO: At least use mlock or something
use bytes;
use errors;
diff --git a/crypto/mac/mac.ha b/crypto/mac/mac.ha
index a7426b03..57c36a19 100644
--- a/crypto/mac/mac.ha
+++ b/crypto/mac/mac.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use io;
// TODO: Use a vtable-based approach like io::stream
diff --git a/crypto/math/arithm.ha b/crypto/math/arithm.ha
index 433b58df..df5a8a2c 100644
--- a/crypto/math/arithm.ha
+++ b/crypto/math/arithm.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
-//
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2017 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/math/bits.ha b/crypto/math/bits.ha
index 0c697e67..1b8152a4 100644
--- a/crypto/math/bits.ha
+++ b/crypto/math/bits.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
// Rotates a 32-bit unsigned integer left by k bits. k may be negative to rotate
// right instead, or see [[rotr32]].
diff --git a/crypto/poly1305/+test.ha b/crypto/poly1305/+test.ha
index e6661d95..27567d94 100644
--- a/crypto/poly1305/+test.ha
+++ b/crypto/poly1305/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::mac;
use encoding::hex;
diff --git a/crypto/poly1305/poly1305.ha b/crypto/poly1305/poly1305.ha
index a396c61c..7a4af891 100644
--- a/crypto/poly1305/poly1305.ha
+++ b/crypto/poly1305/poly1305.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
// This implementation was ported from Loup Vaillant's monocypher project.
diff --git a/crypto/random/+freebsd.ha b/crypto/random/+freebsd.ha
index 597f153d..5a111c94 100644
--- a/crypto/random/+freebsd.ha
+++ b/crypto/random/+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
use io;
diff --git a/crypto/random/+linux.ha b/crypto/random/+linux.ha
index 597f153d..5a111c94 100644
--- a/crypto/random/+linux.ha
+++ b/crypto/random/+linux.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
use io;
diff --git a/crypto/random/random.ha b/crypto/random/random.ha
index 099f7b61..23d2ee85 100644
--- a/crypto/random/random.ha
+++ b/crypto/random/random.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use io;
use rt;
diff --git a/crypto/rsa/+test/core_test.ha b/crypto/rsa/+test/core_test.ha
index f09a7900..a639e0fd 100644
--- a/crypto/rsa/+test/core_test.ha
+++ b/crypto/rsa/+test/core_test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::bigint::*;
diff --git a/crypto/rsa/+test/keys_test.ha b/crypto/rsa/+test/keys_test.ha
index f9ca4ca8..5c680c5d 100644
--- a/crypto/rsa/+test/keys_test.ha
+++ b/crypto/rsa/+test/keys_test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
type keypair = struct {
diff --git a/crypto/rsa/+test/pkcs1_test.ha b/crypto/rsa/+test/pkcs1_test.ha
index 82e8d5e7..f4f42c59 100644
--- a/crypto/rsa/+test/pkcs1_test.ha
+++ b/crypto/rsa/+test/pkcs1_test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::sha1;
use crypto::sha256;
diff --git a/crypto/rsa/core.ha b/crypto/rsa/core.ha
index 1bcb3fa0..f5f286d4 100644
--- a/crypto/rsa/core.ha
+++ b/crypto/rsa/core.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The following code was initially ported from BearSSL.
//
// Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
diff --git a/crypto/rsa/errors.ha b/crypto/rsa/errors.ha
index e5e17a91..a117eb13 100644
--- a/crypto/rsa/errors.ha
+++ b/crypto/rsa/errors.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use errors;
// Signature verification failed.
diff --git a/crypto/rsa/keys.ha b/crypto/rsa/keys.ha
index b2d1dec6..a896e0bf 100644
--- a/crypto/rsa/keys.ha
+++ b/crypto/rsa/keys.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::bigint;
use crypto::math::*;
diff --git a/crypto/rsa/pkcs1.ha b/crypto/rsa/pkcs1.ha
index ac963362..d6428ced 100644
--- a/crypto/rsa/pkcs1.ha
+++ b/crypto/rsa/pkcs1.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bufio;
use crypto::sha1;
use crypto::sha256;
diff --git a/crypto/salsa/+test.ha b/crypto/salsa/+test.ha
index 5689b9c6..1ae28d5d 100644
--- a/crypto/salsa/+test.ha
+++ b/crypto/salsa/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::cipher;
use io;
diff --git a/crypto/salsa/salsa20.ha b/crypto/salsa/salsa20.ha
index 688a1643..18426f8c 100644
--- a/crypto/salsa/salsa20.ha
+++ b/crypto/salsa/salsa20.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use crypto::cipher;
use crypto::math::{rotl32, xor};
diff --git a/crypto/sha1/+test.ha b/crypto/sha1/+test.ha
index 5770e2c6..658682bf 100644
--- a/crypto/sha1/+test.ha
+++ b/crypto/sha1/+test.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use fmt;
use hash;
use strings;
diff --git a/crypto/sha1/sha1.ha b/crypto/sha1/sha1.ha
index 5df7fd7a..8a5fd2a4 100644
--- a/crypto/sha1/sha1.ha
+++ b/crypto/sha1/sha1.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use hash;
use io;
use bytes;
diff --git a/crypto/sha256/+test.ha b/crypto/sha256/+test.ha
index 935388c0..b2799f40 100644
--- a/crypto/sha256/+test.ha
+++ b/crypto/sha256/+test.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use fmt;
use hash;
use strings;
diff --git a/crypto/sha256/sha256.ha b/crypto/sha256/sha256.ha
index 4ee3aedc..6ccd0c85 100644
--- a/crypto/sha256/sha256.ha
+++ b/crypto/sha256/sha256.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use crypto::math;
use bytes;
use endian;
diff --git a/crypto/sha512/+test.ha b/crypto/sha512/+test.ha
index 0a63c93d..3c1a10f4 100644
--- a/crypto/sha512/+test.ha
+++ b/crypto/sha512/+test.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use fmt;
use hash;
use strings;
diff --git a/crypto/sha512/sha512.ha b/crypto/sha512/sha512.ha
index c7a75a4c..a44b6d33 100644
--- a/crypto/sha512/sha512.ha
+++ b/crypto/sha512/sha512.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use bytes;
use crypto::math;
use endian;
diff --git a/crypto/x25519/+test.ha b/crypto/x25519/+test.ha
index 3107736e..8ae9338f 100644
--- a/crypto/x25519/+test.ha
+++ b/crypto/x25519/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use bytes;
use encoding::hex;
use crypto::random;
diff --git a/crypto/x25519/x25519.ha b/crypto/x25519/x25519.ha
index 4cc6de1d..4adddd71 100644
--- a/crypto/x25519/x25519.ha
+++ b/crypto/x25519/x25519.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Armin Preiml <apreiml@strohwolke.at>
+
use crypto::curve25519;
// Type for private, public or shared keys.
diff --git a/dirs/xdg.ha b/dirs/xdg.ha
index 0ceff666..dd671beb 100644
--- a/dirs/xdg.ha
+++ b/dirs/xdg.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
-// (c) 2022 Simon Ser <contact@emersion.fr>
+
use errors;
use fmt;
use fs;
diff --git a/encoding/base32/base32.ha b/encoding/base32/base32.ha
index bc43a9cd..0019cbbd 100644
--- a/encoding/base32/base32.ha
+++ b/encoding/base32/base32.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Ajay R <ar324@protonmail.com>
+
use ascii;
use bytes;
use errors;
diff --git a/encoding/base64/base64.ha b/encoding/base64/base64.ha
index b091851c..777fd7c5 100644
--- a/encoding/base64/base64.ha
+++ b/encoding/base64/base64.ha
@@ -1,10 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Ajay R <ar324@protonmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Steven Guikal <void@fluix.one>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
-// (c) 2023 Armin Preiml <apreiml@strohwolke.at>
+
use ascii;
use bytes;
use errors;
diff --git a/encoding/hex/hex.ha b/encoding/hex/hex.ha
index 8e81d6fb..e74e29c7 100644
--- a/encoding/hex/hex.ha
+++ b/encoding/hex/hex.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use ascii;
use bytes;
use errors;
diff --git a/encoding/pem/+test.ha b/encoding/pem/+test.ha
index dd7f1a39..cb483418 100644
--- a/encoding/pem/+test.ha
+++ b/encoding/pem/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use io;
use fmt;
diff --git a/encoding/pem/pem.ha b/encoding/pem/pem.ha
index e1176de1..3ff65098 100644
--- a/encoding/pem/pem.ha
+++ b/encoding/pem/pem.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use ascii;
use bufio;
use encoding::base64;
diff --git a/encoding/utf8/decode.ha b/encoding/utf8/decode.ha
index 258bb9f7..b1953bca 100644
--- a/encoding/utf8/decode.ha
+++ b/encoding/utf8/decode.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
fn toutf8(in: str) []u8 = *(&in: *[]u8);
diff --git a/encoding/utf8/decodetable.ha b/encoding/utf8/decodetable.ha
index e575c127..131def76 100644
--- a/encoding/utf8/decodetable.ha
+++ b/encoding/utf8/decodetable.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
let table: [8][256]i8 = [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
diff --git a/encoding/utf8/encode.ha b/encoding/utf8/encode.ha
index a8a8a968..8f27a500 100644
--- a/encoding/utf8/encode.ha
+++ b/encoding/utf8/encode.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Encodes a rune as UTF-8 and returns the result as a slice. The return value
// is statically allocated, and will not be consistent after subsequent calls to
diff --git a/encoding/utf8/rune.ha b/encoding/utf8/rune.ha
index ca5337c6..34a95644 100644
--- a/encoding/utf8/rune.ha
+++ b/encoding/utf8/rune.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
type rsize = struct {
mask: u8,
diff --git a/endian/big.ha b/endian/big.ha
index 9766cc89..ff2dd8a4 100644
--- a/endian/big.ha
+++ b/endian/big.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Reads a u16 from a buffer in big-endian order.
export fn begetu16(buf: []u8) u16 = {
diff --git a/endian/endian.ha b/endian/endian.ha
index d910de44..86b04415 100644
--- a/endian/endian.ha
+++ b/endian/endian.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The set of functions used for endian-aware encoding.
export type endian = struct {
diff --git a/endian/host+aarch64.ha b/endian/host+aarch64.ha
index 96c20712..b1e935ee 100644
--- a/endian/host+aarch64.ha
+++ b/endian/host+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The [[endian]] functions which map to the host architecture.
export const host: *endian = &little;
diff --git a/endian/host+riscv64.ha b/endian/host+riscv64.ha
index 96c20712..b1e935ee 100644
--- a/endian/host+riscv64.ha
+++ b/endian/host+riscv64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The [[endian]] functions which map to the host architecture.
export const host: *endian = &little;
diff --git a/endian/host+x86_64.ha b/endian/host+x86_64.ha
index 96c20712..b1e935ee 100644
--- a/endian/host+x86_64.ha
+++ b/endian/host+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The [[endian]] functions which map to the host architecture.
export const host: *endian = &little;
diff --git a/endian/little.ha b/endian/little.ha
index 9bcc4482..80a4bd86 100644
--- a/endian/little.ha
+++ b/endian/little.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Reads a u16 from a buffer in little-endian order.
export fn legetu16(buf: []u8) u16 = {
diff --git a/endian/network.ha b/endian/network.ha
index 6b3e57d2..cbf0189b 100644
--- a/endian/network.ha
+++ b/endian/network.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Converts a u16 from host order to network order.
export fn htonu16(in: u16) u16 = {
diff --git a/errors/common.ha b/errors/common.ha
index 2fdeee8c..cad53684 100644
--- a/errors/common.ha
+++ b/errors/common.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Noah Altunian <nbaltunian@gmail.com>
// The requested resource is not available.
export type busy = !void;
diff --git a/errors/opaque.ha b/errors/opaque.ha
index ebde4fb8..ceedc0cc 100644
--- a/errors/opaque.ha
+++ b/errors/opaque.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// An "opaque" error is used as a portable error type for an underlying error
// which is implementation-specific. It provides a function which can be used to
diff --git a/errors/rt.ha b/errors/rt.ha
index 8cda13cc..69039679 100644
--- a/errors/rt.ha
+++ b/errors/rt.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use rt;
// Wraps an [[rt::errno]] to produce an [[errors::opaque_]]. This is a non-portable
diff --git a/errors/string.ha b/errors/string.ha
index ecb8c2ad..b0167c7d 100644
--- a/errors/string.ha
+++ b/errors/string.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Converts an [[error]] into a human-friendly string representation.
//
diff --git a/fmt/fmt.ha b/fmt/fmt.ha
index 1bffdb24..635a6ced 100644
--- a/fmt/fmt.ha
+++ b/fmt/fmt.ha
@@ -1,10 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021-2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use ascii;
use encoding::utf8;
use io;
diff --git a/fnmatch/+test.ha b/fnmatch/+test.ha
index 488d96e2..89f045bd 100644
--- a/fnmatch/+test.ha
+++ b/fnmatch/+test.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
type testcase = (str, str, bool, []flag);
diff --git a/fnmatch/fnmatch.ha b/fnmatch/fnmatch.ha
index 999558ba..ddd3f0ee 100644
--- a/fnmatch/fnmatch.ha
+++ b/fnmatch/fnmatch.ha
@@ -1,10 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Miccah Castorina <contact@miccah.io>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use ascii;
use errors;
use strings;
diff --git a/format/elf/arch+aarch64.ha b/format/elf/arch+aarch64.ha
index 3bb4d40d..13eaae0a 100644
--- a/format/elf/arch+aarch64.ha
+++ b/format/elf/arch+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The machine (architecture) of the target.
export def TARGET_MACHINE: elf_machine = elf_machine::AARCH64;
diff --git a/format/elf/arch+riscv64.ha b/format/elf/arch+riscv64.ha
index 2e72d9be..09cd9694 100644
--- a/format/elf/arch+riscv64.ha
+++ b/format/elf/arch+riscv64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The machine (architecture) of the target.
export def TARGET_MACHINE: elf_machine = elf_machine::RISCV;
diff --git a/format/elf/arch+x86_64.ha b/format/elf/arch+x86_64.ha
index 5cfb0195..2a45c7f9 100644
--- a/format/elf/arch+x86_64.ha
+++ b/format/elf/arch+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The machine (architecture) of the target.
export def TARGET_MACHINE: elf_machine = elf_machine::X86_64;
diff --git a/format/elf/platform+freebsd.ha b/format/elf/platform+freebsd.ha
index 6364f508..cad3b939 100644
--- a/format/elf/platform+freebsd.ha
+++ b/format/elf/platform+freebsd.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The ABI of the target.
export def TARGET_ABI: ident_abi = ident_abi::SYSV;
diff --git a/format/elf/platform+linux.ha b/format/elf/platform+linux.ha
index 6364f508..cad3b939 100644
--- a/format/elf/platform+linux.ha
+++ b/format/elf/platform+linux.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// The ABI of the target.
export def TARGET_ABI: ident_abi = ident_abi::SYSV;
diff --git a/format/elf/types.ha b/format/elf/types.ha
index 41ecdb4a..ad306d6c 100644
--- a/format/elf/types.ha
+++ b/format/elf/types.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
// TODO:
// - Flesh out ELF32 structures
diff --git a/format/ini/+test.ha b/format/ini/+test.ha
index 31488e57..fb1ae00e 100644
--- a/format/ini/+test.ha
+++ b/format/ini/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
+
use io;
use memio;
use strings;
diff --git a/format/ini/scan.ha b/format/ini/scan.ha
index d9480022..cec383b5 100644
--- a/format/ini/scan.ha
+++ b/format/ini/scan.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use bufio;
use encoding::utf8;
use fmt;
diff --git a/format/ini/types.ha b/format/ini/types.ha
index d67ed0de..b458cf6b 100644
--- a/format/ini/types.ha
+++ b/format/ini/types.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use encoding::utf8;
use fmt;
use io;
diff --git a/format/tar/reader.ha b/format/tar/reader.ha
index d942e81d..5fe05199 100644
--- a/format/tar/reader.ha
+++ b/format/tar/reader.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use endian;
use io;
diff --git a/format/tar/types.ha b/format/tar/types.ha
index 025008e6..d8b68d1b 100644
--- a/format/tar/types.ha
+++ b/format/tar/types.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use io;
// The size of each block in a tar file.
diff --git a/fs/fs.ha b/fs/fs.ha
index d5a7b9a6..bb64bddd 100644
--- a/fs/fs.ha
+++ b/fs/fs.ha
@@ -1,11 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
-// (c) 2021 Umar Getagazov <umar@handlerug.me>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use errors;
use io;
use path;
diff --git a/fs/types.ha b/fs/types.ha
index e12a48b4..33c63db3 100644
--- a/fs/types.ha
+++ b/fs/types.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use errors;
use io;
use path;
diff --git a/fs/util.ha b/fs/util.ha
index 45411ae8..982d4f6f 100644
--- a/fs/util.ha
+++ b/fs/util.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use io;
use path;
use strings;
diff --git a/getopt/getopts.ha b/getopt/getopts.ha
index 573936d8..ad102c04 100644
--- a/getopt/getopts.ha
+++ b/getopt/getopts.ha
@@ -1,10 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Jonathan Halmen <slowjo@halmen.xyz>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use fmt;
use io;
use os;
diff --git a/glob/+test.ha b/glob/+test.ha
index 5a5eea2a..bce0b8e3 100644
--- a/glob/+test.ha
+++ b/glob/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use fnmatch;
use strings;
diff --git a/glob/glob.ha b/glob/glob.ha
index 36d40540..de28610c 100644
--- a/glob/glob.ha
+++ b/glob/glob.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Yasumasa Tada <ytada@spartan.dev>
+
use fnmatch;
use fs;
use io;
diff --git a/hare/ast/decl.ha b/hare/ast/decl.ha
index 955639d9..7884dff2 100644
--- a/hare/ast/decl.ha
+++ b/hare/ast/decl.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::lex;
// A constant declaration.
diff --git a/hare/ast/expr.ha b/hare/ast/expr.ha
index b7d6d61a..afbdbabf 100644
--- a/hare/ast/expr.ha
+++ b/hare/ast/expr.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use hare::lex;
// An identifier access expression.
diff --git a/hare/ast/ident.ha b/hare/ast/ident.ha
index bfe3f211..f75b937d 100644
--- a/hare/ast/ident.ha
+++ b/hare/ast/ident.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use strings;
// Identifies a single object, e.g. foo::bar::baz.
diff --git a/hare/ast/import.ha b/hare/ast/import.ha
index a5dbd8c6..380eb8be 100644
--- a/hare/ast/import.ha
+++ b/hare/ast/import.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::lex;
// Variants of the import statement
diff --git a/hare/ast/type.ha b/hare/ast/type.ha
index e3c2ee53..1d4fd967 100644
--- a/hare/ast/type.ha
+++ b/hare/ast/type.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::lex;
// A type alias.
diff --git a/hare/ast/unit.ha b/hare/ast/unit.ha
index 3bed943f..c2617102 100644
--- a/hare/ast/unit.ha
+++ b/hare/ast/unit.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// A sub-unit, typically representing a single source file.
export type subunit = struct {
diff --git a/hare/lex/+test.ha b/hare/lex/+test.ha
index 05aaab3d..ed241155 100644
--- a/hare/lex/+test.ha
+++ b/hare/lex/+test.ha
@@ -1,10 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
+
use fmt;
use io;
use io::{mode};
diff --git a/hare/lex/lex.ha b/hare/lex/lex.ha
index e3f03255..9dbe5f7f 100644
--- a/hare/lex/lex.ha
+++ b/hare/lex/lex.ha
@@ -1,10 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
+
use ascii;
use bufio;
use encoding::utf8;
diff --git a/hare/lex/token.ha b/hare/lex/token.ha
index 26fff35d..9febfc3a 100644
--- a/hare/lex/token.ha
+++ b/hare/lex/token.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use encoding::utf8;
use strings;
diff --git a/hare/module/cache.ha b/hare/module/cache.ha
index 8ea0c259..505722a3 100644
--- a/hare/module/cache.ha
+++ b/hare/module/cache.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use path;
// Gets the cache directory for a given module, given the value of 'harecache'.
diff --git a/hare/module/deps.ha b/hare/module/deps.ha
index 82fe4726..0c2bd2e5 100644
--- a/hare/module/deps.ha
+++ b/hare/module/deps.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bufio;
use fmt;
use fs;
diff --git a/hare/module/format.ha b/hare/module/format.ha
index 9b5ef035..ef09a983 100644
--- a/hare/module/format.ha
+++ b/hare/module/format.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use time::date;
use fmt;
use hare::unparse;
diff --git a/hare/module/srcs.ha b/hare/module/srcs.ha
index 07e093a1..0bc365e6 100644
--- a/hare/module/srcs.ha
+++ b/hare/module/srcs.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use fs;
use hare::ast;
diff --git a/hare/module/types.ha b/hare/module/types.ha
index c7e3bbbd..d625469e 100644
--- a/hare/module/types.ha
+++ b/hare/module/types.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use encoding::utf8;
use fs;
use hare::ast;
diff --git a/hare/module/util.ha b/hare/module/util.ha
index 0849d351..0904075b 100644
--- a/hare/module/util.ha
+++ b/hare/module/util.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use ascii;
use fs;
use os;
diff --git a/hare/parse/+test/expr_test.ha b/hare/parse/+test/expr_test.ha
index 84e47d7b..4a8a7f2d 100644
--- a/hare/parse/+test/expr_test.ha
+++ b/hare/parse/+test/expr_test.ha
@@ -1,9 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
@test fn assignment() void = {
roundtrip("export fn main() void = {
diff --git a/hare/parse/+test/ident_test.ha b/hare/parse/+test/ident_test.ha
index 77dc272d..1d10f3b6 100644
--- a/hare/parse/+test/ident_test.ha
+++ b/hare/parse/+test/ident_test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::ast;
use hare::lex;
use hare::lex::{ltok};
diff --git a/hare/parse/+test/loc.ha b/hare/parse/+test/loc.ha
index 98888c5e..26a19429 100644
--- a/hare/parse/+test/loc.ha
+++ b/hare/parse/+test/loc.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use encoding::utf8;
use fmt;
use hare::ast;
diff --git a/hare/parse/+test/roundtrip.ha b/hare/parse/+test/roundtrip.ha
index e1f93b53..1d54a722 100644
--- a/hare/parse/+test/roundtrip.ha
+++ b/hare/parse/+test/roundtrip.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use fmt;
use hare::ast;
use hare::lex;
diff --git a/hare/parse/+test/types.ha b/hare/parse/+test/types.ha
index 073c9276..6604b37f 100644
--- a/hare/parse/+test/types.ha
+++ b/hare/parse/+test/types.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
@test fn struct_union() void = {
roundtrip("export type foo = struct {
diff --git a/hare/parse/+test/unit_test.ha b/hare/parse/+test/unit_test.ha
index 27310da7..49d15c01 100644
--- a/hare/parse/+test/unit_test.ha
+++ b/hare/parse/+test/unit_test.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use hare::ast;
use hare::lex;
use io::{mode};
diff --git a/hare/parse/decl.ha b/hare/parse/decl.ha
index fca5074e..2608eb85 100644
--- a/hare/parse/decl.ha
+++ b/hare/parse/decl.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use ascii;
use hare::ast;
use hare::lex::{ltok};
diff --git a/hare/parse/doc/doc.ha b/hare/parse/doc/doc.ha
index f9f4c732..73658bb7 100644
--- a/hare/parse/doc/doc.ha
+++ b/hare/parse/doc/doc.ha
@@ -1,9 +1,5 @@
// License: GPL-3.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
-// (c) 2022 Umar Getagazov <umar@handlerug.me>
+
use ascii;
use bufio;
use encoding::utf8;
diff --git a/hare/parse/expr.ha b/hare/parse/expr.ha
index 9314a91c..1b896018 100644
--- a/hare/parse/expr.ha
+++ b/hare/parse/expr.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use hare::ast;
use hare::lex::{ltok};
use hare::lex;
diff --git a/hare/parse/ident.ha b/hare/parse/ident.ha
index 010ca537..ac316576 100644
--- a/hare/parse/ident.ha
+++ b/hare/parse/ident.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
use hare::lex::{ltok};
use hare::lex;
diff --git a/hare/parse/import.ha b/hare/parse/import.ha
index b2b6ba3a..d0381abd 100644
--- a/hare/parse/import.ha
+++ b/hare/parse/import.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
use hare::lex;
use hare::lex::{ltok};
diff --git a/hare/parse/parse.ha b/hare/parse/parse.ha
index 18a6e823..f1f16c6e 100644
--- a/hare/parse/parse.ha
+++ b/hare/parse/parse.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use hare::lex::{ltok};
use hare::lex;
diff --git a/hare/parse/type.ha b/hare/parse/type.ha
index 0eec0d3b..7d9d3c22 100644
--- a/hare/parse/type.ha
+++ b/hare/parse/type.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
use hare::ast::{builtin_type};
use hare::lex;
diff --git a/hare/parse/unit.ha b/hare/parse/unit.ha
index cd9e8b31..9c0e93f3 100644
--- a/hare/parse/unit.ha
+++ b/hare/parse/unit.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
use hare::lex;
diff --git a/hare/types/+aarch64/writesize.ha b/hare/types/+aarch64/writesize.ha
index 02ddf4cc..b560aabe 100644
--- a/hare/types/+aarch64/writesize.ha
+++ b/hare/types/+aarch64/writesize.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use hash;
fn writesize(h: *hash::hash, u: size) void = write64(h, u);
diff --git a/hare/types/+riscv64/writesize.ha b/hare/types/+riscv64/writesize.ha
index 02ddf4cc..b560aabe 100644
--- a/hare/types/+riscv64/writesize.ha
+++ b/hare/types/+riscv64/writesize.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use hash;
fn writesize(h: *hash::hash, u: size) void = write64(h, u);
diff --git a/hare/types/+test.ha b/hare/types/+test.ha
index a40d2b69..d80245db 100644
--- a/hare/types/+test.ha
+++ b/hare/types/+test.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use fmt;
use hare::ast;
use hare::lex;
diff --git a/hare/types/+x86_64/writesize.ha b/hare/types/+x86_64/writesize.ha
index 02ddf4cc..b560aabe 100644
--- a/hare/types/+x86_64/writesize.ha
+++ b/hare/types/+x86_64/writesize.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use hash;
fn writesize(h: *hash::hash, u: size) void = write64(h, u);
diff --git a/hare/types/arch.ha b/hare/types/arch.ha
index 0ac28267..67fdf911 100644
--- a/hare/types/arch.ha
+++ b/hare/types/arch.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Configuration for a specific architecture.
export type arch = struct {
diff --git a/hare/types/builtins.ha b/hare/types/builtins.ha
index f515c64a..cc1bb1fa 100644
--- a/hare/types/builtins.ha
+++ b/hare/types/builtins.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// IDs are precomputed, but a test verifies that they match what they would be
// if computed at runtime
diff --git a/hare/types/class.ha b/hare/types/class.ha
index 4909a573..2c9ba4aa 100644
--- a/hare/types/class.ha
+++ b/hare/types/class.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Returns true if the given type is a signed type.
export fn is_signed(ty: const *_type) bool = {
diff --git a/hare/types/hash.ha b/hare/types/hash.ha
index 5df0f580..c63c99fe 100644
--- a/hare/types/hash.ha
+++ b/hare/types/hash.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use endian;
use hash::fnv;
use hash;
diff --git a/hare/types/lookup.ha b/hare/types/lookup.ha
index f33c24b0..fda3d1b9 100644
--- a/hare/types/lookup.ha
+++ b/hare/types/lookup.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
// Unwraps a type which may be aliased and returns the underlying type.
diff --git a/hare/types/store.ha b/hare/types/store.ha
index 5db42276..621fc7e4 100644
--- a/hare/types/store.ha
+++ b/hare/types/store.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use hare::ast;
use sort;
diff --git a/hare/types/types.ha b/hare/types/types.ha
index 88c6cc99..23c1504f 100644
--- a/hare/types/types.ha
+++ b/hare/types/types.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
// A type alias.
diff --git a/hare/unit/+test.ha b/hare/unit/+test.ha
index 045fa2e3..e268673c 100644
--- a/hare/unit/+test.ha
+++ b/hare/unit/+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::ast;
use hare::lex;
use hare::parse;
diff --git a/hare/unit/check.ha b/hare/unit/check.ha
index f83ff15b..ca255113 100644
--- a/hare/unit/check.ha
+++ b/hare/unit/check.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::ast;
use hare::types;
diff --git a/hare/unit/context.ha b/hare/unit/context.ha
index 7f1744ee..e62bd392 100644
--- a/hare/unit/context.ha
+++ b/hare/unit/context.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::types;
type context = struct {
diff --git a/hare/unit/errors.ha b/hare/unit/errors.ha
index aa2df5f5..3617b996 100644
--- a/hare/unit/errors.ha
+++ b/hare/unit/errors.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::types;
// TODO: More errors
diff --git a/hare/unit/expr.ha b/hare/unit/expr.ha
index ea8dd75b..420d8efc 100644
--- a/hare/unit/expr.ha
+++ b/hare/unit/expr.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::ast;
use hare::lex;
use hare::types;
diff --git a/hare/unit/process.ha b/hare/unit/process.ha
index 34b93041..5c463d50 100644
--- a/hare/unit/process.ha
+++ b/hare/unit/process.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use hare::ast;
use hare::lex;
use hare::types;
diff --git a/hare/unit/scan.ha b/hare/unit/scan.ha
index 5a3fbb4b..ab4c6b40 100644
--- a/hare/unit/scan.ha
+++ b/hare/unit/scan.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use hare::ast;
use hare::types;
diff --git a/hare/unit/scope.ha b/hare/unit/scope.ha
index e4ea28a1..94b0af0e 100644
--- a/hare/unit/scope.ha
+++ b/hare/unit/scope.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::ast;
use hare::types;
use hash::fnv;
diff --git a/hare/unit/unit.ha b/hare/unit/unit.ha
index dca71736..8971377d 100644
--- a/hare/unit/unit.ha
+++ b/hare/unit/unit.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use hare::ast;
use hare::lex;
use hare::types;
diff --git a/hare/unparse/decl.ha b/hare/unparse/decl.ha
index 1b34ce23..36ea1f25 100644
--- a/hare/unparse/decl.ha
+++ b/hare/unparse/decl.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use io;
use fmt;
use hare::ast;
diff --git a/hare/unparse/expr.ha b/hare/unparse/expr.ha
index 272dcb3f..e0a39a6f 100644
--- a/hare/unparse/expr.ha
+++ b/hare/unparse/expr.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use io;
use fmt;
use hare::ast;
diff --git a/hare/unparse/ident.ha b/hare/unparse/ident.ha
index 8438b8aa..8a45b08a 100644
--- a/hare/unparse/ident.ha
+++ b/hare/unparse/ident.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use hare::ast;
use io;
diff --git a/hare/unparse/import.ha b/hare/unparse/import.ha
index 983bf2cf..420246c8 100644
--- a/hare/unparse/import.ha
+++ b/hare/unparse/import.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use io;
use hare::ast;
diff --git a/hare/unparse/type.ha b/hare/unparse/type.ha
index 2dae8cc9..7db4ef1b 100644
--- a/hare/unparse/type.ha
+++ b/hare/unparse/type.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use fmt;
use io;
use hare::ast;
diff --git a/hare/unparse/unit.ha b/hare/unparse/unit.ha
index a88a04cc..ed7ef844 100644
--- a/hare/unparse/unit.ha
+++ b/hare/unparse/unit.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use io;
use fmt;
use hare::ast;
diff --git a/hare/unparse/util.ha b/hare/unparse/util.ha
index 086304b7..28c5f536 100644
--- a/hare/unparse/util.ha
+++ b/hare/unparse/util.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use io;
use fmt;
diff --git a/hash/adler32/adler32.ha b/hash/adler32/adler32.ha
index be2bb18c..c7a5cdb1 100644
--- a/hash/adler32/adler32.ha
+++ b/hash/adler32/adler32.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use endian;
use hash;
use io;
diff --git a/hash/crc16/crc16.ha b/hash/crc16/crc16.ha
index c2a608bf..a1d9f32f 100644
--- a/hash/crc16/crc16.ha
+++ b/hash/crc16/crc16.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use endian;
use hash;
use io;
diff --git a/hash/crc32/crc32.ha b/hash/crc32/crc32.ha
index dc2951d3..ab0ff88d 100644
--- a/hash/crc32/crc32.ha
+++ b/hash/crc32/crc32.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use endian;
use hash;
use io;
diff --git a/hash/crc64/crc64.ha b/hash/crc64/crc64.ha
index 6f05282b..77ffea0a 100644
--- a/hash/crc64/crc64.ha
+++ b/hash/crc64/crc64.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use endian;
use hash;
use io;
diff --git a/hash/fnv/+aarch64.ha b/hash/fnv/+aarch64.ha
index 1340a8ad..e565fb7a 100644
--- a/hash/fnv/+aarch64.ha
+++ b/hash/fnv/+aarch64.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
// Hashes a string, returning a size key, for use in a hash map.
export fn string(s: str) size = string64(s): size;
diff --git a/hash/fnv/+riscv64.ha b/hash/fnv/+riscv64.ha
index 1340a8ad..e565fb7a 100644
--- a/hash/fnv/+riscv64.ha
+++ b/hash/fnv/+riscv64.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
// Hashes a string, returning a size key, for use in a hash map.
export fn string(s: str) size = string64(s): size;
diff --git a/hash/fnv/+x86_64.ha b/hash/fnv/+x86_64.ha
index 1340a8ad..e565fb7a 100644
--- a/hash/fnv/+x86_64.ha
+++ b/hash/fnv/+x86_64.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
// Hashes a string, returning a size key, for use in a hash map.
export fn string(s: str) size = string64(s): size;
diff --git a/hash/fnv/fnv.ha b/hash/fnv/fnv.ha
index 0689763c..93f33948 100644
--- a/hash/fnv/fnv.ha
+++ b/hash/fnv/fnv.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use endian;
use hash;
use io;
diff --git a/hash/hash.ha b/hash/hash.ha
index 722977f4..8047a84d 100644
--- a/hash/hash.ha
+++ b/hash/hash.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Armin Preiml <apreiml@strohwolke.at>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use io;
use fmt;
// TODO: Use a vtable-based approach for this like io::stream
diff --git a/hash/siphash/+test.ha b/hash/siphash/+test.ha
index 0e3fba46..652d1fe1 100644
--- a/hash/siphash/+test.ha
+++ b/hash/siphash/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use endian;
use fmt;
use hash;
diff --git a/hash/siphash/siphash.ha b/hash/siphash/siphash.ha
index 47ed72b4..6932e3d7 100644
--- a/hash/siphash/siphash.ha
+++ b/hash/siphash/siphash.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use crypto::math::{rotl64};
use endian::{leputu64, legetu64};
use hash;
diff --git a/io/+freebsd/mmap.ha b/io/+freebsd/mmap.ha
index f920fc72..4d450725 100644
--- a/io/+freebsd/mmap.ha
+++ b/io/+freebsd/mmap.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
diff --git a/io/+freebsd/platform_file.ha b/io/+freebsd/platform_file.ha
index 900df7a0..c5fa9847 100644
--- a/io/+freebsd/platform_file.ha
+++ b/io/+freebsd/platform_file.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
diff --git a/io/+freebsd/vector.ha b/io/+freebsd/vector.ha
index 78032013..8d473373 100644
--- a/io/+freebsd/vector.ha
+++ b/io/+freebsd/vector.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use errors;
use rt;
diff --git a/io/+linux/mmap.ha b/io/+linux/mmap.ha
index 00253739..21e84183 100644
--- a/io/+linux/mmap.ha
+++ b/io/+linux/mmap.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
diff --git a/io/+linux/platform_file.ha b/io/+linux/platform_file.ha
index 43b8c676..c7995ce3 100644
--- a/io/+linux/platform_file.ha
+++ b/io/+linux/platform_file.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
diff --git a/io/+linux/vector.ha b/io/+linux/vector.ha
index 78032013..8d473373 100644
--- a/io/+linux/vector.ha
+++ b/io/+linux/vector.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use errors;
use rt;
diff --git a/io/+test/limit_test.ha b/io/+test/limit_test.ha
index 267fbefa..1815cefd 100644
--- a/io/+test/limit_test.ha
+++ b/io/+test/limit_test.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
@test fn limit() void = {
diff --git a/io/+test/stream_test.ha b/io/+test/stream_test.ha
index 86acb4ae..3e9fb7f9 100644
--- a/io/+test/stream_test.ha
+++ b/io/+test/stream_test.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
const teststream_vtable: vtable = vtable {
reader = &teststream_read,
diff --git a/io/arch+aarch64.ha b/io/arch+aarch64.ha
index be5e8902..2afeaacb 100644
--- a/io/arch+aarch64.ha
+++ b/io/arch+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// An offset for a [[handle]].
export type off = i64;
diff --git a/io/arch+riscv64.ha b/io/arch+riscv64.ha
index cbeb3ed9..2afeaacb 100644
--- a/io/arch+riscv64.ha
+++ b/io/arch+riscv64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// An offset for a [[handle]].
export type off = i64;
diff --git a/io/arch+x86_64.ha b/io/arch+x86_64.ha
index be5e8902..2afeaacb 100644
--- a/io/arch+x86_64.ha
+++ b/io/arch+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// An offset for a [[handle]].
export type off = i64;
diff --git a/io/copy.ha b/io/copy.ha
index 426164da..aa9b5aa2 100644
--- a/io/copy.ha
+++ b/io/copy.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
// Copies data from one handle into another. If reading from the source file
diff --git a/io/drain.ha b/io/drain.ha
index efa7f5fa..efa103d9 100644
--- a/io/drain.ha
+++ b/io/drain.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Reads an entire stream into a []u8. The caller must free the return value.
// Note that this function will never return if the handle is infinite.
diff --git a/io/empty.ha b/io/empty.ha
index 81e37bda..6eab509f 100644
--- a/io/empty.ha
+++ b/io/empty.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
const _empty_vt: vtable = vtable {
reader = &empty_read,
diff --git a/io/file.ha b/io/file.ha
index d04bc464..45702559 100644
--- a/io/file.ha
+++ b/io/file.ha
@@ -1,4 +1,5 @@
// License: MPL-2.0
+
use rt;
// Lock operation to use with [[lock]].
diff --git a/io/handle.ha b/io/handle.ha
index e8002ea6..9bf73a84 100644
--- a/io/handle.ha
+++ b/io/handle.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// TODO: Examine the ABI constraints of [[handle]]. Would it be better to make
// stream an integer representing an internal handle into a stream table? This
diff --git a/io/limit.ha b/io/limit.ha
index 515b6f8b..d0045857 100644
--- a/io/limit.ha
+++ b/io/limit.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
export type limitstream = struct {
vtable: stream,
diff --git a/io/stream.ha b/io/stream.ha
index caf6fc91..e1bddb42 100644
--- a/io/stream.ha
+++ b/io/stream.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use errors;
// A stream is a pointer to a [[vtable]] which allows for user-defined I/O
diff --git a/io/tee.ha b/io/tee.ha
index 099dc41b..aa59da14 100644
--- a/io/tee.ha
+++ b/io/tee.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
export type teestream = struct {
vtable: stream,
diff --git a/io/types.ha b/io/types.ha
index 403a92af..6cb51fc6 100644
--- a/io/types.ha
+++ b/io/types.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
// Returned by [[readall]] if the I/O handle returned [[EOF]] prior to
diff --git a/io/util.ha b/io/util.ha
index 03c3f363..89916d30 100644
--- a/io/util.ha
+++ b/io/util.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Reads an entire buffer, perhaps issuing several [[read]] calls to do so. If
// EOF is immediately encountered, it is returned; if [[EOF]] is encountered
diff --git a/io/zero.ha b/io/zero.ha
index 8a6d92bf..46145043 100644
--- a/io/zero.ha
+++ b/io/zero.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
const _zero_vt: vtable = vtable {
diff --git a/linux/env.ha b/linux/env.ha
index 22c56110..72fb8412 100644
--- a/linux/env.ha
+++ b/linux/env.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use format::elf;
// System V auxillary vector for the current process
diff --git a/linux/keyctl/keyctl.ha b/linux/keyctl/keyctl.ha
index a17b9657..4d631ec4 100644
--- a/linux/keyctl/keyctl.ha
+++ b/linux/keyctl/keyctl.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use errors;
use rt;
diff --git a/linux/keyctl/types.ha b/linux/keyctl/types.ha
index 463b4fbf..8cfc84eb 100644
--- a/linux/keyctl/types.ha
+++ b/linux/keyctl/types.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use errors;
use types::c;
diff --git a/linux/start+libc.ha b/linux/start+libc.ha
index a1db4783..ef2e7df3 100644
--- a/linux/start+libc.ha
+++ b/linux/start+libc.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
+
use rt;
use format::elf;
diff --git a/linux/start.ha b/linux/start.ha
index 456995c5..ef2e7df3 100644
--- a/linux/start.ha
+++ b/linux/start.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use rt;
use format::elf;
diff --git a/linux/timerfd/timerfd.ha b/linux/timerfd/timerfd.ha
index 978ca66a..36739697 100644
--- a/linux/timerfd/timerfd.ha
+++ b/linux/timerfd/timerfd.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Vincent Dagonneau <v@vda.io>
use errors;
use rt;
diff --git a/linux/vdso/vdso.ha b/linux/vdso/vdso.ha
index a37da4b5..86d7af2e 100644
--- a/linux/vdso/vdso.ha
+++ b/linux/vdso/vdso.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use format::elf;
use linux;
use types::c;
diff --git a/log/funcs.ha b/log/funcs.ha
index 2df425ea..612e189c 100644
--- a/log/funcs.ha
+++ b/log/funcs.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use fmt;
use os;
diff --git a/log/global.ha b/log/global.ha
index 9ff0559f..530bb018 100644
--- a/log/global.ha
+++ b/log/global.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use io;
use os;
diff --git a/log/logger.ha b/log/logger.ha
index 8aac3e86..5fb6707c 100644
--- a/log/logger.ha
+++ b/log/logger.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use fmt;
use io;
use os;
diff --git a/log/silent.ha b/log/silent.ha
index fa2d8288..b0cafe22 100644
--- a/log/silent.ha
+++ b/log/silent.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use fmt;
// A logger that does not print any messages.
diff --git a/math/+test/data.ha b/math/+test/data.ha
index cc46c95e..e32fe11a 100644
--- a/math/+test/data.ha
+++ b/math/+test/data.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
// The test data below is based on Go's implementation, and came with the
// following note and copyright notice:
diff --git a/math/+test/floats_test.ha b/math/+test/floats_test.ha
index 7c84a06d..4c66533e 100644
--- a/math/+test/floats_test.ha
+++ b/math/+test/floats_test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
@test fn floatbits() void = {
const a: [_]f64 = [INF, -INF, 0.0, 1.0, -1.0, 123456789.0,
F64_MIN, F64_MIN_NORMAL, F64_MAX_NORMAL];
diff --git a/math/+test/math_test.ha b/math/+test/math_test.ha
index 8bb99a10..9f8ab105 100644
--- a/math/+test/math_test.ha
+++ b/math/+test/math_test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
@test fn eqwithin() void = {
assert(eqwithin(1f64, 2f64, 2f64));
assert(eqwithin(1.0f32, 2.0f32, 2.0f32));
diff --git a/math/+test/trig_test.ha b/math/+test/trig_test.ha
index af7231ce..ee193f5b 100644
--- a/math/+test/trig_test.ha
+++ b/math/+test/trig_test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
@test fn trig_reduce() void = {
for (let idx = 0z; idx < 10; idx += 1) {
const reduced = trig_reduce(TEST_INPUTS[idx]);
diff --git a/math/checked/checked.ha b/math/checked/checked.ha
index 135dce6a..e44ad73c 100644
--- a/math/checked/checked.ha
+++ b/math/checked/checked.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use math;
// Adds 'a' and 'b', returning the result and whether overflow occurred.
diff --git a/math/complex/+test.ha b/math/complex/+test.ha
index 43e34b79..c03f272b 100644
--- a/math/complex/+test.ha
+++ b/math/complex/+test.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
-// (c) 2022 Carlos Une <une@fastmail.fm>
// The test data below is based on Go's implementation, and came with the
// following note and copyright notice:
diff --git a/math/complex/complex.ha b/math/complex/complex.ha
index 980d2107..445792a7 100644
--- a/math/complex/complex.ha
+++ b/math/complex/complex.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
-// (c) 2022 Carlos Une <une@fastmail.fm>
// Sections of the code below are based on Go's implementation, which is, in
// turn, based on Cephes Math Library. The original C code can be found at
diff --git a/math/fenv+aarch64.ha b/math/fenv+aarch64.ha
index 88fd2765..649c27d9 100644
--- a/math/fenv+aarch64.ha
+++ b/math/fenv+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
// Defines flags characterizing types of floating point exceptions,
// Each of the flags is only defined when the target platform supports handling
diff --git a/math/fenv+riscv64.ha b/math/fenv+riscv64.ha
index 04cc1cd0..60869817 100644
--- a/math/fenv+riscv64.ha
+++ b/math/fenv+riscv64.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
// Defines flags characterizing types of floating point exceptions,
// Each of the flags is only defined when the target platform supports handling
diff --git a/math/fenv+x86_64.ha b/math/fenv+x86_64.ha
index d3d6fd19..d2ae7b0e 100644
--- a/math/fenv+x86_64.ha
+++ b/math/fenv+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
// Defines flags characterizing types of floating point exceptions,
// Each of the flags is only defined when the target platform supports handling
diff --git a/math/fenv_func.ha b/math/fenv_func.ha
index 0b0c6993..06f735d8 100644
--- a/math/fenv_func.ha
+++ b/math/fenv_func.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
+
use rt;
// Accepts a set of flags from [[fexcept]] ORed together and clears
diff --git a/math/floats.ha b/math/floats.ha
index b720783c..131b472c 100644
--- a/math/floats.ha
+++ b/math/floats.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021-2022 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use types;
// Returns the binary representation of the given f64.
diff --git a/math/ints.ha b/math/ints.ha
index 8d772324..39c98f83 100644
--- a/math/ints.ha
+++ b/math/ints.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
-// (c) 2021-2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use types;
// Returns the absolute value of signed integer n.
diff --git a/math/math.ha b/math/math.ha
index 61edce33..6ac78580 100644
--- a/math/math.ha
+++ b/math/math.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
// Sections of the code below, in particular log() and exp(), are based on Go's
// implementation, which is, in turn, based on FreeBSD's. The original C code,
diff --git a/math/random/random.ha b/math/random/random.ha
index 001415e6..20180c48 100644
--- a/math/random/random.ha
+++ b/math/random/random.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Steven Guikal <void@fluix.dev>
// State for a pseudorandom number generator.
export type random = u64;
diff --git a/math/trig.ha b/math/trig.ha
index 35dea9a7..99c4642d 100644
--- a/math/trig.ha
+++ b/math/trig.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
// Sections of the code below are based on Go's implementation, which is, in
// turn, based on:
diff --git a/math/uints.ha b/math/uints.ha
index d7f72903..f6d04a1c 100644
--- a/math/uints.ha
+++ b/math/uints.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
// Sections of the code below are based on Go's implementation, in particular
// https://raw.githubusercontent.com/golang/go/master/src/math/bits/bits.go.
diff --git a/memio/ops.ha b/memio/ops.ha
index cc71b662..75fa1cff 100644
--- a/memio/ops.ha
+++ b/memio/ops.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Yasumasa Tada <ytada@spartan.dev>
+
use encoding::utf8;
use io;
use strings;
diff --git a/memio/stream.ha b/memio/stream.ha
index 2fce7075..6bfb99eb 100644
--- a/memio/stream.ha
+++ b/memio/stream.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use encoding::utf8;
use errors;
diff --git a/mime/database.ha b/mime/database.ha
index bd31503e..75639c5d 100644
--- a/mime/database.ha
+++ b/mime/database.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use hash::fnv;
use strings;
diff --git a/mime/lookup.ha b/mime/lookup.ha
index 24d2e0e0..d7d66ca6 100644
--- a/mime/lookup.ha
+++ b/mime/lookup.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use hash::fnv;
use strings;
diff --git a/mime/parse.ha b/mime/parse.ha
index 666a5f52..920ced49 100644
--- a/mime/parse.ha
+++ b/mime/parse.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use ascii;
use errors;
use strings;
diff --git a/mime/system.ha b/mime/system.ha
index 1d71d15a..2b223114 100644
--- a/mime/system.ha
+++ b/mime/system.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use bufio;
use encoding::utf8;
use fmt;
diff --git a/net/+freebsd.ha b/net/+freebsd.ha
index 380a3903..22b8a7bc 100644
--- a/net/+freebsd.ha
+++ b/net/+freebsd.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Noah Pederson <noah@packetlost.dev>
+
use errors;
use io;
use rt;
diff --git a/net/+linux.ha b/net/+linux.ha
index 35f88717..e23360cb 100644
--- a/net/+linux.ha
+++ b/net/+linux.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Noah Pederson <noah@packetlost.dev>
+
use errors;
use io;
use rt;
diff --git a/net/dial/dial.ha b/net/dial/dial.ha
index 37fad3dd..80a7d95e 100644
--- a/net/dial/dial.ha
+++ b/net/dial/dial.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use errors;
use fmt;
use net;
diff --git a/net/dial/ip.ha b/net/dial/ip.ha
index c02d9487..f2241e34 100644
--- a/net/dial/ip.ha
+++ b/net/dial/ip.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Provides default dialers for tcp and udp
use net;
diff --git a/net/dial/registry.ha b/net/dial/registry.ha
index 1f6340ab..145d0ed6 100644
--- a/net/dial/registry.ha
+++ b/net/dial/registry.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use net;
use net::dns;
use unix::hosts;
diff --git a/net/dial/resolve.ha b/net/dial/resolve.ha
index 382c8a86..e0b70841 100644
--- a/net/dial/resolve.ha
+++ b/net/dial/resolve.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021-2022 Ember Sawady <ecs@d2evs.net>
+
use crypto::random;
use net::dns;
use net::ip;
diff --git a/net/dns/decode.ha b/net/dns/decode.ha
index e336fb58..a6463b17 100644
--- a/net/dns/decode.ha
+++ b/net/dns/decode.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Lassi Pulkkinen <lassi@pulk.fi>
+
use ascii;
use endian;
use fmt;
diff --git a/net/dns/encode.ha b/net/dns/encode.ha
index 46df753c..0bf94721 100644
--- a/net/dns/encode.ha
+++ b/net/dns/encode.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use endian;
use errors;
use fmt;
diff --git a/net/dns/error.ha b/net/dns/error.ha
index 3a8498cf..83911647 100644
--- a/net/dns/error.ha
+++ b/net/dns/error.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fmt;
use io;
diff --git a/net/dns/query.ha b/net/dns/query.ha
index 35dd7522..5f2b6adc 100644
--- a/net/dns/query.ha
+++ b/net/dns/query.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use endian;
use errors;
use io;
diff --git a/net/dns/strdomain.ha b/net/dns/strdomain.ha
index d6921ef1..ba49fea9 100644
--- a/net/dns/strdomain.ha
+++ b/net/dns/strdomain.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use strings;
// Converts a human-readable domain name (e.g. "example.org") into a DNS-ready
diff --git a/net/dns/types.ha b/net/dns/types.ha
index fbd0c87e..88c45702 100644
--- a/net/dns/types.ha
+++ b/net/dns/types.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Jonathan Halmen <slowjo@halmen.xyz>
-// (c) 2022 Lassi Pulkkinen <lassi@pulk.fi>
+
use net::ip;
use strings;
diff --git a/net/errors.ha b/net/errors.ha
index 00161dc1..05095aba 100644
--- a/net/errors.ha
+++ b/net/errors.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
diff --git a/net/ip/+freebsd.ha b/net/ip/+freebsd.ha
index f4256340..ceb753a0 100644
--- a/net/ip/+freebsd.ha
+++ b/net/ip/+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use rt;
use endian;
diff --git a/net/ip/+linux.ha b/net/ip/+linux.ha
index de785584..fb53960a 100644
--- a/net/ip/+linux.ha
+++ b/net/ip/+linux.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use rt;
use endian;
diff --git a/net/ip/ip.ha b/net/ip/ip.ha
index 400a2f10..2f6eb25b 100644
--- a/net/ip/ip.ha
+++ b/net/ip/ip.ha
@@ -1,12 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Miccah Castorina <contact@miccah.io>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use bytes;
use endian;
use fmt;
diff --git a/net/ip/test+test.ha b/net/ip/test+test.ha
index 56eeb570..9cd6716e 100644
--- a/net/ip/test+test.ha
+++ b/net/ip/test+test.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Miccah Castorina <contact@miccah.io>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use strings;
use fmt;
diff --git a/net/msg.ha b/net/msg.ha
index 30906867..38fe4ea4 100644
--- a/net/msg.ha
+++ b/net/msg.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// TODO:
// - Set name field
diff --git a/net/tcp/+freebsd.ha b/net/tcp/+freebsd.ha
index a7cf096a..8321f500 100644
--- a/net/tcp/+freebsd.ha
+++ b/net/tcp/+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use net::ip;
diff --git a/net/tcp/+linux.ha b/net/tcp/+linux.ha
index 356e9aa7..f72e1e81 100644
--- a/net/tcp/+linux.ha
+++ b/net/tcp/+linux.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use net::ip;
diff --git a/net/tcp/listener.ha b/net/tcp/listener.ha
index 6101d89f..114796fb 100644
--- a/net/tcp/listener.ha
+++ b/net/tcp/listener.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use net;
// Accepts the next connection from a socket. Blocks until a new connection is
diff --git a/net/tcp/options.ha b/net/tcp/options.ha
index ae401ba0..81485e31 100644
--- a/net/tcp/options.ha
+++ b/net/tcp/options.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use net;
// Enables keep-alive for a socket.
diff --git a/net/types.ha b/net/types.ha
index a1f6c221..049d5bf5 100644
--- a/net/types.ha
+++ b/net/types.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// The end of the full-duplex connection that should be [[shutdown]].
export type shut = enum {
RD, // Disables further receptions.
diff --git a/net/udp/+freebsd.ha b/net/udp/+freebsd.ha
index 12e3bcd9..ca98aded 100644
--- a/net/udp/+freebsd.ha
+++ b/net/udp/+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use net::ip;
diff --git a/net/udp/+linux.ha b/net/udp/+linux.ha
index ce4cda5a..307bed37 100644
--- a/net/udp/+linux.ha
+++ b/net/udp/+linux.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use net::ip;
diff --git a/net/udp/options.ha b/net/udp/options.ha
index 6c2da95e..e64fc6ee 100644
--- a/net/udp/options.ha
+++ b/net/udp/options.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use net;
// Enables port re-use for a UDP listener.
diff --git a/net/unix/+freebsd.ha b/net/unix/+freebsd.ha
index e57b4bdd..57cb0e15 100644
--- a/net/unix/+freebsd.ha
+++ b/net/unix/+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fmt;
use io;
diff --git a/net/unix/+linux.ha b/net/unix/+linux.ha
index b1b04a32..4e5d0772 100644
--- a/net/unix/+linux.ha
+++ b/net/unix/+linux.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use errors;
use fmt;
use io;
diff --git a/net/unix/addr.ha b/net/unix/addr.ha
index 409b9e62..93b9f0da 100644
--- a/net/unix/addr.ha
+++ b/net/unix/addr.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
// A UNIX socket address.
export type addr = str;
diff --git a/net/unix/cmsg.ha b/net/unix/cmsg.ha
index ab9fdde2..a7e7d0db 100644
--- a/net/unix/cmsg.ha
+++ b/net/unix/cmsg.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use net;
use io;
use rt;
diff --git a/net/unix/dial.ha b/net/unix/dial.ha
index 72910a50..b5234c05 100644
--- a/net/unix/dial.ha
+++ b/net/unix/dial.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use net::dial;
use net;
diff --git a/net/unix/listener.ha b/net/unix/listener.ha
index 6101d89f..114796fb 100644
--- a/net/unix/listener.ha
+++ b/net/unix/listener.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use net;
// Accepts the next connection from a socket. Blocks until a new connection is
diff --git a/net/unix/options.ha b/net/unix/options.ha
index 4ef1fb24..aac4110c 100644
--- a/net/unix/options.ha
+++ b/net/unix/options.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use net;
// Configures the backlog size for a listener. If not specified, a sensible
diff --git a/net/unix/socketpair.ha b/net/unix/socketpair.ha
index 54a67f2b..3c0aefed 100644
--- a/net/unix/socketpair.ha
+++ b/net/unix/socketpair.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use errors;
use io;
use net;
diff --git a/net/uri/+test.ha b/net/uri/+test.ha
index bff204c6..905ea82b 100644
--- a/net/uri/+test.ha
+++ b/net/uri/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use fmt;
use net::ip;
diff --git a/net/uri/fmt.ha b/net/uri/fmt.ha
index eb32e3d2..8228eea0 100644
--- a/net/uri/fmt.ha
+++ b/net/uri/fmt.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use ascii;
use encoding::utf8;
use fmt;
diff --git a/net/uri/parse.ha b/net/uri/parse.ha
index 563c8376..38531b75 100644
--- a/net/uri/parse.ha
+++ b/net/uri/parse.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Umar Getagazov <umar@handlerug.me>
+
use ascii;
use encoding::utf8;
use io;
diff --git a/net/uri/query.ha b/net/uri/query.ha
index 0e752fa3..d927df95 100644
--- a/net/uri/query.ha
+++ b/net/uri/query.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use io;
use memio;
use strings;
diff --git a/net/uri/uri.ha b/net/uri/uri.ha
index 5e501f07..d0170298 100644
--- a/net/uri/uri.ha
+++ b/net/uri/uri.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use net::ip;
use strings;
diff --git a/os/+freebsd/dirfdfs.ha b/os/+freebsd/dirfdfs.ha
index 637fa51c..3806e497 100644
--- a/os/+freebsd/dirfdfs.ha
+++ b/os/+freebsd/dirfdfs.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use errors;
use encoding::utf8;
use fs;
diff --git a/os/+freebsd/exit+libc-test.ha b/os/+freebsd/exit+libc-test.ha
index bfdfa130..020934fd 100644
--- a/os/+freebsd/exit+libc-test.ha
+++ b/os/+freebsd/exit+libc-test.ha
@@ -1,2 +1,4 @@
+// License: MPL-2.0
+
// Exit the program with the provided status code.
export @symbol("exit") fn exit(status: int) never;
diff --git a/os/+freebsd/exit+test.ha b/os/+freebsd/exit+test.ha
index a7614c21..1b075553 100644
--- a/os/+freebsd/exit+test.ha
+++ b/os/+freebsd/exit+test.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2023 Sebastian <sebastian@sebsite.pw>
// Exit the program with the provided status code.
export fn exit(status: int) never = {
diff --git a/os/+freebsd/exit.ha b/os/+freebsd/exit.ha
index 57638a66..58727544 100644
--- a/os/+freebsd/exit.ha
+++ b/os/+freebsd/exit.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use rt;
// Exit the program with the provided status code.
diff --git a/os/+freebsd/fs.ha b/os/+freebsd/fs.ha
index ed95f293..f494d783 100644
--- a/os/+freebsd/fs.ha
+++ b/os/+freebsd/fs.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fs;
use path;
diff --git a/os/+freebsd/platform_environ.ha b/os/+freebsd/platform_environ.ha
index 1c915713..217aeb40 100644
--- a/os/+freebsd/platform_environ.ha
+++ b/os/+freebsd/platform_environ.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
use strings;
diff --git a/os/+freebsd/status.ha b/os/+freebsd/status.ha
index 7abcc1c2..8ac600dd 100644
--- a/os/+freebsd/status.ha
+++ b/os/+freebsd/status.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// Values that may be passed to [[exit]] to indicate successful or unsuccessful
// termination, respectively.
export type status = enum {
diff --git a/os/+freebsd/stdfd.ha b/os/+freebsd/stdfd.ha
index 0fd49054..abf4b21e 100644
--- a/os/+freebsd/stdfd.ha
+++ b/os/+freebsd/stdfd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use bufio;
use io;
use rt;
diff --git a/os/+linux/dirfdfs.ha b/os/+linux/dirfdfs.ha
index 8ad59807..832a7930 100644
--- a/os/+linux/dirfdfs.ha
+++ b/os/+linux/dirfdfs.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use errors;
use encoding::utf8;
use fs;
diff --git a/os/+linux/exit+libc-test.ha b/os/+linux/exit+libc-test.ha
index bfdfa130..020934fd 100644
--- a/os/+linux/exit+libc-test.ha
+++ b/os/+linux/exit+libc-test.ha
@@ -1,2 +1,4 @@
+// License: MPL-2.0
+
// Exit the program with the provided status code.
export @symbol("exit") fn exit(status: int) never;
diff --git a/os/+linux/exit+test.ha b/os/+linux/exit+test.ha
index a7614c21..1b075553 100644
--- a/os/+linux/exit+test.ha
+++ b/os/+linux/exit+test.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2023 Sebastian <sebastian@sebsite.pw>
// Exit the program with the provided status code.
export fn exit(status: int) never = {
diff --git a/os/+linux/exit.ha b/os/+linux/exit.ha
index 57638a66..58727544 100644
--- a/os/+linux/exit.ha
+++ b/os/+linux/exit.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use rt;
// Exit the program with the provided status code.
diff --git a/os/+linux/fs.ha b/os/+linux/fs.ha
index 36f34929..0076ba48 100644
--- a/os/+linux/fs.ha
+++ b/os/+linux/fs.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fs;
use path;
diff --git a/os/+linux/memory.ha b/os/+linux/memory.ha
index 07730e58..4d324d94 100644
--- a/os/+linux/memory.ha
+++ b/os/+linux/memory.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// TODO: Implement FreeBSD version
use errors;
use rt;
diff --git a/os/+linux/platform_environ.ha b/os/+linux/platform_environ.ha
index dee78dcb..1f2cb211 100644
--- a/os/+linux/platform_environ.ha
+++ b/os/+linux/platform_environ.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use math;
use rt;
diff --git a/os/+linux/status.ha b/os/+linux/status.ha
index 7abcc1c2..8ac600dd 100644
--- a/os/+linux/status.ha
+++ b/os/+linux/status.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// Values that may be passed to [[exit]] to indicate successful or unsuccessful
// termination, respectively.
export type status = enum {
diff --git a/os/+linux/stdfd.ha b/os/+linux/stdfd.ha
index 0fd49054..abf4b21e 100644
--- a/os/+linux/stdfd.ha
+++ b/os/+linux/stdfd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use bufio;
use io;
use rt;
diff --git a/os/environ.ha b/os/environ.ha
index 9551516a..6005803e 100644
--- a/os/environ.ha
+++ b/os/environ.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use errors;
use strings;
diff --git a/os/exec/cmd.ha b/os/exec/cmd.ha
index b88e0d63..cbedea6a 100644
--- a/os/exec/cmd.ha
+++ b/os/exec/cmd.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use ascii;
use errors;
use io;
diff --git a/os/exec/exec+freebsd.ha b/os/exec/exec+freebsd.ha
index bb366522..7e8e3967 100644
--- a/os/exec/exec+freebsd.ha
+++ b/os/exec/exec+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use rt;
diff --git a/os/exec/exec+linux.ha b/os/exec/exec+linux.ha
index 30a7f5ce..1aab3c39 100644
--- a/os/exec/exec+linux.ha
+++ b/os/exec/exec+linux.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use os;
diff --git a/os/exec/process+freebsd.ha b/os/exec/process+freebsd.ha
index 8cdd1f5e..ad0b3295 100644
--- a/os/exec/process+freebsd.ha
+++ b/os/exec/process+freebsd.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fmt;
use rt;
diff --git a/os/exec/process+linux.ha b/os/exec/process+linux.ha
index 9abdc1f5..1c71de97 100644
--- a/os/exec/process+linux.ha
+++ b/os/exec/process+linux.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fmt;
use rt;
diff --git a/os/exec/types.ha b/os/exec/types.ha
index e6bec844..6e56772f 100644
--- a/os/exec/types.ha
+++ b/os/exec/types.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fs;
use io;
diff --git a/os/os.ha b/os/os.ha
index 4d3688d6..55c53db9 100644
--- a/os/os.ha
+++ b/os/os.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use fs;
use io;
use path;
diff --git a/path/+freebsd.ha b/path/+freebsd.ha
index b4d5435d..7603cbbb 100644
--- a/path/+freebsd.ha
+++ b/path/+freebsd.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
// Platform-specific path separator byte.
export def SEP: u8 = '/';
diff --git a/path/+linux.ha b/path/+linux.ha
index b4d5435d..7603cbbb 100644
--- a/path/+linux.ha
+++ b/path/+linux.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
// Platform-specific path separator byte.
export def SEP: u8 = '/';
diff --git a/path/buffer.ha b/path/buffer.ha
index d5ce98f0..67f247f7 100644
--- a/path/buffer.ha
+++ b/path/buffer.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Humm <hummsmith42@gmail.com>
+
use bytes;
use strings;
diff --git a/path/error.ha b/path/error.ha
index b2870c18..4cba2422 100644
--- a/path/error.ha
+++ b/path/error.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// Returned when adding an extension if the path is root, or the final path
// segment consists entirely of dots.
export type cant_extend = !void;
diff --git a/path/ext_stack.ha b/path/ext_stack.ha
index 0a45187c..66cb5e50 100644
--- a/path/ext_stack.ha
+++ b/path/ext_stack.ha
@@ -1,4 +1,5 @@
// License: MPL-2.0
+
use bytes;
use strings;
diff --git a/path/iter.ha b/path/iter.ha
index a1ef705a..3fde1400 100644
--- a/path/iter.ha
+++ b/path/iter.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use strings;
diff --git a/path/posix.ha b/path/posix.ha
index 312c3270..3b88935e 100644
--- a/path/posix.ha
+++ b/path/posix.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use strings;
diff --git a/path/prefix.ha b/path/prefix.ha
index 39e55e87..75aea649 100644
--- a/path/prefix.ha
+++ b/path/prefix.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bytes;
use strings;
diff --git a/path/stack.ha b/path/stack.ha
index 3222aca5..bc6cbcd0 100644
--- a/path/stack.ha
+++ b/path/stack.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use strings;
diff --git a/regex/+test.ha b/regex/+test.ha
index d81e537d..ae544333 100644
--- a/regex/+test.ha
+++ b/regex/+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use fmt;
use strings;
use types;
diff --git a/regex/regex.ha b/regex/regex.ha
index 97892d14..31f07f89 100644
--- a/regex/regex.ha
+++ b/regex/regex.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use ascii;
use bufio;
use encoding::utf8;
diff --git a/rt/+aarch64/arch_jmp.ha b/rt/+aarch64/arch_jmp.ha
index 04eb4312..84a86216 100644
--- a/rt/+aarch64/arch_jmp.ha
+++ b/rt/+aarch64/arch_jmp.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export type arch_jmpbuf = [22]u64;
diff --git a/rt/+aarch64/backtrace.ha b/rt/+aarch64/backtrace.ha
index fd6f6eb2..7053d5c7 100644
--- a/rt/+aarch64/backtrace.ha
+++ b/rt/+aarch64/backtrace.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
fn getfp() **opaque;
diff --git a/rt/+aarch64/cpuid.ha b/rt/+aarch64/cpuid.ha
index 70b786d1..5c04987f 100644
--- a/rt/+aarch64/cpuid.ha
+++ b/rt/+aarch64/cpuid.ha
@@ -1 +1,3 @@
+// License: MPL-2.0
+
// TODO
diff --git a/rt/+freebsd/+aarch64.ha b/rt/+freebsd/+aarch64.ha
index aca36741..4578dcdd 100644
--- a/rt/+freebsd/+aarch64.ha
+++ b/rt/+freebsd/+aarch64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
export type siginfo = struct {
si_signo: int,
si_errno: int,
diff --git a/rt/+freebsd/+riscv64.ha b/rt/+freebsd/+riscv64.ha
index aca36741..4578dcdd 100644
--- a/rt/+freebsd/+riscv64.ha
+++ b/rt/+freebsd/+riscv64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
export type siginfo = struct {
si_signo: int,
si_errno: int,
diff --git a/rt/+freebsd/+x86_64.ha b/rt/+freebsd/+x86_64.ha
index aca36741..4578dcdd 100644
--- a/rt/+freebsd/+x86_64.ha
+++ b/rt/+freebsd/+x86_64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
export type siginfo = struct {
si_signo: int,
si_errno: int,
diff --git a/rt/+freebsd/env.ha b/rt/+freebsd/env.ha
index 4deb6423..016bdb35 100644
--- a/rt/+freebsd/env.ha
+++ b/rt/+freebsd/env.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export let argc: size = 0;
export let argv: *[*]*u8 = null: *[*]*u8;
diff --git a/rt/+freebsd/errno.ha b/rt/+freebsd/errno.ha
index c038cfe7..c63707c3 100644
--- a/rt/+freebsd/errno.ha
+++ b/rt/+freebsd/errno.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Represents an error returned from the FreeBSD kernel.
export type errno = !int;
diff --git a/rt/+freebsd/platform_abort.ha b/rt/+freebsd/platform_abort.ha
index aae7c890..cd021772 100644
--- a/rt/+freebsd/platform_abort.ha
+++ b/rt/+freebsd/platform_abort.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
fn platform_abort(path: *str, line: u64, col: u64, msg: str) void = {
const prefix = "Abort: ";
diff --git a/rt/+freebsd/platformstart.ha b/rt/+freebsd/platformstart.ha
index 0d1389e5..70be29b7 100644
--- a/rt/+freebsd/platformstart.ha
+++ b/rt/+freebsd/platformstart.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export fn start_freebsd(iv: *[*]uintptr) never = {
// TODO: Find & parse auxv
diff --git a/rt/+freebsd/segmalloc.ha b/rt/+freebsd/segmalloc.ha
index 0b96a74d..99d03ee1 100644
--- a/rt/+freebsd/segmalloc.ha
+++ b/rt/+freebsd/segmalloc.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Allocates a segment.
fn segmalloc(n: size) nullable *opaque = {
diff --git a/rt/+freebsd/signal.ha b/rt/+freebsd/signal.ha
index 66ec7f68..9ee3abf9 100644
--- a/rt/+freebsd/signal.ha
+++ b/rt/+freebsd/signal.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// TODO: work when _NSIG != 32
diff --git a/rt/+freebsd/socket.ha b/rt/+freebsd/socket.ha
index afc6b5c3..7bae6f5a 100644
--- a/rt/+freebsd/socket.ha
+++ b/rt/+freebsd/socket.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
export type sa_family_t = u8;
export type socklen_t = u32;
diff --git a/rt/+freebsd/syscallno.ha b/rt/+freebsd/syscallno.ha
index 21efcf55..4eff53a5 100644
--- a/rt/+freebsd/syscallno.ha
+++ b/rt/+freebsd/syscallno.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export def SYS_syscall: u64 = 0;
export def SYS_exit: u64 = 1;
diff --git a/rt/+freebsd/syscalls.ha b/rt/+freebsd/syscalls.ha
index 60af8e8d..e3c8bcd0 100644
--- a/rt/+freebsd/syscalls.ha
+++ b/rt/+freebsd/syscalls.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
fn syscall0(u64) u64;
fn syscall1(u64, u64) u64;
diff --git a/rt/+freebsd/types.ha b/rt/+freebsd/types.ha
index af43bdea..6621a7c9 100644
--- a/rt/+freebsd/types.ha
+++ b/rt/+freebsd/types.ha
@@ -1,8 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
export type time_t = i64;
export type suseconds_t = i64;
diff --git a/rt/+linux/+aarch64.ha b/rt/+linux/+aarch64.ha
index 847798f3..e0dc7970 100644
--- a/rt/+linux/+aarch64.ha
+++ b/rt/+linux/+aarch64.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
// #define __ADDR_BND_PKEY_PAD (_Alignof(void *) < sizeof(short) ? sizeof(short) : _Alignof(void *))
def __ADDR_BND_PKEY_PAD: size = 8;
diff --git a/rt/+linux/+riscv64.ha b/rt/+linux/+riscv64.ha
index 1d038694..2ede88e5 100644
--- a/rt/+linux/+riscv64.ha
+++ b/rt/+linux/+riscv64.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Michael Forney <mforney@mforney.org>
// #define __ADDR_BND_PKEY_PAD (_Alignof(void *) < sizeof(short) ? sizeof(short) : _Alignof(void *))
def __ADDR_BND_PKEY_PAD: size = 8;
diff --git a/rt/+linux/+x86_64.ha b/rt/+linux/+x86_64.ha
index 143c29c2..cb75bb33 100644
--- a/rt/+linux/+x86_64.ha
+++ b/rt/+linux/+x86_64.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// #define __ADDR_BND_PKEY_PAD (_Alignof(void *) < sizeof(short) ? sizeof(short) : _Alignof(void *))
def __ADDR_BND_PKEY_PAD: size = 8;
diff --git a/rt/+linux/env.ha b/rt/+linux/env.ha
index 4deb6423..016bdb35 100644
--- a/rt/+linux/env.ha
+++ b/rt/+linux/env.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export let argc: size = 0;
export let argv: *[*]*u8 = null: *[*]*u8;
diff --git a/rt/+linux/errno.ha b/rt/+linux/errno.ha
index c73c90d2..90b568c7 100644
--- a/rt/+linux/errno.ha
+++ b/rt/+linux/errno.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Represents an error returned from the Linux kernel.
export type errno = !int;
diff --git a/rt/+linux/platform_abort.ha b/rt/+linux/platform_abort.ha
index aae7c890..cd021772 100644
--- a/rt/+linux/platform_abort.ha
+++ b/rt/+linux/platform_abort.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
fn platform_abort(path: *str, line: u64, col: u64, msg: str) void = {
const prefix = "Abort: ";
diff --git a/rt/+linux/platformstart-libc.ha b/rt/+linux/platformstart-libc.ha
index 4d9e597a..4e7f4cc0 100644
--- a/rt/+linux/platformstart-libc.ha
+++ b/rt/+linux/platformstart-libc.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export fn start_linux(iv: *[*]uintptr) never = {
argc = iv[0]: size;
diff --git a/rt/+linux/prctl.ha b/rt/+linux/prctl.ha
index cddc5f9b..28692d02 100644
--- a/rt/+linux/prctl.ha
+++ b/rt/+linux/prctl.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
export def PR_SET_PDEATHSIG = 1;
export def PR_GET_PDEATHSIG = 2;
diff --git a/rt/+linux/segmalloc.ha b/rt/+linux/segmalloc.ha
index 0b96a74d..99d03ee1 100644
--- a/rt/+linux/segmalloc.ha
+++ b/rt/+linux/segmalloc.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Allocates a segment.
fn segmalloc(n: size) nullable *opaque = {
diff --git a/rt/+linux/signal.ha b/rt/+linux/signal.ha
index 301e1ec1..7980f154 100644
--- a/rt/+linux/signal.ha
+++ b/rt/+linux/signal.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
// TODO: work when _NSIG != 64
diff --git a/rt/+linux/socket.ha b/rt/+linux/socket.ha
index 12db9d4b..eb7a5972 100644
--- a/rt/+linux/socket.ha
+++ b/rt/+linux/socket.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
export type sa_family_t = u16;
export type socklen_t = uint;
diff --git a/rt/+linux/stat.ha b/rt/+linux/stat.ha
index 693cee43..f4512ef1 100644
--- a/rt/+linux/stat.ha
+++ b/rt/+linux/stat.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export fn mkdev(major: u32, minor: u32) dev_t =
((major: u64 & 0xFFFFF000) << 32) |
diff --git a/rt/+linux/syscallno+aarch64.ha b/rt/+linux/syscallno+aarch64.ha
index eddfa813..c165865d 100644
--- a/rt/+linux/syscallno+aarch64.ha
+++ b/rt/+linux/syscallno+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export def SYS_io_setup: u64 = 0;
export def SYS_io_destroy: u64 = 1;
diff --git a/rt/+linux/syscallno+riscv64.ha b/rt/+linux/syscallno+riscv64.ha
index 8174bc25..aa023618 100644
--- a/rt/+linux/syscallno+riscv64.ha
+++ b/rt/+linux/syscallno+riscv64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export def SYS_io_setup: u64 = 0;
export def SYS_io_destroy: u64 = 1;
diff --git a/rt/+linux/syscallno+x86_64.ha b/rt/+linux/syscallno+x86_64.ha
index 1a5d689a..1e513d01 100644
--- a/rt/+linux/syscallno+x86_64.ha
+++ b/rt/+linux/syscallno+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export def SYS_read: u64 = 0;
export def SYS_write: u64 = 1;
diff --git a/rt/+linux/syscalls.ha b/rt/+linux/syscalls.ha
index 6db4af44..6f75f035 100644
--- a/rt/+linux/syscalls.ha
+++ b/rt/+linux/syscalls.ha
@@ -1,10 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
-// (c) 2022 Vincent Dagonneau <v@vda.io>
fn syscall0(u64) u64;
fn syscall1(u64, u64) u64;
diff --git a/rt/+linux/types.ha b/rt/+linux/types.ha
index 0936c037..f66ad03e 100644
--- a/rt/+linux/types.ha
+++ b/rt/+linux/types.ha
@@ -1,12 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
-// (c) 2022 Vincent Dagonneau <v@vda.io>
export type off_t = u64;
export type dev_t = u64;
diff --git a/rt/+riscv64/arch_jmp.ha b/rt/+riscv64/arch_jmp.ha
index bed9ac33..8d8d65da 100644
--- a/rt/+riscv64/arch_jmp.ha
+++ b/rt/+riscv64/arch_jmp.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export type arch_jmpbuf = [26]u64;
diff --git a/rt/+riscv64/backtrace.ha b/rt/+riscv64/backtrace.ha
index ba8cc2a4..3212dd6c 100644
--- a/rt/+riscv64/backtrace.ha
+++ b/rt/+riscv64/backtrace.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
fn getfp() **opaque;
diff --git a/rt/+riscv64/cpuid.ha b/rt/+riscv64/cpuid.ha
index 70b786d1..5c04987f 100644
--- a/rt/+riscv64/cpuid.ha
+++ b/rt/+riscv64/cpuid.ha
@@ -1 +1,3 @@
+// License: MPL-2.0
+
// TODO
diff --git a/rt/+riscv64/fenv.s b/rt/+riscv64/fenv.s
index ce1fd644..465d3a84 100644
--- a/rt/+riscv64/fenv.s
+++ b/rt/+riscv64/fenv.s
@@ -1,6 +1,3 @@
-# License: MPL-2.0
-# (c) 2022 Alexey Yerin <yyp@disroot.org>
-
.section ".text.rt.feclearexcept","ax"
.global rt.feclearexcept
.type rt.feclearexcept,@function
diff --git a/rt/+test/signal_test.ha b/rt/+test/signal_test.ha
index 8ff7aa17..3df7daa4 100644
--- a/rt/+test/signal_test.ha
+++ b/rt/+test/signal_test.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Jose Lombera <jose@lombera.dev>
// Test sigset operations do not fail for valid signal numbers.
@test fn sigset_valid_signum() void = {
diff --git a/rt/+x86_64/arch_jmp.ha b/rt/+x86_64/arch_jmp.ha
index c14186c5..2f0d9318 100644
--- a/rt/+x86_64/arch_jmp.ha
+++ b/rt/+x86_64/arch_jmp.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export type arch_jmpbuf = [8]u64;
diff --git a/rt/+x86_64/backtrace.ha b/rt/+x86_64/backtrace.ha
index e9436ff9..f0d0ae39 100644
--- a/rt/+x86_64/backtrace.ha
+++ b/rt/+x86_64/backtrace.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
fn getfp() **opaque;
diff --git a/rt/+x86_64/cpuid.ha b/rt/+x86_64/cpuid.ha
index 4bff9ec1..6a21b7d4 100644
--- a/rt/+x86_64/cpuid.ha
+++ b/rt/+x86_64/cpuid.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
export type cpuid_vendor = enum {
AMD,
INTEL,
diff --git a/rt/abort+test.ha b/rt/abort+test.ha
index 24977a34..d6704350 100644
--- a/rt/abort+test.ha
+++ b/rt/abort+test.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
export type abort_reason = struct {
path: nullable *str,
diff --git a/rt/abort.ha b/rt/abort.ha
index fd4b1200..cc39fb70 100644
--- a/rt/abort.ha
+++ b/rt/abort.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export @symbol("rt.abort") fn _abort(
path: *str,
diff --git a/rt/ensure.ha b/rt/ensure.ha
index 647b5249..808431d5 100644
--- a/rt/ensure.ha
+++ b/rt/ensure.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
export type slice = struct {
data: nullable *opaque,
diff --git a/rt/fenv_defs.ha b/rt/fenv_defs.ha
index 5fc74cc3..5f6df421 100644
--- a/rt/fenv_defs.ha
+++ b/rt/fenv_defs.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
export fn feclearexcept(ex: uint) void;
export fn feraiseexcept(ex: uint) void;
diff --git a/rt/jmp.ha b/rt/jmp.ha
index c956a38d..2523ac46 100644
--- a/rt/jmp.ha
+++ b/rt/jmp.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export type jmpbuf = struct {
__jb: arch_jmpbuf,
diff --git a/rt/malloc+debug.ha b/rt/malloc+debug.ha
index 29f7f2bb..ed8fd729 100644
--- a/rt/malloc+debug.ha
+++ b/rt/malloc+debug.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// This is a very simple "debug" allocator which works by allocating only via
// mmap and returning pointers to the end of the segment such that any writes
diff --git a/rt/malloc+libc.ha b/rt/malloc+libc.ha
index 3e9ccece..98555070 100644
--- a/rt/malloc+libc.ha
+++ b/rt/malloc+libc.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
// Allocates n bytes of memory and returns a pointer to them, or null if there
// is insufficient memory.
diff --git a/rt/malloc.ha b/rt/malloc.ha
index 0598ba70..218b3718 100644
--- a/rt/malloc.ha
+++ b/rt/malloc.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// This is a simple memory allocator, based on
// Appel, Andrew W., and David A. Naumann. "Verified sequential malloc/free"
// but with logarithmic bin sizing and additional safety checks. Not thread-safe
diff --git a/rt/memcpy.ha b/rt/memcpy.ha
index b49175cd..91e6e7fa 100644
--- a/rt/memcpy.ha
+++ b/rt/memcpy.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
def MOD32 = size(u32) - 1;
diff --git a/rt/memmove.ha b/rt/memmove.ha
index 597a1fee..be00cbfb 100644
--- a/rt/memmove.ha
+++ b/rt/memmove.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
def SZSZ = size(size);
def MODSZ = size(size) - 1;
diff --git a/rt/memset.ha b/rt/memset.ha
index 7c5f6200..87911026 100644
--- a/rt/memset.ha
+++ b/rt/memset.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
export fn memset(dest: *opaque, val: u8, n: size) void = {
// implementation adapted from musl libc
diff --git a/rt/start+libc.ha b/rt/start+libc.ha
index fbaa9356..191fcaef 100644
--- a/rt/start+libc.ha
+++ b/rt/start+libc.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
@symbol(".main") fn main() void;
@symbol("exit") fn c_exit(status: int) never;
diff --git a/rt/start+test+libc.ha b/rt/start+test+libc.ha
index fd95de60..594d0ace 100644
--- a/rt/start+test+libc.ha
+++ b/rt/start+test+libc.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
@symbol("__test_main") fn test_main() size;
diff --git a/rt/start+test.ha b/rt/start+test.ha
index 673fc36c..8e361a6e 100644
--- a/rt/start+test.ha
+++ b/rt/start+test.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
@symbol("__test_main") fn test_main() size;
diff --git a/rt/start.ha b/rt/start.ha
index 732407aa..44e55d9f 100644
--- a/rt/start.ha
+++ b/rt/start.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
@symbol("main") fn main() void;
diff --git a/rt/strcmp.ha b/rt/strcmp.ha
index a58c84ea..49690bca 100644
--- a/rt/strcmp.ha
+++ b/rt/strcmp.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
type string = struct {
data: *[*]u8,
diff --git a/rt/u64tos.ha b/rt/u64tos.ha
index cb00dcc7..12679598 100644
--- a/rt/u64tos.ha
+++ b/rt/u64tos.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
fn u64tos(u: u64) (*const u8, size) = {
static let buf: [20]u8 = [0...]; // len("18446744073709551615")
let sl = buf[..0];
diff --git a/rt/unknown_errno.ha b/rt/unknown_errno.ha
index 5029b330..94075675 100644
--- a/rt/unknown_errno.ha
+++ b/rt/unknown_errno.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
fn unknown_errno(err: errno) str = {
static let buf: [27]u8 = [0...];
const s = *(&"[unknown errno ": *[]u8);
diff --git a/scripts/copyright.sh b/scripts/copyright.sh
new file mode 100755
index 00000000..bdf63eea
--- /dev/null
+++ b/scripts/copyright.sh
@@ -0,0 +1,30 @@
+#!/bin/sh -eu
+
+# XXX: technically doesn't work with paths that have newlines in them, but
+# find -exec doesn't propagate the exit status
+find . -name '*.ha' | while read -r f; do
+ awk 'BEGIN { state = "start" }
+ state == "start" {
+ if ($0 !~ /^\/\/ License: /) {
+ print "missing copyright header in " FILENAME
+ exit 1
+ }
+ state = "comment"
+ next
+ }
+ state == "comment" && $0 !~ /^\/\// {
+ if ($0 != "") {
+ print "missing empty line after copyright header in " FILENAME
+ exit 1
+ }
+ state = "postheader"
+ next
+ }
+ state == "postheader" {
+ if ($0 == "") {
+ print "extra empty line after copyright header in " FILENAME
+ exit 1
+ }
+ exit 0
+ }' "$f"
+done
diff --git a/shlex/+test.ha b/shlex/+test.ha
index 02b6242f..134cc5a5 100644
--- a/shlex/+test.ha
+++ b/shlex/+test.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use io;
use memio;
use strings;
diff --git a/shlex/escape.ha b/shlex/escape.ha
index 05365852..f9e1d36c 100644
--- a/shlex/escape.ha
+++ b/shlex/escape.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use ascii;
use encoding::utf8;
use io;
diff --git a/shlex/split.ha b/shlex/split.ha
index 98703e6d..a0950392 100644
--- a/shlex/split.ha
+++ b/shlex/split.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use io;
use memio;
use strings;
diff --git a/sort/+test.ha b/sort/+test.ha
index 5069319d..ece043db 100644
--- a/sort/+test.ha
+++ b/sort/+test.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
use math::random;
use sort::cmp;
diff --git a/sort/bisect.ha b/sort/bisect.ha
index 19e1d4e7..fcb57255 100644
--- a/sort/bisect.ha
+++ b/sort/bisect.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
// Determines the index that 'elem' should be inserted into sorted slice 'in'.
// If 'elem' already appears in the slice, inserting to the returned index will
diff --git a/sort/cmp/cmp.ha b/sort/cmp/cmp.ha
index b9c23f82..73719bf6 100644
--- a/sort/cmp/cmp.ha
+++ b/sort/cmp/cmp.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use strings;
// [[sort::cmpfunc]] for use with int.
diff --git a/sort/search.ha b/sort/search.ha
index 5ae78ffd..5dc245a8 100644
--- a/sort/search.ha
+++ b/sort/search.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Performs a binary search over a sorted slice. If the key is found, index of
// the matching item in the slice is returned. Otherwise, void is returned.
diff --git a/sort/sort.ha b/sort/sort.ha
index 54713bdb..b48b9855 100644
--- a/sort/sort.ha
+++ b/sort/sort.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Steven Guikal <void@fluix.one>
use math;
use types;
diff --git a/sort/types.ha b/sort/types.ha
index 333cb74a..2d3241ff 100644
--- a/sort/types.ha
+++ b/sort/types.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
// This function type is used when sorting and searching. Given two pointers to
// values, a function of this type should return an integer less than, equal to,
diff --git a/strconv/+test/stoi_test.ha b/strconv/+test/stoi_test.ha
index 363abd89..adb01b1a 100644
--- a/strconv/+test/stoi_test.ha
+++ b/strconv/+test/stoi_test.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use types;
@test fn stoi() void = {
diff --git a/strconv/+test/stou_test.ha b/strconv/+test/stou_test.ha
index 75022ab8..4aec1536 100644
--- a/strconv/+test/stou_test.ha
+++ b/strconv/+test/stou_test.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
@test fn stou() void = {
assert(stou64("") as invalid == 0: invalid);
diff --git a/strconv/ftos.ha b/strconv/ftos.ha
index da996d33..d35cfed9 100644
--- a/strconv/ftos.ha
+++ b/strconv/ftos.ha
@@ -1,10 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
-// (c) 2021 Sudipto Mallick <smlckz@envs.net>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
// Using Ryū: fast float-to-string conversion algorithm by Ulf Adams.
// https://doi.org/10.1145/3192366.3192369
diff --git a/strconv/ftostof+test.ha b/strconv/ftostof+test.ha
index 1264e7b0..1d3b636f 100644
--- a/strconv/ftostof+test.ha
+++ b/strconv/ftostof+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use math;
// test round-trip accuracy of ftos followed by stof.
diff --git a/strconv/itos.ha b/strconv/itos.ha
index 8ce80640..6832d40a 100644
--- a/strconv/itos.ha
+++ b/strconv/itos.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use types;
use strings;
diff --git a/strconv/numeric.ha b/strconv/numeric.ha
index e38e510e..49757a7c 100644
--- a/strconv/numeric.ha
+++ b/strconv/numeric.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021-2022 Ember Sawady <ecs@d2evs.net>
+
use types;
// Converts any [[types::signed]] to a string in a given base. The return value is
diff --git a/strconv/stof.ha b/strconv/stof.ha
index e6d5016e..8d191285 100644
--- a/strconv/stof.ha
+++ b/strconv/stof.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
// Using the Eisel-Lemire algorithm [1] for fast parsing of floating-point
// numbers, with Simple Decimal Conversion algorithm [2] as fallback.
diff --git a/strconv/stof_data.ha b/strconv/stof_data.ha
index 08c86860..a09893de 100644
--- a/strconv/stof_data.ha
+++ b/strconv/stof_data.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
const left_shift_table: [65]u16 = [
0x0000, 0x0800, 0x0801, 0x0803, 0x1006, 0x1009, 0x100D, 0x1812, 0x1817,
diff --git a/strconv/stoi.ha b/strconv/stoi.ha
index 72732343..f63a8b9e 100644
--- a/strconv/stoi.ha
+++ b/strconv/stoi.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use types;
use strings;
diff --git a/strconv/stou.ha b/strconv/stou.ha
index 34822b7e..e34264bb 100644
--- a/strconv/stou.ha
+++ b/strconv/stou.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use strings;
use types;
use ascii;
diff --git a/strconv/types.ha b/strconv/types.ha
index a62e0ff0..c0a1b9a9 100644
--- a/strconv/types.ha
+++ b/strconv/types.ha
@@ -1,7 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// Indicates that the input string doesn't have the requested number format
// (integer or float). Contains the index of the first invalid rune.
diff --git a/strconv/utos.ha b/strconv/utos.ha
index d55af8f9..fa2fbf3a 100644
--- a/strconv/utos.ha
+++ b/strconv/utos.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021 Armin Weigl <tb46305@gmail.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use bytes;
use types;
diff --git a/strings/compare.ha b/strings/compare.ha
index ed6123d3..40e3d86b 100644
--- a/strings/compare.ha
+++ b/strings/compare.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// Compares two strings by their Unicode codepoint sort order. Zero is returned
// if the strings are equal, a negative value if a is less than b, or a positive
// value if a is greater than b.
diff --git a/strings/concat.ha b/strings/concat.ha
index b7cc6755..36775f7b 100644
--- a/strings/concat.ha
+++ b/strings/concat.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Concatenates two or more strings. The caller must free the return value.
export fn concat(strs: str...) str = {
diff --git a/strings/contains.ha b/strings/contains.ha
index 65212385..13ffe39b 100644
--- a/strings/contains.ha
+++ b/strings/contains.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use bytes;
use encoding::utf8;
diff --git a/strings/dup.ha b/strings/dup.ha
index a0cbe4c5..06923d4a 100644
--- a/strings/dup.ha
+++ b/strings/dup.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use types;
// Duplicates a string. Aborts on allocation failure.
diff --git a/strings/index.ha b/strings/index.ha
index aecfac00..95a12e1f 100644
--- a/strings/index.ha
+++ b/strings/index.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use bytes;
use encoding::utf8;
diff --git a/strings/iter.ha b/strings/iter.ha
index 47fde6e5..4f37f7f4 100644
--- a/strings/iter.ha
+++ b/strings/iter.ha
@@ -1,9 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Ajay R <ar324@protonmail.com>
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Miccah Castorina <contact@miccah.io>
+
use encoding::utf8;
export type iterator = struct {
diff --git a/strings/pad.ha b/strings/pad.ha
index 4dc91717..a5a51d05 100644
--- a/strings/pad.ha
+++ b/strings/pad.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use encoding::utf8;
// Pads a string's start with 'prefix' until it reaches length 'target_len'.
diff --git a/strings/replace.ha b/strings/replace.ha
index 146dc7c8..9f542a04 100644
--- a/strings/replace.ha
+++ b/strings/replace.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Vlad-Stefan Harbuz <vlad@vladh.net>
use bytes;
diff --git a/strings/runes.ha b/strings/runes.ha
index 0a152c4e..2f78d984 100644
--- a/strings/runes.ha
+++ b/strings/runes.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Byron Torres <b@torresjrjr.com>
+
use encoding::utf8;
// Returns a slice of runes for a string in O(n). The caller must free the
diff --git a/strings/sub.ha b/strings/sub.ha
index 5f069a59..05ec151b 100644
--- a/strings/sub.ha
+++ b/strings/sub.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Andri Yngvason <andri@yngvason.is>
-// (c) 2021-2022 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use encoding::utf8;
export type end = void;
diff --git a/strings/suffix.ha b/strings/suffix.ha
index af2a5959..83fade26 100644
--- a/strings/suffix.ha
+++ b/strings/suffix.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Thomas Bracht Laumann Jespersen <t@laumann.xyz>
+
use bytes;
use encoding::utf8;
diff --git a/strings/template/template.ha b/strings/template/template.ha
index 8fa1d1ec..38c21c88 100644
--- a/strings/template/template.ha
+++ b/strings/template/template.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use ascii;
use errors;
use fmt;
diff --git a/strings/tokenize.ha b/strings/tokenize.ha
index 05325478..8c05afb5 100644
--- a/strings/tokenize.ha
+++ b/strings/tokenize.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Bor Grošelj Simić <bor.groseljsimic@telemach.net>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
+
use bytes;
use types;
diff --git a/strings/trim.ha b/strings/trim.ha
index a6652165..4633efdc 100644
--- a/strings/trim.ha
+++ b/strings/trim.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Miccah Castorina <contact@miccah.io>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
+
use bytes;
use encoding::utf8;
diff --git a/strings/utf8.ha b/strings/utf8.ha
index 8cabd370..c370283f 100644
--- a/strings/utf8.ha
+++ b/strings/utf8.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
+
use encoding::utf8;
use types;
diff --git a/temp/+freebsd.ha b/temp/+freebsd.ha
index 4112c768..6352c5ae 100644
--- a/temp/+freebsd.ha
+++ b/temp/+freebsd.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use crypto::random;
use encoding::hex;
use errors;
diff --git a/temp/+linux.ha b/temp/+linux.ha
index 92e73ecc..11611d6a 100644
--- a/temp/+linux.ha
+++ b/temp/+linux.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021-2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2022 Jon Eskin <eskinjp@gmail.com>
+
use crypto::random;
use encoding::hex;
use errors;
diff --git a/test/+test.ha b/test/+test.ha
index 20c95d42..cf2feaa7 100644
--- a/test/+test.ha
+++ b/test/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bufio;
use encoding::hex;
use encoding::utf8;
diff --git a/test/common.ha b/test/common.ha
index f72196e9..0c7948b6 100644
--- a/test/common.ha
+++ b/test/common.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
let want_abort = false;
// Expect the currently running test to abort. The test will fail if it doesn't
diff --git a/test/fail+test.ha b/test/fail+test.ha
index dc557ded..5c9187de 100644
--- a/test/fail+test.ha
+++ b/test/fail+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use os;
@test fn _abort() void = {
diff --git a/time/+freebsd/functions.ha b/time/+freebsd/functions.ha
index eaf52d5c..054b9651 100644
--- a/time/+freebsd/functions.ha
+++ b/time/+freebsd/functions.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use rt;
// Converts a [[duration]] to an [[rt::timespec]]. This function is
diff --git a/time/+linux/+aarch64.ha b/time/+linux/+aarch64.ha
index 8a7922fd..621538cc 100644
--- a/time/+linux/+aarch64.ha
+++ b/time/+linux/+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
def VDSO_CGT_SYM: str = "__kernel_clock_gettime";
def VDSO_CGT_VER: str = "LINUX_2.6.39";
diff --git a/time/+linux/+riscv64.ha b/time/+linux/+riscv64.ha
index 9653d429..6e37d38d 100644
--- a/time/+linux/+riscv64.ha
+++ b/time/+linux/+riscv64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
def VDSO_CGT_SYM: str = "__kernel_clock_gettime";
def VDSO_CGT_VER: str = "LINUX_4.15";
diff --git a/time/+linux/+x86_64.ha b/time/+linux/+x86_64.ha
index 0c846d20..42f68d02 100644
--- a/time/+linux/+x86_64.ha
+++ b/time/+linux/+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
def VDSO_CGT_SYM: str = "__vdso_clock_gettime";
def VDSO_CGT_VER: str = "LINUX_2.6";
diff --git a/time/+linux/functions.ha b/time/+linux/functions.ha
index 2a91bace..c6c073e5 100644
--- a/time/+linux/functions.ha
+++ b/time/+linux/functions.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Mykyta Holubakha <hilobakho@gmail.com>
+
use rt;
use linux::vdso;
diff --git a/time/arithm.ha b/time/arithm.ha
index c4445f81..58101c11 100644
--- a/time/arithm.ha
+++ b/time/arithm.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Byron Torres <b@torresjrjr.com>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use math;
// Adds a [[duration]] to an [[instant]], returning an instant further in the
diff --git a/time/chrono/+freebsd.ha b/time/chrono/+freebsd.ha
index cdafe82f..7bf88551 100644
--- a/time/chrono/+freebsd.ha
+++ b/time/chrono/+freebsd.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
def LOCALTIME_PATH: str = "/etc/localtime";
def ZONEINFO_PREFIX: str = "/usr/share/zoneinfo/";
diff --git a/time/chrono/+linux.ha b/time/chrono/+linux.ha
index cdafe82f..7bf88551 100644
--- a/time/chrono/+linux.ha
+++ b/time/chrono/+linux.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
def LOCALTIME_PATH: str = "/etc/localtime";
def ZONEINFO_PREFIX: str = "/usr/share/zoneinfo/";
diff --git a/time/chrono/arithmetic.ha b/time/chrono/arithmetic.ha
index 47ca1ab7..d1f357aa 100644
--- a/time/chrono/arithmetic.ha
+++ b/time/chrono/arithmetic.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Byron Torres <b@torresjrjr.com>
+
use time;
// Compares two [[moment]]s. Returns -1 if a precedes b, 0 if a and b are
diff --git a/time/chrono/chronology.ha b/time/chrono/chronology.ha
index e86764a2..f4232cc1 100644
--- a/time/chrono/chronology.ha
+++ b/time/chrono/chronology.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use time;
// Invalid [[moment]].
diff --git a/time/chrono/error.ha b/time/chrono/error.ha
index 78876f5b..8abc8d83 100644
--- a/time/chrono/error.ha
+++ b/time/chrono/error.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Byron Torres <b@torresjrjr.com>
+
use encoding::utf8;
use fmt;
use fs;
diff --git a/time/chrono/leapsec.ha b/time/chrono/leapsec.ha
index afe2de34..d531ebb3 100644
--- a/time/chrono/leapsec.ha
+++ b/time/chrono/leapsec.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use bufio;
use encoding::utf8;
use fs;
diff --git a/time/chrono/timescale.ha b/time/chrono/timescale.ha
index 0137a0d4..dfcbbd2c 100644
--- a/time/chrono/timescale.ha
+++ b/time/chrono/timescale.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use time;
// Represents a scale of time; a time standard. See [[convert]].
diff --git a/time/chrono/timezone.ha b/time/chrono/timezone.ha
index 9051b6f9..12cdf033 100644
--- a/time/chrono/timezone.ha
+++ b/time/chrono/timezone.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use bufio;
use io;
use os;
diff --git a/time/chrono/tzdb.ha b/time/chrono/tzdb.ha
index 5a1794a2..214369bc 100644
--- a/time/chrono/tzdb.ha
+++ b/time/chrono/tzdb.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use bufio;
use bytes;
use encoding::utf8;
diff --git a/time/conv.ha b/time/conv.ha
index 06660390..048a1563 100644
--- a/time/conv.ha
+++ b/time/conv.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
// Converts a given [[instant]] to a Unix timestamp.
// Note, nanosecond information is lost during conversion.
export fn unix(i: instant) i64 = i.sec;
diff --git a/time/date/date.ha b/time/date/date.ha
index aeb374cb..feb30d09 100644
--- a/time/date/date.ha
+++ b/time/date/date.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use time;
use time::chrono;
diff --git a/time/date/daydate.ha b/time/date/daydate.ha
index ce77e502..6562702a 100644
--- a/time/date/daydate.ha
+++ b/time/date/daydate.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
-// (c) 2021-2022 Vlad-Stefan Harbuz <vlad@vladh.net>
// Hare internally uses the Unix epoch (1970-01-01) for calendrical logic. Here
// we provide useful constant for working with the astronomically numbered
diff --git a/time/date/daytime.ha b/time/date/daytime.ha
index cdcfdf15..0b811dc1 100644
--- a/time/date/daytime.ha
+++ b/time/date/daytime.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use time;
// Calculates the wall clock (hour, minute, second, nanosecond),
diff --git a/time/date/error.ha b/time/date/error.ha
index 78ee7cdc..dd023c9c 100644
--- a/time/date/error.ha
+++ b/time/date/error.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2023 Byron Torres <b@torresjrjr.com>
// All possible errors returned from [[date]].
export type error = !(insufficient | invalid | parsefail);
diff --git a/time/date/format.ha b/time/date/format.ha
index 72a9fd98..cc249fd8 100644
--- a/time/date/format.ha
+++ b/time/date/format.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021-2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use ascii;
use fmt;
use io;
diff --git a/time/date/locality.ha b/time/date/locality.ha
index eb7ea52b..c85339da 100644
--- a/time/date/locality.ha
+++ b/time/date/locality.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use time;
use time::chrono;
diff --git a/time/date/observe.ha b/time/date/observe.ha
index c64f6e54..e3e2b221 100644
--- a/time/date/observe.ha
+++ b/time/date/observe.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use time::chrono;
// These functions are renamed to avoid namespace conflicts, like in the
diff --git a/time/date/parithm.ha b/time/date/parithm.ha
index 5ddc24c6..9be951f4 100644
--- a/time/date/parithm.ha
+++ b/time/date/parithm.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021-2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use fmt;
use math;
use time;
diff --git a/time/date/parse.ha b/time/date/parse.ha
index 56f0579c..9faa7175 100644
--- a/time/date/parse.ha
+++ b/time/date/parse.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
-// (c) 2021-2022 Vlad-Stefan Harbuz <vlad@vladh.net>
+
use ascii;
use io;
use strconv;
diff --git a/time/date/period.ha b/time/date/period.ha
index d0c8bc8d..bb1db7a2 100644
--- a/time/date/period.ha
+++ b/time/date/period.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2023 Byron Torres <b@torresjrjr.com>
// Represents a span of time in the Gregorian chronology, using nominal units of
// time. Used for chronological arithmetic.
diff --git a/time/date/reckon.ha b/time/date/reckon.ha
index fe4374a5..a18a2de4 100644
--- a/time/date/reckon.ha
+++ b/time/date/reckon.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Byron Torres <b@torresjrjr.com>
+
use time;
use time::chrono;
diff --git a/time/date/tarithm.ha b/time/date/tarithm.ha
index f8591977..1d6b25f9 100644
--- a/time/date/tarithm.ha
+++ b/time/date/tarithm.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Byron Torres <b@torresjrjr.com>
+
use time;
// Adds a [[time::duration]] to a [[date]] with [[time::add]]. This is a
diff --git a/time/date/virtual.ha b/time/date/virtual.ha
index f31d400c..d099865b 100644
--- a/time/date/virtual.ha
+++ b/time/date/virtual.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Byron Torres <b@torresjrjr.com>
+
use time;
use time::chrono;
diff --git a/time/types.ha b/time/types.ha
index 5228854c..826aaeae 100644
--- a/time/types.ha
+++ b/time/types.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use types;
// The elapsed time between two instants, in nanoseconds. The largest
diff --git a/types/arch+aarch64.ha b/types/arch+aarch64.ha
index d8538ba4..ea270075 100644
--- a/types/arch+aarch64.ha
+++ b/types/arch+aarch64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Minimum value which can be stored in an int type.
export def INT_MIN: int = I32_MIN;
diff --git a/types/arch+riscv64.ha b/types/arch+riscv64.ha
index d8538ba4..ea270075 100644
--- a/types/arch+riscv64.ha
+++ b/types/arch+riscv64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Minimum value which can be stored in an int type.
export def INT_MIN: int = I32_MIN;
diff --git a/types/arch+x86_64.ha b/types/arch+x86_64.ha
index d8538ba4..ea270075 100644
--- a/types/arch+x86_64.ha
+++ b/types/arch+x86_64.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// Minimum value which can be stored in an int type.
export def INT_MIN: int = I32_MIN;
diff --git a/types/c/+test.ha b/types/c/+test.ha
index c7e309d7..05c93eea 100644
--- a/types/c/+test.ha
+++ b/types/c/+test.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
@test fn sizes() void = {
static assert(size(char) == size(schar));
static assert(size(char) == size(uchar));
diff --git a/types/c/arch+aarch64.ha b/types/c/arch+aarch64.ha
index 492b6739..7576d0f3 100644
--- a/types/c/arch+aarch64.ha
+++ b/types/c/arch+aarch64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use types;
// Integer type compatible with `char`, as specified by ISO/IEC 9899.
diff --git a/types/c/arch+riscv64.ha b/types/c/arch+riscv64.ha
index 492b6739..7576d0f3 100644
--- a/types/c/arch+riscv64.ha
+++ b/types/c/arch+riscv64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use types;
// Integer type compatible with `char`, as specified by ISO/IEC 9899.
diff --git a/types/c/arch+x86_64.ha b/types/c/arch+x86_64.ha
index 1ed67904..afb86080 100644
--- a/types/c/arch+x86_64.ha
+++ b/types/c/arch+x86_64.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use types;
// Integer type compatible with `char`, as specified by ISO/IEC 9899.
diff --git a/types/c/strings.ha b/types/c/strings.ha
index 954fa630..30f75123 100644
--- a/types/c/strings.ha
+++ b/types/c/strings.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use encoding::utf8;
use types;
diff --git a/types/c/types.ha b/types/c/types.ha
index b3101dbc..2d22bf09 100644
--- a/types/c/types.ha
+++ b/types/c/types.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use types;
// Integer type compatible with `char8_t`, as defined in <uchar.h> and specified
diff --git a/types/classes.ha b/types/classes.ha
index 4b98d017..c363892b 100644
--- a/types/classes.ha
+++ b/types/classes.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
// A tagged union of all signed integer types.
export type signed = (i8 | i16 | i32 | i64 | int);
diff --git a/types/limits.ha b/types/limits.ha
index 22484d08..4afe9351 100644
--- a/types/limits.ha
+++ b/types/limits.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Sudipto Mallick <smlckz@disroot.org>
// Minimum value which can be stored in an i8 type.
export def I8_MIN: i8 = -128;
diff --git a/unix/+freebsd/getuid.ha b/unix/+freebsd/getuid.ha
index f5be0b4d..fd3f48a4 100644
--- a/unix/+freebsd/getuid.ha
+++ b/unix/+freebsd/getuid.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use rt;
// Returns the current process user ID.
diff --git a/unix/+freebsd/groups.ha b/unix/+freebsd/groups.ha
index c4aca2cf..6958ba77 100644
--- a/unix/+freebsd/groups.ha
+++ b/unix/+freebsd/groups.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use rt;
// Returns a list of supplementary group IDs for the current process.
diff --git a/unix/+freebsd/nice.ha b/unix/+freebsd/nice.ha
index 7ea10ecf..a7b881b5 100644
--- a/unix/+freebsd/nice.ha
+++ b/unix/+freebsd/nice.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
diff --git a/unix/+freebsd/pipe.ha b/unix/+freebsd/pipe.ha
index 1dd04662..15ba938e 100644
--- a/unix/+freebsd/pipe.ha
+++ b/unix/+freebsd/pipe.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use rt;
diff --git a/unix/+freebsd/setuid.ha b/unix/+freebsd/setuid.ha
index 5c379535..a870af71 100644
--- a/unix/+freebsd/setuid.ha
+++ b/unix/+freebsd/setuid.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use rt;
// Sets the caller's user ID to the specified value. This generally requires
diff --git a/unix/+freebsd/umask.ha b/unix/+freebsd/umask.ha
index dba1eec3..27f6bfcb 100644
--- a/unix/+freebsd/umask.ha
+++ b/unix/+freebsd/umask.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use fs;
use rt;
diff --git a/unix/+linux/getuid.ha b/unix/+linux/getuid.ha
index f5be0b4d..fd3f48a4 100644
--- a/unix/+linux/getuid.ha
+++ b/unix/+linux/getuid.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
+
use rt;
// Returns the current process user ID.
diff --git a/unix/+linux/groups.ha b/unix/+linux/groups.ha
index c4aca2cf..6958ba77 100644
--- a/unix/+linux/groups.ha
+++ b/unix/+linux/groups.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use rt;
// Returns a list of supplementary group IDs for the current process.
diff --git a/unix/+linux/nice.ha b/unix/+linux/nice.ha
index 7ea10ecf..a7b881b5 100644
--- a/unix/+linux/nice.ha
+++ b/unix/+linux/nice.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use rt;
diff --git a/unix/+linux/pipe.ha b/unix/+linux/pipe.ha
index 50b84806..15ba938e 100644
--- a/unix/+linux/pipe.ha
+++ b/unix/+linux/pipe.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use rt;
diff --git a/unix/+linux/setuid.ha b/unix/+linux/setuid.ha
index 5c379535..a870af71 100644
--- a/unix/+linux/setuid.ha
+++ b/unix/+linux/setuid.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use rt;
// Sets the caller's user ID to the specified value. This generally requires
diff --git a/unix/+linux/umask.ha b/unix/+linux/umask.ha
index c344f96e..3bc16fbb 100644
--- a/unix/+linux/umask.ha
+++ b/unix/+linux/umask.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Umar Getagazov <umar@handlerug.me>
+
use fs;
use rt;
diff --git a/unix/hosts/+freebsd.ha b/unix/hosts/+freebsd.ha
index 69220e9e..443628af 100644
--- a/unix/hosts/+freebsd.ha
+++ b/unix/hosts/+freebsd.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
def PATH: str = "/etc/hosts";
diff --git a/unix/hosts/+linux.ha b/unix/hosts/+linux.ha
index 69220e9e..443628af 100644
--- a/unix/hosts/+linux.ha
+++ b/unix/hosts/+linux.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
def PATH: str = "/etc/hosts";
diff --git a/unix/hosts/hosts.ha b/unix/hosts/hosts.ha
index e8913984..6ce5f5de 100644
--- a/unix/hosts/hosts.ha
+++ b/unix/hosts/hosts.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Dmitry Matveyev <public@greenfork.me>
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use encoding::utf8;
use fs;
diff --git a/unix/hosts/test+test.ha b/unix/hosts/test+test.ha
index 138fb7df..cba84752 100644
--- a/unix/hosts/test+test.ha
+++ b/unix/hosts/test+test.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2023 Dmitry Matveyev <public@greenfork.me>
+
use io;
use memio;
use net::ip;
diff --git a/unix/passwd/group.ha b/unix/passwd/group.ha
index 8d0f9995..5b79c989 100644
--- a/unix/passwd/group.ha
+++ b/unix/passwd/group.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use io;
use memio;
diff --git a/unix/passwd/passwd.ha b/unix/passwd/passwd.ha
index 7fd77038..c5e3b36f 100644
--- a/unix/passwd/passwd.ha
+++ b/unix/passwd/passwd.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021-2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use io;
use memio;
diff --git a/unix/passwd/types.ha b/unix/passwd/types.ha
index a5030d76..0122bf6c 100644
--- a/unix/passwd/types.ha
+++ b/unix/passwd/types.ha
@@ -1,6 +1,4 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
// An invalid entry was encountered during parsing.
export type invalid = !void;
diff --git a/unix/poll/+freebsd.ha b/unix/poll/+freebsd.ha
index a0dcb246..2d41ab36 100644
--- a/unix/poll/+freebsd.ha
+++ b/unix/poll/+freebsd.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use rt;
diff --git a/unix/poll/+linux.ha b/unix/poll/+linux.ha
index 7ac7207d..6041d359 100644
--- a/unix/poll/+linux.ha
+++ b/unix/poll/+linux.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use rt;
diff --git a/unix/poll/types.ha b/unix/poll/types.ha
index bf483bb9..a88910ae 100644
--- a/unix/poll/types.ha
+++ b/unix/poll/types.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use errors;
// All error types that can be returned from [[poll]].
diff --git a/unix/resolvconf/+freebsd.ha b/unix/resolvconf/+freebsd.ha
index d96f585a..a38a7fdf 100644
--- a/unix/resolvconf/+freebsd.ha
+++ b/unix/resolvconf/+freebsd.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
def PATH: str = "/etc/resolv.conf";
diff --git a/unix/resolvconf/+linux.ha b/unix/resolvconf/+linux.ha
index d96f585a..a38a7fdf 100644
--- a/unix/resolvconf/+linux.ha
+++ b/unix/resolvconf/+linux.ha
@@ -1,4 +1,3 @@
// License: MPL-2.0
-// (c) 2022 Sebastian <sebastian@sebsite.pw>
def PATH: str = "/etc/resolv.conf";
diff --git a/unix/resolvconf/load.ha b/unix/resolvconf/load.ha
index ddf97216..8e7dbedf 100644
--- a/unix/resolvconf/load.ha
+++ b/unix/resolvconf/load.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bufio;
use io;
use memio;
diff --git a/unix/signal/+freebsd.ha b/unix/signal/+freebsd.ha
index aca65bf7..c3532dc3 100644
--- a/unix/signal/+freebsd.ha
+++ b/unix/signal/+freebsd.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use io;
use rt;
diff --git a/unix/signal/+linux.ha b/unix/signal/+linux.ha
index 4a2f2f44..f183a05d 100644
--- a/unix/signal/+linux.ha
+++ b/unix/signal/+linux.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
+
use errors;
use io;
use rt;
diff --git a/unix/signal/types.ha b/unix/signal/types.ha
index 7883ac1b..dafa047b 100644
--- a/unix/signal/types.ha
+++ b/unix/signal/types.ha
@@ -1,5 +1,4 @@
// License: MPL-2.0
-// (c) 2022 Drew DeVault <sir@cmpwn.com>
// A function which handles a signal. The first argument is the signal number
// which was caught, the second provides information about the signal, and the
diff --git a/unix/tty/+freebsd/isatty.ha b/unix/tty/+freebsd/isatty.ha
index 6924f3b6..fcc19080 100644
--- a/unix/tty/+freebsd/isatty.ha
+++ b/unix/tty/+freebsd/isatty.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use rt;
use io;
use os;
diff --git a/unix/tty/+freebsd/open.ha b/unix/tty/+freebsd/open.ha
index abe9a838..4c98ed88 100644
--- a/unix/tty/+freebsd/open.ha
+++ b/unix/tty/+freebsd/open.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use fs;
use io;
diff --git a/unix/tty/+freebsd/pty.ha b/unix/tty/+freebsd/pty.ha
index 7c94c449..ca974f55 100644
--- a/unix/tty/+freebsd/pty.ha
+++ b/unix/tty/+freebsd/pty.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Re Elbertson <citrons@mondecitronne.com>
+
use errors;
use fmt;
use fs;
diff --git a/unix/tty/+freebsd/termios.ha b/unix/tty/+freebsd/termios.ha
index 0120306f..4de54347 100644
--- a/unix/tty/+freebsd/termios.ha
+++ b/unix/tty/+freebsd/termios.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use io;
use rt;
use errors;
diff --git a/unix/tty/+freebsd/winsize.ha b/unix/tty/+freebsd/winsize.ha
index daade762..7f89ff73 100644
--- a/unix/tty/+freebsd/winsize.ha
+++ b/unix/tty/+freebsd/winsize.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use errors;
use io;
use os;
diff --git a/unix/tty/+linux/isatty.ha b/unix/tty/+linux/isatty.ha
index ecc3419a..fcc19080 100644
--- a/unix/tty/+linux/isatty.ha
+++ b/unix/tty/+linux/isatty.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use rt;
use io;
use os;
diff --git a/unix/tty/+linux/open.ha b/unix/tty/+linux/open.ha
index 10ef8edb..4c98ed88 100644
--- a/unix/tty/+linux/open.ha
+++ b/unix/tty/+linux/open.ha
@@ -1,8 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use errors;
use fs;
use io;
diff --git a/unix/tty/+linux/pty.ha b/unix/tty/+linux/pty.ha
index 082845b1..2d13ecb4 100644
--- a/unix/tty/+linux/pty.ha
+++ b/unix/tty/+linux/pty.ha
@@ -1,5 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Re Elbertson <citrons@mondecitronne.com>
+
use errors;
use fmt;
use fs;
diff --git a/unix/tty/+linux/termios.ha b/unix/tty/+linux/termios.ha
index 356ff64e..dce90c4b 100644
--- a/unix/tty/+linux/termios.ha
+++ b/unix/tty/+linux/termios.ha
@@ -1,6 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
// TODO: Not in love with this interface
use io;
use rt;
diff --git a/unix/tty/+linux/winsize.ha b/unix/tty/+linux/winsize.ha
index d3929efd..4c55a218 100644
--- a/unix/tty/+linux/winsize.ha
+++ b/unix/tty/+linux/winsize.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use errors;
use io;
use os;
diff --git a/unix/tty/pty_common.ha b/unix/tty/pty_common.ha
index 9fb29c8b..53a26a90 100644
--- a/unix/tty/pty_common.ha
+++ b/unix/tty/pty_common.ha
@@ -1,3 +1,5 @@
+// License: MPL-2.0
+
use bufio;
use fmt;
use fs;
diff --git a/unix/tty/types.ha b/unix/tty/types.ha
index 01f629b5..2a560aa9 100644
--- a/unix/tty/types.ha
+++ b/unix/tty/types.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2021 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
-// (c) 2021 Kiëd Llaentenn <kiedtl@tilde.team>
+
use errors;
// Any error that may occur during TTY-related tasks.
diff --git a/uuid/uuid.ha b/uuid/uuid.ha
index faa0c491..002439d2 100644
--- a/uuid/uuid.ha
+++ b/uuid/uuid.ha
@@ -1,7 +1,5 @@
// License: MPL-2.0
-// (c) 2022 Alexey Yerin <yyp@disroot.org>
-// (c) 2021 Drew DeVault <sir@cmpwn.com>
-// (c) 2021 Ember Sawady <ecs@d2evs.net>
+
use bytes;
use crypto::random;
use endian;
--
2.42.0