From 3244bb8a121cd683d5ec33a47ffcb1eb63c78b92 Mon Sep 17 00:00:00 2001 From: Craig Rodrigues Date: Tue, 19 Dec 2006 02:31:58 +0000 Subject: [PATCH] For big-endian version of getulong() macro, cast result to u_int32_t. This macro was written expecting a 32-bit unsigned long, and doesn't work properly on 64-bit systems. This bug caused vn_stat() to return incorrect values for files larger than 2gb on msdosfs filesystems on 64-bit systems. PR: 106703 Submitted by: Axel Gonzalez MFC after: 3 days --- sys/fs/msdosfs/bpb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/fs/msdosfs/bpb.h b/sys/fs/msdosfs/bpb.h index d5b86a73427..1374c9ae756 100644 --- a/sys/fs/msdosfs/bpb.h +++ b/sys/fs/msdosfs/bpb.h @@ -101,7 +101,7 @@ struct bpb710 { #define putulong(p, v) (*((u_int32_t *)(p)) = (v)) #else #define getushort(x) (((u_int8_t *)(x))[0] + (((u_int8_t *)(x))[1] << 8)) -#define getulong(x) (((u_int8_t *)(x))[0] + (((u_int8_t *)(x))[1] << 8) \ +#define getulong(x) (u_int32_t)(((u_int8_t *)(x))[0] + (((u_int8_t *)(x))[1] << 8) \ + (((u_int8_t *)(x))[2] << 16) \ + (((u_int8_t *)(x))[3] << 24)) #define putushort(p, v) (((u_int8_t *)(p))[0] = (v), \