From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1YqNBT-0005Ot-Lp for mharc-grub-devel@gnu.org; Thu, 07 May 2015 10:53:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49246) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YqNBN-0005Of-4l for grub-devel@gnu.org; Thu, 07 May 2015 10:53:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YqNBL-0007L8-To for grub-devel@gnu.org; Thu, 07 May 2015 10:53:49 -0400 Received: from mail-wi0-x231.google.com ([2a00:1450:400c:c05::231]:34946) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YqNBL-0007L1-Ji for grub-devel@gnu.org; Thu, 07 May 2015 10:53:47 -0400 Received: by widdi4 with SMTP id di4so245723248wid.0 for ; Thu, 07 May 2015 07:53:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; bh=Ab6cw57eqRJjXG0RQGPS5L9WfyONk6J6gS1B6G2cx5Y=; b=Kr8gffAfIFgbJvINuBfabRTkWQdzx7YZ3NF9+DTW9/tFoz+eHvvOZwNeGgfrHwclXK 6B5siDGLfO1gF9/j/9AYzS7oY1o2oJH/uaa6j5S0asjceHnNwX1kDAbmnhNDEVT5DxTg AR+CwOeuLvJX+G604aUdkIxj4JWLASYrctXUM3x9bM/wUdmFXsRa+j1g5P6MpLWL2yWA 1dcqS+HKMvKlp8A3dBhNj3DdMLoaPq7tXK1qlbjnAVHxfDUBLbOsTvVGUFL7QnfcQ8qs mZfseQ7easFyLNO+MyURti3Y+GprEdhfTiBzhYtTKZ6OmYzOGkbDmnCjHQZzKNJdLpcw DrQw== X-Received: by 10.180.98.195 with SMTP id ek3mr7427560wib.57.1431010422691; Thu, 07 May 2015 07:53:42 -0700 (PDT) Received: from ?IPv6:2620:0:105f:fd00:863a:4bff:fe50:abc4? ([2620:0:105f:fd00:863a:4bff:fe50:abc4]) by mx.google.com with ESMTPSA id l1sm7799285wiy.20.2015.05.07.07.53.41 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 May 2015 07:53:41 -0700 (PDT) Message-ID: <554B7C75.9090401@gmail.com> Date: Thu, 07 May 2015 16:53:41 +0200 From: =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.6.0 MIME-Version: 1.0 To: The development of GNU GRUB Subject: Re: [PATCH 1/2] efidisk: move device path helpers in core for efinet References: <1429430471-7229-1-git-send-email-arvidjaar@gmail.com> In-Reply-To: <1429430471-7229-1-git-send-email-arvidjaar@gmail.com> Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="RTCMW5XU6TTTU8fDsjJOuaEsjDHvR0fCq" X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c05::231 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 May 2015 14:53:54 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --RTCMW5XU6TTTU8fDsjJOuaEsjDHvR0fCq Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Go ahead On 19.04.2015 10:01, Andrei Borzenkov wrote: > --- > grub-core/disk/efi/efidisk.c | 61 ++++++++----------------------------= -------- > grub-core/kern/efi/efi.c | 41 +++++++++++++++++++++++++++++ > include/grub/efi/efi.h | 4 +++ > 3 files changed, 55 insertions(+), 51 deletions(-) >=20 > diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.= c > index 60a6d3c..a8783a3 100644 > --- a/grub-core/disk/efi/efidisk.c > +++ b/grub-core/disk/efi/efidisk.c > @@ -43,47 +43,6 @@ static struct grub_efidisk_data *fd_devices; > static struct grub_efidisk_data *hd_devices; > static struct grub_efidisk_data *cd_devices; > =20 > -/* Duplicate a device path. */ > -static grub_efi_device_path_t * > -duplicate_device_path (const grub_efi_device_path_t *dp) > -{ > - grub_efi_device_path_t *p; > - grub_size_t total_size =3D 0; > - > - for (p =3D (grub_efi_device_path_t *) dp; > - ; > - p =3D GRUB_EFI_NEXT_DEVICE_PATH (p)) > - { > - total_size +=3D GRUB_EFI_DEVICE_PATH_LENGTH (p); > - if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p)) > - break; > - } > - > - p =3D grub_malloc (total_size); > - if (! p) > - return 0; > - > - grub_memcpy (p, dp, total_size); > - return p; > -} > - > -/* Return the device path node right before the end node. */ > -static grub_efi_device_path_t * > -find_last_device_path (const grub_efi_device_path_t *dp) > -{ > - grub_efi_device_path_t *next, *p; > - > - if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) > - return 0; > - > - for (p =3D (grub_efi_device_path_t *) dp, next =3D GRUB_EFI_NEXT_DEV= ICE_PATH (p); > - ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next); > - p =3D next, next =3D GRUB_EFI_NEXT_DEVICE_PATH (next)) > - ; > - > - return p; > -} > - > static struct grub_efidisk_data * > make_devices (void) > { > @@ -110,7 +69,7 @@ make_devices (void) > if (! dp) > continue; > =20 > - ldp =3D find_last_device_path (dp); > + ldp =3D grub_efi_find_last_device_path (dp); > if (! ldp) > /* This is empty. Why? */ > continue; > @@ -150,11 +109,11 @@ find_parent_device (struct grub_efidisk_data *dev= ices, > grub_efi_device_path_t *dp, *ldp; > struct grub_efidisk_data *parent; > =20 > - dp =3D duplicate_device_path (d->device_path); > + dp =3D grub_efi_duplicate_device_path (d->device_path); > if (! dp) > return 0; > =20 > - ldp =3D find_last_device_path (dp); > + ldp =3D grub_efi_find_last_device_path (dp); > ldp->type =3D GRUB_EFI_END_DEVICE_PATH_TYPE; > ldp->subtype =3D GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; > ldp->length =3D sizeof (*ldp); > @@ -180,11 +139,11 @@ is_child (struct grub_efidisk_data *child, > grub_efi_device_path_t *dp, *ldp; > int ret; > =20 > - dp =3D duplicate_device_path (child->device_path); > + dp =3D grub_efi_duplicate_device_path (child->device_path); > if (! dp) > return 0; > =20 > - ldp =3D find_last_device_path (dp); > + ldp =3D grub_efi_find_last_device_path (dp); > ldp->type =3D GRUB_EFI_END_DEVICE_PATH_TYPE; > ldp->subtype =3D GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; > ldp->length =3D sizeof (*ldp); > @@ -207,8 +166,8 @@ add_device (struct grub_efidisk_data **devices, str= uct grub_efidisk_data *d) > { > int ret; > =20 > - ret =3D grub_efi_compare_device_paths (find_last_device_path ((*= p)->device_path), > - find_last_device_path (d->device_path)); > + ret =3D grub_efi_compare_device_paths (grub_efi_find_last_device= _path ((*p)->device_path), > + grub_efi_find_last_device_path (d->device_path)); > if (ret =3D=3D 0) > ret =3D grub_efi_compare_device_paths ((*p)->device_path, > d->device_path); > @@ -795,7 +754,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *ha= ndle) > if (! dp) > return 0; > =20 > - ldp =3D find_last_device_path (dp); > + ldp =3D grub_efi_find_last_device_path (dp); > if (! ldp) > return 0; > =20 > @@ -810,14 +769,14 @@ grub_efidisk_get_device_name (grub_efi_handle_t *= handle) > =20 > /* It is necessary to duplicate the device path so that GRUB > can overwrite it. */ > - dup_dp =3D duplicate_device_path (dp); > + dup_dp =3D grub_efi_duplicate_device_path (dp); > if (! dup_dp) > return 0; > =20 > while (1) > { > grub_efi_device_path_t *dup_ldp; > - dup_ldp =3D find_last_device_path (dup_dp); > + dup_ldp =3D grub_efi_find_last_device_path (dup_dp); > if (!(GRUB_EFI_DEVICE_PATH_TYPE (dup_ldp) =3D=3D GRUB_EFI_MEDIA_DEV= ICE_PATH_TYPE > && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) =3D=3D GRUB_EFI_CDROM_DEV= ICE_PATH_SUBTYPE > || GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) =3D=3D GRUB_EFI_HARD_D= RIVE_DEVICE_PATH_SUBTYPE))) > diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c > index b9eb1ab..49a1501 100644 > --- a/grub-core/kern/efi/efi.c > +++ b/grub-core/kern/efi/efi.c > @@ -394,6 +394,47 @@ grub_efi_get_device_path (grub_efi_handle_t handle= ) > GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); > } > =20 > +/* Return the device path node right before the end node. */ > +grub_efi_device_path_t * > +grub_efi_find_last_device_path (const grub_efi_device_path_t *dp) > +{ > + grub_efi_device_path_t *next, *p; > + > + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) > + return 0; > + > + for (p =3D (grub_efi_device_path_t *) dp, next =3D GRUB_EFI_NEXT_DEV= ICE_PATH (p); > + ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next); > + p =3D next, next =3D GRUB_EFI_NEXT_DEVICE_PATH (next)) > + ; > + > + return p; > +} > + > +/* Duplicate a device path. */ > +grub_efi_device_path_t * > +grub_efi_duplicate_device_path (const grub_efi_device_path_t *dp) > +{ > + grub_efi_device_path_t *p; > + grub_size_t total_size =3D 0; > + > + for (p =3D (grub_efi_device_path_t *) dp; > + ; > + p =3D GRUB_EFI_NEXT_DEVICE_PATH (p)) > + { > + total_size +=3D GRUB_EFI_DEVICE_PATH_LENGTH (p); > + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p)) > + break; > + } > + > + p =3D grub_malloc (total_size); > + if (! p) > + return 0; > + > + grub_memcpy (p, dp, total_size); > + return p; > +} > + > static void > dump_vendor_path (const char *type, grub_efi_vendor_device_path_t *ven= dor) > { > diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h > index 489cf9e..0e6fd86 100644 > --- a/include/grub/efi/efi.h > +++ b/include/grub/efi/efi.h > @@ -53,6 +53,10 @@ void EXPORT_FUNC(grub_efi_print_device_path) (grub_e= fi_device_path_t *dp); > char *EXPORT_FUNC(grub_efi_get_filename) (grub_efi_device_path_t *dp);= > grub_efi_device_path_t * > EXPORT_FUNC(grub_efi_get_device_path) (grub_efi_handle_t handle); > +grub_efi_device_path_t * > +EXPORT_FUNC(grub_efi_find_last_device_path) (const grub_efi_device_pat= h_t *dp); > +grub_efi_device_path_t * > +EXPORT_FUNC(grub_efi_duplicate_device_path) (const grub_efi_device_pat= h_t *dp); > grub_err_t EXPORT_FUNC (grub_efi_finish_boot_services) (grub_efi_uintn= _t *outbuf_size, void *outbuf, > grub_efi_uintn_t *map_key, > grub_efi_uintn_t *efi_desc_size, >=20 --RTCMW5XU6TTTU8fDsjJOuaEsjDHvR0fCq Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iF4EAREKAAYFAlVLfHUACgkQmBXlbbo5nOun3wD/T+JoXH6/i/zL01v/vFcDl0yd kLxMyvIagiNWCQnTlEEA/j3quaxAjVfJoAcGzyrvHXTxCG/LWSyumsmFIzHWJqtt =Y+mp -----END PGP SIGNATURE----- --RTCMW5XU6TTTU8fDsjJOuaEsjDHvR0fCq--