]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* include/grub/efi/api.h (grub_efi_device_path): Define length as
authorVladimir Serbinenko <phcoder@gmail.com>
Wed, 11 Dec 2013 14:54:01 +0000 (15:54 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Wed, 11 Dec 2013 14:54:01 +0000 (15:54 +0100)
unaligned u16 rather than u8[2].

ChangeLog
grub-core/disk/efi/efidisk.c
grub-core/loader/efi/chainloader.c
include/grub/efi/api.h

index 37184be26b14ef9c12779d86e438d34be5f33baa..5aa70bb3b80dcd3a65188aa79c012db516ba2159 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-12-11  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * include/grub/efi/api.h (grub_efi_device_path): Define length as
+       unaligned u16 rather than u8[2].
+
 2013-12-11  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks
index 3a787632953224420bf0cbffc69b986fe8097987..68f6d9f755afbf07d6e1c490176d10b88a4f7bfe 100644 (file)
@@ -157,8 +157,7 @@ find_parent_device (struct grub_efidisk_data *devices,
   ldp = find_last_device_path (dp);
   ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
   ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-  ldp->length[0] = sizeof (*ldp);
-  ldp->length[1] = 0;
+  ldp->length = sizeof (*ldp);
 
   for (parent = devices; parent; parent = parent->next)
     {
@@ -188,8 +187,7 @@ is_child (struct grub_efidisk_data *child,
   ldp = find_last_device_path (dp);
   ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
   ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-  ldp->length[0] = sizeof (*ldp);
-  ldp->length[1] = 0;
+  ldp->length = sizeof (*ldp);
 
   ret = (grub_efi_compare_device_paths (dp, parent->device_path) == 0);
   grub_free (dp);
@@ -816,8 +814,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
 
          dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
          dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-         dup_ldp->length[0] = sizeof (*dup_ldp);
-         dup_ldp->length[1] = 0;
+         dup_ldp->length = sizeof (*dup_ldp);
        }
 
       if (!get_diskname_from_path (dup_dp, device_name))
index c0fed8068bcf3b71c74b28c945a16ec54197dcd3..233237018b5be163f5f434d49e88c6bd9360b584 100644 (file)
@@ -122,9 +122,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp,
     if (*p == '/')
       *p = '\\';
 
-  size = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
-  fp->header.length[0] = (grub_efi_uint8_t) (size & 0xff);
-  fp->header.length[1] = (grub_efi_uint8_t) (size >> 8);
+  fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
 }
 
 static grub_efi_device_path_t *
@@ -184,8 +182,7 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename)
   d = GRUB_EFI_NEXT_DEVICE_PATH (d);
   d->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
   d->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-  d->length[0] = sizeof (*d);
-  d->length[1] = 0;
+  d->length = sizeof (*d);
 
   return file_path;
 }
index 3af09111a0e8708be06bd2082b4817baeef2c2f1..ac0389cacdcb7710cc985d8f471423870a51cffc 100644 (file)
@@ -544,8 +544,8 @@ struct grub_efi_device_path
 {
   grub_efi_uint8_t type;
   grub_efi_uint8_t subtype;
-  grub_efi_uint8_t length[2];
-};
+  grub_efi_uint16_t length;
+} __attribute__ ((packed));
 typedef struct grub_efi_device_path grub_efi_device_path_t;
 /* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it.
    It seems to be identical to EFI_DEVICE_PATH.  */
@@ -553,7 +553,7 @@ typedef struct grub_efi_device_path grub_efi_device_path_protocol_t;
 
 #define GRUB_EFI_DEVICE_PATH_TYPE(dp)          ((dp)->type & 0x7f)
 #define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp)       ((dp)->subtype)
-#define GRUB_EFI_DEVICE_PATH_LENGTH(dp)                (grub_get_unaligned16 ((dp)->length))
+#define GRUB_EFI_DEVICE_PATH_LENGTH(dp)                ((dp)->length)
 
 /* The End of Device Path nodes.  */
 #define GRUB_EFI_END_DEVICE_PATH_TYPE                  (0xff & 0x7f)