diff options
| author | kx <kx@radix.pro> | 2024-06-04 06:43:08 +0300 |
|---|---|---|
| committer | kx <kx@radix.pro> | 2024-06-04 06:43:08 +0300 |
| commit | 7e2ccccace24636f29ddc210b94606abd4c7e42b (patch) | |
| tree | 545d43ea12671048956cafeb12303e84d601e571 /BaseTools/Source/C/Common/StringFuncs.c | |
| parent | 27b044605cd5f6b33a3d231576003850b3fe305b (diff) | |
| download | edk2-trunk.tar.xz | |
Renormalized end-of-lines from master@27b044605cd5f6b33a3d231576003850b3fe305btrunk
Diffstat (limited to 'BaseTools/Source/C/Common/StringFuncs.c')
| -rw-r--r-- | BaseTools/Source/C/Common/StringFuncs.c | 654 |
1 files changed, 327 insertions, 327 deletions
diff --git a/BaseTools/Source/C/Common/StringFuncs.c b/BaseTools/Source/C/Common/StringFuncs.c index 53e44365e9..90c5354119 100644 --- a/BaseTools/Source/C/Common/StringFuncs.c +++ b/BaseTools/Source/C/Common/StringFuncs.c @@ -1,327 +1,327 @@ -/** @file
-Function prototypes and defines for string routines.
-
-Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <string.h>
-#include <ctype.h>
-#include "StringFuncs.h"
-
-//
-// Functions implementations
-//
-
-/**
- Allocates a new string and copies 'String' to clone it
-
- @param String The string to clone
-
- @return CHAR8* - NULL if there are not enough resources
-**/
-CHAR8*
-CloneString (
- IN CHAR8 *String
- )
-{
- CHAR8* NewString;
-
- NewString = malloc (strlen (String) + 1);
- if (NewString != NULL) {
- strcpy (NewString, String);
- }
-
- return NewString;
-}
-
-/**
- Remove all comments, leading and trailing whitespace from the string.
-
- @param String The string to 'strip'
-
- @return EFI_STATUS
-**/
-EFI_STATUS
-StripInfDscStringInPlace (
- IN CHAR8 *String
- )
-{
- CHAR8 *Pos;
-
- if (String == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Remove leading whitespace
- //
- for (Pos = String; isspace ((int)*Pos); Pos++) {
- }
- if (Pos != String) {
- memmove (String, Pos, strlen (Pos) + 1);
- }
-
- //
- // Comment BUGBUGs!
- //
- // What about strings? Comment characters are okay in strings.
- // What about multiline comments?
- //
-
- Pos = (CHAR8 *) strstr (String, "//");
- if (Pos != NULL) {
- *Pos = '\0';
- }
-
- Pos = (CHAR8 *) strchr (String, '#');
- if (Pos != NULL) {
- *Pos = '\0';
- }
-
- //
- // Remove trailing whitespace
- //
- for (Pos = String + strlen (String);
- ((Pos - 1) >= String) && (isspace ((int)*(Pos - 1)));
- Pos--
- ) {
- }
- *Pos = '\0';
-
- return EFI_SUCCESS;
-}
-
-/**
- Creates and returns a 'split' STRING_LIST by splitting the string
- on whitespace boundaries.
-
- @param String The string to 'split'
-
- @return EFI_STATUS
-**/
-STRING_LIST*
-SplitStringByWhitespace (
- IN CHAR8 *String
- )
-{
- CHAR8 *Pos;
- CHAR8 *EndOfSubString;
- CHAR8 *EndOfString;
- STRING_LIST *Output;
- UINTN Item;
-
- String = CloneString (String);
- if (String == NULL) {
- return NULL;
- }
- EndOfString = String + strlen (String);
-
- Output = NewStringList ();
-
- for (Pos = String, Item = 0; Pos < EndOfString; Item++) {
- while (isspace ((int)*Pos)) {
- Pos++;
- }
-
- for (EndOfSubString=Pos;
- (*EndOfSubString != '\0') && !isspace ((int)*EndOfSubString);
- EndOfSubString++
- ) {
- }
-
- if (EndOfSubString == Pos) {
- break;
- }
-
- *EndOfSubString = '\0';
-
- AppendCopyOfStringToList (&Output, Pos);
-
- Pos = EndOfSubString + 1;
- }
-
- free (String);
- return Output;
-}
-
-/**
- Creates a new STRING_LIST with 0 strings.
-
- @return STRING_LIST* - Null if there is not enough resources to create the object.
-**/
-STRING_LIST*
-NewStringList (
- )
-{
- STRING_LIST *NewList;
- NewList = AllocateStringListStruct (0);
- if (NewList != NULL) {
- NewList->Count = 0;
- }
- return NewList;
-}
-
-/**
- Adds String to StringList. A new copy of String is made before it is
- added to StringList.
-
- @return EFI_STATUS
-**/
-EFI_STATUS
-AppendCopyOfStringToList (
- IN OUT STRING_LIST **StringList,
- IN CHAR8 *String
- )
-{
- STRING_LIST *OldList;
- STRING_LIST *NewList;
- CHAR8 *NewString;
-
- OldList = *StringList;
- NewList = AllocateStringListStruct (OldList->Count + 1);
- if (NewList == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- NewString = CloneString (String);
- if (NewString == NULL) {
- free (NewList);
- return EFI_OUT_OF_RESOURCES;
- }
-
- memcpy (
- NewList->Strings,
- OldList->Strings,
- sizeof (OldList->Strings[0]) * OldList->Count
- );
- NewList->Count = OldList->Count + 1;
- NewList->Strings[OldList->Count] = NewString;
-
- *StringList = NewList;
- free (OldList);
-
- return EFI_SUCCESS;
-}
-
-/**
- Removes the last string from StringList and frees the memory associated
- with it.
-
- @param StringList The string list to remove the string from
-
- @return EFI_STATUS
-**/
-EFI_STATUS
-RemoveLastStringFromList (
- IN STRING_LIST *StringList
- )
-{
- if (StringList->Count == 0) {
- return EFI_INVALID_PARAMETER;
- }
-
- free (StringList->Strings[StringList->Count - 1]);
- StringList->Count--;
- return EFI_SUCCESS;
-}
-
-/**
- Allocates a STRING_LIST structure that can store StringCount strings.
-
- @param StringCount The number of strings that need to be stored
-
- @return EFI_STATUS
-**/
-STRING_LIST*
-AllocateStringListStruct (
- IN UINTN StringCount
- )
-{
- return malloc (OFFSET_OF(STRING_LIST, Strings[StringCount + 1]));
-}
-
-/**
- Frees all memory associated with StringList.
-
- @param StringList The string list to free
-**/
-VOID
-FreeStringList (
- IN STRING_LIST *StringList
- )
-{
- while (StringList->Count > 0) {
- RemoveLastStringFromList (StringList);
- }
-
- free (StringList);
-}
-
-/**
- Generates a string that represents the STRING_LIST
-
- @param StringList The string list to convert to a string
-
- @return CHAR8* - The string list represented with a single string. The returned
- string must be freed by the caller.
-**/
-CHAR8*
-StringListToString (
- IN STRING_LIST *StringList
- )
-{
- UINTN Count;
- UINTN Length;
- CHAR8 *NewString;
-
- Length = 2;
- for (Count = 0; Count < StringList->Count; Count++) {
- if (Count > 0) {
- Length += 2;
- }
- Length += strlen (StringList->Strings[Count]) + 2;
- }
-
- NewString = malloc (Length + 1);
- if (NewString == NULL) {
- return NewString;
- }
- NewString[0] = '\0';
-
- strcat (NewString, "[");
- for (Count = 0; Count < StringList->Count; Count++) {
- if (Count > 0) {
- strcat (NewString, ", ");
- }
- strcat (NewString, "\"");
- strcat (NewString, StringList->Strings[Count]);
- strcat (NewString, "\"");
- }
- strcat (NewString, "]");
-
- return NewString;
-}
-
-/**
- Prints out the string list
-
- @param StringList The string list to print
-
- @return EFI_STATUS
-**/
-VOID
-PrintStringList (
- IN STRING_LIST *StringList
- )
-{
- CHAR8* String;
- String = StringListToString (StringList);
- if (String != NULL) {
- printf ("%s", String);
- free (String);
- }
-}
-
-
+/** @file +Function prototypes and defines for string routines. + +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <string.h> +#include <ctype.h> +#include "StringFuncs.h" + +// +// Functions implementations +// + +/** + Allocates a new string and copies 'String' to clone it + + @param String The string to clone + + @return CHAR8* - NULL if there are not enough resources +**/ +CHAR8* +CloneString ( + IN CHAR8 *String + ) +{ + CHAR8* NewString; + + NewString = malloc (strlen (String) + 1); + if (NewString != NULL) { + strcpy (NewString, String); + } + + return NewString; +} + +/** + Remove all comments, leading and trailing whitespace from the string. + + @param String The string to 'strip' + + @return EFI_STATUS +**/ +EFI_STATUS +StripInfDscStringInPlace ( + IN CHAR8 *String + ) +{ + CHAR8 *Pos; + + if (String == NULL) { + return EFI_INVALID_PARAMETER; + } + + // + // Remove leading whitespace + // + for (Pos = String; isspace ((int)*Pos); Pos++) { + } + if (Pos != String) { + memmove (String, Pos, strlen (Pos) + 1); + } + + // + // Comment BUGBUGs! + // + // What about strings? Comment characters are okay in strings. + // What about multiline comments? + // + + Pos = (CHAR8 *) strstr (String, "//"); + if (Pos != NULL) { + *Pos = '\0'; + } + + Pos = (CHAR8 *) strchr (String, '#'); + if (Pos != NULL) { + *Pos = '\0'; + } + + // + // Remove trailing whitespace + // + for (Pos = String + strlen (String); + ((Pos - 1) >= String) && (isspace ((int)*(Pos - 1))); + Pos-- + ) { + } + *Pos = '\0'; + + return EFI_SUCCESS; +} + +/** + Creates and returns a 'split' STRING_LIST by splitting the string + on whitespace boundaries. + + @param String The string to 'split' + + @return EFI_STATUS +**/ +STRING_LIST* +SplitStringByWhitespace ( + IN CHAR8 *String + ) +{ + CHAR8 *Pos; + CHAR8 *EndOfSubString; + CHAR8 *EndOfString; + STRING_LIST *Output; + UINTN Item; + + String = CloneString (String); + if (String == NULL) { + return NULL; + } + EndOfString = String + strlen (String); + + Output = NewStringList (); + + for (Pos = String, Item = 0; Pos < EndOfString; Item++) { + while (isspace ((int)*Pos)) { + Pos++; + } + + for (EndOfSubString=Pos; + (*EndOfSubString != '\0') && !isspace ((int)*EndOfSubString); + EndOfSubString++ + ) { + } + + if (EndOfSubString == Pos) { + break; + } + + *EndOfSubString = '\0'; + + AppendCopyOfStringToList (&Output, Pos); + + Pos = EndOfSubString + 1; + } + + free (String); + return Output; +} + +/** + Creates a new STRING_LIST with 0 strings. + + @return STRING_LIST* - Null if there is not enough resources to create the object. +**/ +STRING_LIST* +NewStringList ( + ) +{ + STRING_LIST *NewList; + NewList = AllocateStringListStruct (0); + if (NewList != NULL) { + NewList->Count = 0; + } + return NewList; +} + +/** + Adds String to StringList. A new copy of String is made before it is + added to StringList. + + @return EFI_STATUS +**/ +EFI_STATUS +AppendCopyOfStringToList ( + IN OUT STRING_LIST **StringList, + IN CHAR8 *String + ) +{ + STRING_LIST *OldList; + STRING_LIST *NewList; + CHAR8 *NewString; + + OldList = *StringList; + NewList = AllocateStringListStruct (OldList->Count + 1); + if (NewList == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + NewString = CloneString (String); + if (NewString == NULL) { + free (NewList); + return EFI_OUT_OF_RESOURCES; + } + + memcpy ( + NewList->Strings, + OldList->Strings, + sizeof (OldList->Strings[0]) * OldList->Count + ); + NewList->Count = OldList->Count + 1; + NewList->Strings[OldList->Count] = NewString; + + *StringList = NewList; + free (OldList); + + return EFI_SUCCESS; +} + +/** + Removes the last string from StringList and frees the memory associated + with it. + + @param StringList The string list to remove the string from + + @return EFI_STATUS +**/ +EFI_STATUS +RemoveLastStringFromList ( + IN STRING_LIST *StringList + ) +{ + if (StringList->Count == 0) { + return EFI_INVALID_PARAMETER; + } + + free (StringList->Strings[StringList->Count - 1]); + StringList->Count--; + return EFI_SUCCESS; +} + +/** + Allocates a STRING_LIST structure that can store StringCount strings. + + @param StringCount The number of strings that need to be stored + + @return EFI_STATUS +**/ +STRING_LIST* +AllocateStringListStruct ( + IN UINTN StringCount + ) +{ + return malloc (OFFSET_OF(STRING_LIST, Strings[StringCount + 1])); +} + +/** + Frees all memory associated with StringList. + + @param StringList The string list to free +**/ +VOID +FreeStringList ( + IN STRING_LIST *StringList + ) +{ + while (StringList->Count > 0) { + RemoveLastStringFromList (StringList); + } + + free (StringList); +} + +/** + Generates a string that represents the STRING_LIST + + @param StringList The string list to convert to a string + + @return CHAR8* - The string list represented with a single string. The returned + string must be freed by the caller. +**/ +CHAR8* +StringListToString ( + IN STRING_LIST *StringList + ) +{ + UINTN Count; + UINTN Length; + CHAR8 *NewString; + + Length = 2; + for (Count = 0; Count < StringList->Count; Count++) { + if (Count > 0) { + Length += 2; + } + Length += strlen (StringList->Strings[Count]) + 2; + } + + NewString = malloc (Length + 1); + if (NewString == NULL) { + return NewString; + } + NewString[0] = '\0'; + + strcat (NewString, "["); + for (Count = 0; Count < StringList->Count; Count++) { + if (Count > 0) { + strcat (NewString, ", "); + } + strcat (NewString, "\""); + strcat (NewString, StringList->Strings[Count]); + strcat (NewString, "\""); + } + strcat (NewString, "]"); + + return NewString; +} + +/** + Prints out the string list + + @param StringList The string list to print + + @return EFI_STATUS +**/ +VOID +PrintStringList ( + IN STRING_LIST *StringList + ) +{ + CHAR8* String; + String = StringListToString (StringList); + if (String != NULL) { + printf ("%s", String); + free (String); + } +} + + |
