Returns:\r
\r
EFI_INVALID_PARAMETER - The parameter is invalid\r
+ EFI_OUT_OF_RESOURCES - Resource can not be allocated\r
EFI_SUCCESS - The function completed successfully\r
\r
--*/\r
CHAR8 Buff4[10];\r
CHAR8 Buff5[10];\r
CHAR8 Token[50];\r
+ CHAR8 *FormatString;\r
+ INTN FormatLength;\r
\r
Fp = fopen (LongFilePath (VtfInfo->CompSymName), "rb");\r
\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ //\r
+ // Generate the format string for fscanf\r
+ //\r
+ FormatLength = snprintf (\r
+ NULL,\r
+ 0,\r
+ "%%%us %%%us %%%us %%%us %%%us %%%us %%%us",\r
+ (unsigned) sizeof (Buff1) - 1,\r
+ (unsigned) sizeof (Buff2) - 1,\r
+ (unsigned) sizeof (OffsetStr) - 1,\r
+ (unsigned) sizeof (Buff3) - 1,\r
+ (unsigned) sizeof (Buff4) - 1,\r
+ (unsigned) sizeof (Buff5) - 1,\r
+ (unsigned) sizeof (Token) - 1\r
+ ) + 1;\r
+\r
+ FormatString = (CHAR8 *) malloc (FormatLength);\r
+ if (FormatString == NULL) {\r
+ fclose (Fp);\r
+\r
+ Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ snprintf (\r
+ FormatString,\r
+ FormatLength,\r
+ "%%%us %%%us %%%us %%%us %%%us %%%us %%%us",\r
+ (unsigned) sizeof (Buff1) - 1,\r
+ (unsigned) sizeof (Buff2) - 1,\r
+ (unsigned) sizeof (OffsetStr) - 1,\r
+ (unsigned) sizeof (Buff3) - 1,\r
+ (unsigned) sizeof (Buff4) - 1,\r
+ (unsigned) sizeof (Buff5) - 1,\r
+ (unsigned) sizeof (Token) - 1\r
+ );\r
+\r
while (fgets (Buff, sizeof (Buff), Fp) != NULL) {\r
fscanf (\r
Fp,\r
- "%s %s %s %s %s %s %s",\r
+ FormatString,\r
Buff1,\r
Buff2,\r
OffsetStr,\r
\r
memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));\r
\r
+ if (FormatString != NULL) {\r
+ free (FormatString);\r
+ }\r
+\r
if (Fp != NULL) {\r
fclose (Fp);\r
}\r
CHAR8 Section[MAX_LONG_FILE_PATH];\r
CHAR8 Token[MAX_LONG_FILE_PATH];\r
CHAR8 BaseToken[MAX_LONG_FILE_PATH];\r
+ CHAR8 *FormatString;\r
+ INTN FormatLength;\r
UINT64 TokenAddress;\r
long StartLocation;\r
\r
return EFI_ABORTED;\r
}\r
\r
+ //\r
+ // Generate the format string for fscanf\r
+ //\r
+ FormatLength = snprintf (\r
+ NULL,\r
+ 0,\r
+ "%%%us | %%%us | %%%us | %%%us\n",\r
+ (unsigned) sizeof (Type) - 1,\r
+ (unsigned) sizeof (Address) - 1,\r
+ (unsigned) sizeof (Section) - 1,\r
+ (unsigned) sizeof (Token) - 1\r
+ ) + 1;\r
+\r
+ FormatString = (CHAR8 *) malloc (FormatLength);\r
+ if (FormatString == NULL) {\r
+ fclose (SourceFile);\r
+ fclose (DestFile);\r
+ Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");\r
+ return EFI_ABORTED;\r
+ }\r
+\r
+ snprintf (\r
+ FormatString,\r
+ FormatLength,\r
+ "%%%us | %%%us | %%%us | %%%us\n",\r
+ (unsigned) sizeof (Type) - 1,\r
+ (unsigned) sizeof (Address) - 1,\r
+ (unsigned) sizeof (Section) - 1,\r
+ (unsigned) sizeof (Token) - 1\r
+ );\r
+\r
//\r
// Read in the file\r
//\r
//\r
// Read a line\r
//\r
- if (fscanf (SourceFile, "%s | %s | %s | %s\n", Type, Address, Section, Token) == 4) {\r
+ if (fscanf (SourceFile, FormatString, Type, Address, Section, Token) == 4) {\r
\r
//\r
// Get the token address\r
}\r
}\r
\r
+ free (FormatString);\r
fclose (SourceFile);\r
fclose (DestFile);\r
return EFI_SUCCESS;\r