mirror of
https://github.com/opnsense/src.git
synced 2026-04-15 14:29:58 -04:00
longs larger than 32 bits or strict alignment requirements. pm_fatmask had type u_long, but it must have a type that has precisely 32 bits and this type must be no smaller than int, so that ~pmp->pm_fatmask has no bits above the 31st set. Otherwise, comparisons between (cn | ~pmp->pm_fatmask) and magic 32-bit "cluster" numbers always fail. The correct fix is to use the C99 type uint_least32_t and mask with 0xffffffff. The quick fix is to use u_int32_t and assume that ints have msdosfs metadata is riddled with unaligned fields, and on alphas, unaligned_fixup() apparently has problems fixing up the unaligned accesses caused by this. The quick fix is to not comment out the NetBSD code that sort of handles this, and define UNALIGNED_ACCESS on i386's so that the code doesn't change on i386's. The correct fix would define UNALIGNED_ACCESS in a central machine-dependent header and maybe add some extra cases to unaligned_fixup(). UNALIGNED_ACCESS is also tested in isofs. Submitted by: parts by Mark Abene <phiber@radicalmedia.com> PR: 19086 |
||
|---|---|---|
| .. | ||
| bootsect.h | ||
| bpb.h | ||
| denode.h | ||
| direntry.h | ||
| fat.h | ||
| msdosfs_conv.c | ||
| msdosfs_denode.c | ||
| msdosfs_fat.c | ||
| msdosfs_lookup.c | ||
| msdosfs_vfsops.c | ||
| msdosfs_vnops.c | ||
| msdosfsmount.h | ||