Xiaolu: BaseTools C source can directly use std libc API. You can use strlen() to get the length of the input ascii string.
With this change, Reviewed-by: Liming Gao <[email protected]> Thanks Liming > -----邮件原件----- > 发件人: [email protected] <[email protected]> 代表 Xiaolu.Jiang > 发送时间: 2021年11月16日 9:42 > 收件人: [email protected] > 抄送: Xiaolu.Jiang <[email protected]>; Bob Feng > <[email protected]>; Liming Gao <[email protected]>; Yuwei > Chen <[email protected]> > 主题: [edk2-devel][PATCH] BaseTools: Increase the DevicePath length for > support more PCD value. > > Currently the PCD Value only support 13 Guid,When use more 13 pcd will > cause the build tool fail, > Need calculate the required memory,then allocate it. > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3718 > > Cc: Bob Feng <[email protected]> > Cc: Liming Gao <[email protected]> > Cc: Yuwei Chen <[email protected]> > > Signed-off-by: Xiaolu Jiang <[email protected]> > --- > BaseTools/Source/C/DevicePath/DevicePath.c | 36 > +++++++++++++++++++++- > 1 file changed, 35 insertions(+), 1 deletion(-) > > diff --git a/BaseTools/Source/C/DevicePath/DevicePath.c > b/BaseTools/Source/C/DevicePath/DevicePath.c > index c4d224ed61..8a0f5f4e2a 100644 > --- a/BaseTools/Source/C/DevicePath/DevicePath.c > +++ b/BaseTools/Source/C/DevicePath/DevicePath.c > @@ -144,6 +144,40 @@ Returns: > *UniString = '\0'; > > } > > > > + > > +/** > > + Returns the length of a Null-terminated ASCII string. > > + > > + This function returns the number of ASCII characters in the > Null-terminated > > + ASCII string specified by String. > > + > > + If Length > 0 and Destination is NULL, then ASSERT(). > > + If Length > 0 and Source is NULL, then ASSERT(). > > + If PcdMaximumAsciiStringLength is not zero and String contains more than > > + PcdMaximumAsciiStringLength ASCII characters, not including the > Null-terminator, > > + then ASSERT(). > > + > > + @param String A pointer to a Null-terminated ASCII string. > > + > > + @return The length of String. > > + > > +**/ > > +UINTN > > +EFIAPI > > +AsciiStrLen ( > > + IN CONST CHAR8 *String > > + ) > > +{ > > + UINTN Length; > > + > > + ASSERT (String != NULL); > > + > > + for (Length = 0; *String != '\0'; String++, Length++) { > > + > > + } > > + return Length; > > +} > > + > > int main(int argc, CHAR8 *argv[]) > > { > > CHAR8 * Str; > > @@ -170,7 +204,7 @@ int main(int argc, CHAR8 *argv[]) > fprintf(stderr, "Invalid option value, Device Path can't be NULL"); > > return STATUS_ERROR; > > } > > - Str16 = (CHAR16 *)malloc(1024); > > + Str16 = (CHAR16 *)malloc((AsciiStrLen (Str) + 1) * sizeof (CHAR16)); > > if (Str16 == NULL) { > > fprintf(stderr, "Resource, memory cannot be allocated"); > > return STATUS_ERROR; > > -- > 2.30.2.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#83769): https://edk2.groups.io/g/devel/message/83769 > Mute This Topic: https://groups.io/mt/87089392/4905953 > Group Owner: [email protected] > Unsubscribe: https://edk2.groups.io/g/devel/unsub > [[email protected]] > -=-=-=-=-=-= > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#84042): https://edk2.groups.io/g/devel/message/84042 Mute This Topic: https://groups.io/mt/87282585/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
