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

Reply via email to