Title: fortify-headers 3.0
Date: 2025-12-08 17:00

In late 2022, I started to contribute to [fortify-headers](
https://git.2f30.org/fortify-headers ), and the original author, sin, was kind
enough to entrust the project to me.

Unfortunately, I feel that I haven't lived up to the expectations,
both from others, but also mine. I enthusiastically piled more code on
top of it, instead of moving slowly and making sure that I wasn't
breaking anything. Sure, I added a test suite, but it can't cover every
edge-cases, especially when dealing with code used system-wide in
virtually all C packages/software. It also didn't help that I had a
"complicated" life those last couple of years.

Now onto the good news: I now have some peace of mind and free time again,
meaning I can go back to try to properly maintain fortify-headers. I shelved
everything I added to it on an `experimental` branch (so that nothing is lost,
including old releases that I did), and started clean on top a sin's latest
master again. I'm not happy about rewriting history, I think it was least worse
option in my opinion, versus having a big "revert" commit, or an interminable
daisy-chain of revert.

So what's new in this [release
3.0](https://git.2f30.org/fortify-headers/refs.html) compared to sin's version?
A handful of things:

- A complete testsuite, running on github actions, with `-Wall -Wextra`
- Clang support, thanks to q66
- `access` and `format` annotations
- A missing include in select.h was added
- wctomb was removed, as it was buggy
- Support for `swab` was added
- a 64b fix for time

Attribution was of course kept, and everything is available on
https://git.2f30.org/fortify-headers/log.html and
https://github.com/jvoisin/fortify-headers (to use github CI). QA-wise, on top
of the testsuite, a full [OpenWRT](https://openwrt.org) build is used as a
smoke test. This should prevent bugs from creeping in.

I'd love if people of you could take a quick look at this new tentative, so
that I can ask downstream projects to give a new try at upgrading from 1.1.
