I don't think I've ever seen struct bitfields used in real code, it's almost always manual bit-masks against a numeric type, often via macros. (I assume due to portability)
S->buffer_free = 1;
This is a very serious limitation if the structure/class is being updated in a multi-threaded environment.
I'm not sure portability is the reason though. I've seen it in places that have no problem spamming #define __GNU_SOURCE
It's absolutely wonderful for IO.
Big-endian systems sort-of still exist (I do indeed have an Amiga, and an Atari STe, and an Xbox 360, and they all work, so they must count) - but they're only slightly less weird from a practical C programming perspective than stuff like the DSPs with CHAR_BIT==24, and Harvard architecture microcontrollers with 2-byte ints. And so you can ignore them. People that use still actually these systems will be used to it.