Because it only specifies using a nonstandard packing for the structs declared below it. By using this packing, the structs may use a little less memory, but each struct member access may be a little slower (or even fail on architectures that forbid unaligned loads/stores).

When this is used in the public header, all calling code (which may use any other compiler available for the platform) must understand and implement the pragma directive in the same way, otherwise calling the library will fail (with errors that are very hard to debug and figure out).

So to me, using pragma pack here is a huge portability/compatibility hazard with no tangiable benefit, and thus should be removed.

If you want to merge the rest but think more about this part, I can split it to a separate pull request.