This patch has broken the build on ARM In function 'DownloadFile': <https://ci.linaro.org/jenkins/job/leg-virt-tianocore-edk2-upstream/ws/edk2/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c>:938:22: error: pointer targets in assignment differ in signedness [-Werror=pointer-sign] ReqOpt.OptionStr = "blksize"; ^ <https://ci.linaro.org/jenkins/job/leg-virt-tianocore-edk2-upstream/ws/edk2/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c>:939:5: error: pointer targets in passing argument 1 of 'AsciiSPrint' differ in signedness [-Werror=pointer-sign] AsciiSPrint (OptBuf, sizeof (OptBuf), "%d", BlockSize);
Please don't mix CHAR8, INT8 and UINT8: they are all distinct types, and require explicit casting when using one in place of the other. Thanks, Ard, On 6 May 2016 at 19:46, Carsey, Jaben <jaben.car...@intel.com> wrote: > Why write the function UintnToAscDec to convert UINTN to ascii string? > PrintLib can do that for you. > > Reviewed-by: Jaben Carsey <jaben.car...@intel.com> > >> -----Original Message----- >> From: Fu, Siyuan >> Sent: Thursday, May 05, 2016 7:33 PM >> To: edk2-devel@lists.01.org >> Cc: Carsey, Jaben <jaben.car...@intel.com>; Qiu, Shumin >> <shumin....@intel.com> >> Subject: [Patch] ShellPkg: Add argument to set block size for tftp command. >> Importance: High >> >> TFTP block size has a big impact on the transmit performance, this patch is >> to >> add new argument [-s <block size>] for shell "tftp" command to configure the >> block size for file download. >> >> Cc: Jaben Carsey <jaben.car...@intel.com> >> Cc: Shumin Qiu <shumin....@intel.com> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Fu Siyuan <siyuan...@intel.com> >> --- >> ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c | 81 >> +++++++++++++++++++++- >> .../UefiShellTftpCommandLib.uni | 6 +- >> 2 files changed, 83 insertions(+), 4 deletions(-) >> >> diff --git a/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c >> b/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c >> index 831b9c3..e72e6f6 100644 >> --- a/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c >> +++ b/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c >> @@ -2,7 +2,7 @@ >> The implementation for the 'tftp' Shell command. >> >> Copyright (c) 2015, ARM Ltd. All rights reserved.<BR> >> - Copyright (c) 2015, Intel Corporation. All rights reserved. <BR> >> + Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. <BR> >> (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> >> This program and the accompanying materials >> @@ -163,6 +163,7 @@ GetFileSize ( >> @param[in] FilePath Path of the file, Unicode encoded >> @param[in] AsciiFilePath Path of the file, ASCII encoded >> @param[in] FileSize Size of the file in number of bytes >> + @param[in] BlockSize Value of the TFTP blksize option >> @param[out] Data Address where to store the address of the >> buffer >> where the data of the file were downloaded in >> case of success. >> @@ -180,6 +181,7 @@ DownloadFile ( >> IN CONST CHAR16 *FilePath, >> IN CONST CHAR8 *AsciiFilePath, >> IN UINTN FileSize, >> + IN UINT16 BlockSize, >> OUT VOID **Data >> ); >> >> @@ -223,9 +225,15 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = { >> {L"-r", TypeValue}, >> {L"-c", TypeValue}, >> {L"-t", TypeValue}, >> + {L"-s", TypeValue}, >> {NULL , TypeMax} >> }; >> >> +/// >> +/// The default block size (512) of tftp is defined in the RFC1350. >> +/// >> +#define MTFTP_DEFAULT_BLKSIZE 512 >> + >> /** >> Function for 'tftp' command. >> >> @@ -271,6 +279,7 @@ ShellCommandRunTftp ( >> UINTN FileSize; >> VOID *Data; >> SHELL_FILE_HANDLE FileHandle; >> + UINT16 BlockSize; >> >> ShellStatus = SHELL_INVALID_PARAMETER; >> ProblemParam = NULL; >> @@ -278,6 +287,7 @@ ShellCommandRunTftp ( >> AsciiRemoteFilePath = NULL; >> Handles = NULL; >> FileSize = 0; >> + BlockSize = MTFTP_DEFAULT_BLKSIZE; >> >> // >> // Initialize the Shell library (we must be in non-auto-init...) >> @@ -404,6 +414,23 @@ ShellCommandRunTftp ( >> } >> } >> >> + ValueStr = ShellCommandLineGetValue (CheckPackage, L"-s"); >> + if (ValueStr != NULL) { >> + if (!StringToUint16 (ValueStr, &BlockSize)) { >> + goto Error; >> + } >> + // >> + // Valid range of block size is between "8" and "65464" according to >> RFC2348. >> + // >> + if (BlockSize < 8 || BlockSize > 65464) { >> + ShellPrintHiiEx ( >> + -1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), >> + gShellTftpHiiHandle, L"tftp", ValueStr >> + ); >> + goto Error; >> + } >> + } >> + >> // >> // Locate all MTFTP4 Service Binding protocols >> // >> @@ -478,7 +505,7 @@ ShellCommandRunTftp ( >> goto NextHandle; >> } >> >> - Status = DownloadFile (Mtftp4, RemoteFilePath, AsciiRemoteFilePath, >> FileSize, &Data); >> + Status = DownloadFile (Mtftp4, RemoteFilePath, AsciiRemoteFilePath, >> FileSize, BlockSize, &Data); >> if (EFI_ERROR (Status)) { >> ShellPrintHiiEx ( >> -1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_DOWNLOAD), >> @@ -584,6 +611,44 @@ StringToUint16 ( >> } >> >> /** >> + This function is to convert a UINTN to a ASCII string, and return the >> + actual length of the buffer. >> + >> + @param[in] Number Numeric value to be converted. >> + @param[in] Buffer The pointer to the buffer for ASCII string. >> + @param[in] BufferSize The maxsize of the buffer. >> + >> + @return Length The actual length of the ASCII string. >> + >> +**/ >> +UINTN >> +UintnToAscDec ( >> + IN UINTN Number, >> + IN UINT8 *Buffer, >> + IN UINTN BufferSize >> + ) >> +{ >> + UINTN Index; >> + UINTN Length; >> + CHAR8 TempStr[64]; >> + >> + Index = 63; >> + TempStr[Index] = 0; >> + >> + do { >> + Index--; >> + TempStr[Index] = (CHAR8) ('0' + (Number % 10)); >> + Number = (UINTN) (Number / 10); >> + } while (Number != 0); >> + >> + AsciiStrCpyS ((CHAR8 *) Buffer, BufferSize, &TempStr[Index]); >> + >> + Length = AsciiStrLen ((CHAR8 *) Buffer); >> + >> + return Length; >> +} >> + >> +/** >> Get the name of the NIC. >> >> @param[in] ControllerHandle The network physical device handle. >> @@ -843,6 +908,7 @@ Error : >> @param[in] FilePath Path of the file, Unicode encoded >> @param[in] AsciiFilePath Path of the file, ASCII encoded >> @param[in] FileSize Size of the file in number of bytes >> + @param[in] BlockSize Value of the TFTP blksize option >> @param[out] Data Address where to store the address of the >> buffer >> where the data of the file were downloaded in >> case of success. >> @@ -860,6 +926,7 @@ DownloadFile ( >> IN CONST CHAR16 *FilePath, >> IN CONST CHAR8 *AsciiFilePath, >> IN UINTN FileSize, >> + IN UINT16 BlockSize, >> OUT VOID **Data >> ) >> { >> @@ -868,6 +935,8 @@ DownloadFile ( >> VOID *Buffer; >> DOWNLOAD_CONTEXT *TftpContext; >> EFI_MTFTP4_TOKEN Mtftp4Token; >> + EFI_MTFTP4_OPTION ReqOpt; >> + UINT8 OptBuf[10]; >> >> // Downloaded file can be large. BS.AllocatePages() is more faster >> // than AllocatePool() and avoid fragmentation. >> @@ -900,6 +969,14 @@ DownloadFile ( >> Mtftp4Token.Buffer = Buffer; >> Mtftp4Token.CheckPacket = CheckPacket; >> Mtftp4Token.Context = (VOID*)TftpContext; >> + if (BlockSize != MTFTP_DEFAULT_BLKSIZE) { >> + ReqOpt.OptionStr = "blksize"; >> + UintnToAscDec (BlockSize, OptBuf, sizeof (OptBuf)); >> + ReqOpt.ValueStr = OptBuf; >> + >> + Mtftp4Token.OptionCount = 1; >> + Mtftp4Token.OptionList = &ReqOpt; >> + } >> >> ShellPrintHiiEx ( >> -1, -1, NULL, STRING_TOKEN (STR_TFTP_DOWNLOADING), >> diff --git >> a/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.uni >> b/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.uni >> index 33a8944..a16265c 100644 >> --- >> a/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.uni >> +++ >> b/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.uni >> @@ -1,7 +1,7 @@ >> // /** >> // >> // (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> >> -// Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved. <BR> >> +// Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved. <BR> >> // This program and the accompanying materials >> // are licensed and made available under the terms and conditions of the BSD >> License >> // which accompanies this distribution. The full text of the license may be >> found at >> @@ -50,7 +50,7 @@ >> ".SH SYNOPSIS\r\n" >> " \r\n" >> "TFTP [-i interface] [-l <port>] [-r <port>] [-c <retry count>] [-t >> <timeout>]\r\n" >> -" host remotefilepath [localfilepath]\r\n" >> +" [-s <block size>] host remotefilepath [localfilepath]\r\n" >> ".SH OPTIONS\r\n" >> " \r\n" >> " -i interface - Specifies an adapter name, i.e., eth0.\r\n" >> @@ -61,6 +61,8 @@ >> " wait for a response. The default value is 6.\r\n" >> " -t <timeout> - The number of seconds to wait for a response >> after\r\n" >> " sending a request packet. Default value is 4s.\r\n" >> +" -s <block size> - Specifies the TFTP blksize option as defined in RFC >> 2348.\r\n" >> +" Valid range is between 8 and 65464, default value is >> 512.\r\n" >> " host - Specify TFTP Server IPv4 address.\r\n" >> " remotefilepath - TFTP server file path to download the file.\r\n" >> " localfilepath - Local destination file path.\r\n" >> -- >> 2.7.4.windows.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel