memdisk: Force 32-bit mBFT "safe hook" pointer field
authorShao Miller <shao.miller@yrdsb.edu.on.ca>
Tue, 9 Mar 2010 23:24:41 +0000 (18:24 -0500)
committerShao Miller <shao.miller@yrdsb.edu.on.ca>
Fri, 11 Jun 2010 01:49:10 +0000 (01:49 +0000)
When mstructs.h is used by MDISKCHK.COM, pointers have
a 16-bit size and thus the mBFT structure sizeof() is
smaller under OpenWatcom.  We now union this pointer
member with a uint32_t to force the field to at least
32 bits.

There is another pointer in this header file which is
already unioned with a uint32_t, due to that field's
dual-purpose.  That field is fine under OpenWatcom.

Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca>
memdisk/mstructs.h
memdisk/setup.c

index 47dffe9..e060ace 100644 (file)
@@ -106,7 +106,10 @@ struct mdi {
 MEMDISK_PACKED_PREFIX
 struct mBFT {
     struct acpi_description_header acpi;
-    struct safe_hook *safe_hook;       /* "Safe hook" physical address */
+    union {
+       struct safe_hook *ptr;
+       uint32_t phys_addr;
+    } safe_hook;               /* "Safe hook" physical address */
     struct mdi mdi;
 } MEMDISK_PACKED_POSTFIX;
 
index a9ae63d..ffaa2c6 100644 (file)
@@ -1132,7 +1132,7 @@ void setup(const struct real_mode_args *rm_args_ptr)
     hptr->safe_hook.mBFT.ptr->acpi.signature[1] = 'B';
     hptr->safe_hook.mBFT.ptr->acpi.signature[2] = 'F';
     hptr->safe_hook.mBFT.ptr->acpi.signature[3] = 'T';
-    hptr->safe_hook.mBFT.ptr->safe_hook = &hptr->safe_hook;
+    hptr->safe_hook.mBFT.ptr->safe_hook.ptr = &hptr->safe_hook;
     hptr->safe_hook.mBFT.ptr->acpi.checksum =
        -checksum_buf(hptr->safe_hook.mBFT.ptr,
                      hptr->safe_hook.mBFT.ptr->acpi.length);