Thanks Siyuan, I will improve the codes. lubo
From: Fu, Siyuan Sent: Friday, May 20, 2016 9:19 AM To: Zhang, Lubo <[email protected]>; [email protected] Cc: Ye, Ting <[email protected]>; Wu, Jiaxin <[email protected]> Subject: RE: [patch] NetworkPkg: Refine codes of Http boot driver. And I think the "percentage" is what you actually means by the name "Ratio". From: Fu, Siyuan Sent: Friday, May 20, 2016 9:17 AM To: Zhang, Lubo <[email protected]<mailto:[email protected]>>; [email protected]<mailto:[email protected]> Cc: Ye, Ting <[email protected]<mailto:[email protected]>>; Wu, Jiaxin <[email protected]<mailto:[email protected]>> Subject: RE: [patch] NetworkPkg: Refine codes of Http boot driver. Hi, Lubo 1. The (ReceivedSize * 100) may lead to a integer overflow, especially in a 32bit system. 2. You could use %[wide]d to control the width of the print, to avoid the if condition "Ratio>10" Best Regards Siyuan > -----Original Message----- > From: Zhang, Lubo > Sent: Thursday, May 19, 2016 11:53 AM > To: [email protected]<mailto:[email protected]> > Cc: Ye, Ting <[email protected]<mailto:[email protected]>>; Fu, Siyuan > <[email protected]<mailto:[email protected]>>; Wu, > Jiaxin <[email protected]<mailto:[email protected]>> > Subject: [patch] NetworkPkg: Refine codes of Http boot driver. > > When downloading a big image as ram disk iso,we can > print the progress message on screen to enhance the > user experience. > > Cc: Ye Ting <[email protected]<mailto:[email protected]>> > Cc: Fu Siyuan <[email protected]<mailto:[email protected]>> > Cc: Wu Jiaxin <[email protected]<mailto:[email protected]>> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Zhang Lubo <[email protected]<mailto:[email protected]>> > --- > NetworkPkg/HttpBootDxe/HttpBootClient.c | 29 > +++++++++++++++++++++++++++++ > NetworkPkg/HttpBootDxe/HttpBootSupport.c | 4 ++-- > 2 files changed, 31 insertions(+), 2 deletions(-) > > diff --git a/NetworkPkg/HttpBootDxe/HttpBootClient.c > b/NetworkPkg/HttpBootDxe/HttpBootClient.c > index 46cf9ca..9b2a8bd 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootClient.c > +++ b/NetworkPkg/HttpBootDxe/HttpBootClient.c > @@ -753,10 +753,12 @@ HttpBootGetBootFile ( > HTTP_BOOT_CACHE_CONTENT *Cache; > UINT8 *Block; > CHAR16 *Url; > BOOLEAN IdentityMode; > UINTN ReceivedSize; > + UINTN Ratio; > + UINTN NewRatio; > > ASSERT (Private != NULL); > ASSERT (Private->HttpCreated); > > if (BufferSize == NULL || ImageType == NULL) { > @@ -992,10 +994,13 @@ HttpBootGetBootFile ( > // > // 3.4.2, start the message-body download, the identity and chunked > transfer-coding > // is handled in different path here. > // > ZeroMem (&ResponseBody, sizeof (HTTP_IO_RESPONSE_DATA)); > + AsciiPrint ("\n"); > + AsciiPrint ("\n Downloading NBP file... "); > + Ratio = 0; > if (IdentityMode) { > // > // In identity transfer-coding there is no need to parse the message > body, > // just download the message body to the user provided buffer directly. > // > @@ -1010,10 +1015,25 @@ HttpBootGetBootFile ( > ); > if (EFI_ERROR (Status)) { > goto ERROR_6; > } > ReceivedSize += ResponseBody.BodyLength; > + // > + // Display the download progress. > + // > + NewRatio = (ReceivedSize * 100) / ContentLength; > + if (NewRatio != Ratio) { > + if (Ratio !=0) { > + if (Ratio >=10) { > + AsciiPrint ("\b\b\b"); > + } else { > + AsciiPrint ("\b\b"); > + } > + } > + Ratio = NewRatio; > + AsciiPrint ("%d%%", NewRatio); > + } > } > } else { > // > // In "chunked" transfer-coding mode, so we need to parse the received > // data to get the real entity content. > @@ -1058,10 +1078,19 @@ HttpBootGetBootFile ( > ResponseBody.Body > ); > if (EFI_ERROR (Status)) { > goto ERROR_6; > } > + > + // > + // Print '.' when using chunked mode to download bootfile. > + // > + Ratio ++; > + if ((Ratio % 1024) == 0) { > + AsciiPrint ("."); > + } > + > } > } > } > > // > diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c > b/NetworkPkg/HttpBootDxe/HttpBootSupport.c > index 66eca78..71e4826 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c > +++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c > @@ -1121,11 +1121,11 @@ HttpBootRegisterRamDisk ( > ASSERT (Buffer != NULL); > ASSERT (BufferSize != 0); > > Status = gBS->LocateProtocol (&gEfiRamDiskProtocolGuid, NULL, (VOID**) > &RamDisk); > if (EFI_ERROR (Status)) { > - DEBUG ((EFI_D_ERROR, "HTTP Boot: Couldn't find the RAM Disk protocol - > %r\n", Status)); > + AsciiPrint ("\n HTTP Boot: Couldn't find the RAM Disk protocol - %r\n", > Status); > return Status; > } > > if (ImageType == ImageTypeVirtualCd) { > RamDiskType = &gEfiVirtualCdGuid; > @@ -1141,11 +1141,11 @@ HttpBootRegisterRamDisk ( > RamDiskType, > Private->UsingIpv6 ? Private->Ip6Nic->DevicePath : > Private->Ip4Nic- > >DevicePath, > &DevicePath > ); > if (EFI_ERROR (Status)) { > - DEBUG ((EFI_D_ERROR, "HTTP Boot: Failed to register RAM Disk - %r\n", > Status)); > + AsciiPrint ("\n HTTP Boot: Failed to register RAM Disk - %r\n", Status); > } > > return Status; > } > > -- > 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

