EFI_VFR_RETURN_CODE CFormPkg::BuildPkg ( IN FILE *Output, IN PACKAGE_DATA *PkgData ) { EFI_VFR_RETURN_CODE Ret; CHAR8 Buffer[1024]; UINT32 Size; EFI_HII_PACKAGE_HEADER *PkgHdr; if (Output == NULL) { return VFR_RETURN_FATAL_ERROR; } if ((Ret = BuildPkgHdr(&PkgHdr)) != VFR_RETURN_SUCCESS) { return Ret; } fwrite (PkgHdr, sizeof (EFI_HII_PACKAGE_HEADER), 1, Output); delete PkgHdr; if (PkgData == NULL) { Open (); while ((Size = Read (Buffer, 1024)) != 0) { fwrite (Buffer, Size, 1, Output); } Close (); } else { fwrite (PkgData->Buffer, PkgData->Size, 1, Output); } return VFR_RETURN_SUCCESS; }
EFI_VFR_RETURN_CODE CFormPkg::GenCFile ( IN INT8 *BaseName, IN FILE *pFile ) { EFI_VFR_RETURN_CODE Ret; INT8 Buffer[BYTES_PRE_LINE * 8]; EFI_HII_PACKAGE_HEADER *PkgHdr; UINT32 PkgLength = 0; UINT32 ReadSize = 0; if ((BaseName == NULL) || (pFile == NULL)) { return VFR_RETURN_FATAL_ERROR; } fprintf (pFile, "\nunsigned char %sBin[] = {\n", BaseName); if ((Ret = BuildPkgHdr(&PkgHdr)) != VFR_RETURN_SUCCESS) { return Ret; } fprintf (pFile, " // ARRAY LENGTH\n"); PkgLength = PkgHdr->Length + sizeof (UINT32); _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, " ", (INT8 *)&PkgLength, sizeof (UINT32)); fprintf (pFile, "\n\n // PACKAGE HEADER\n"); _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, " ", (INT8 *)PkgHdr, sizeof (EFI_HII_PACKAGE_HEADER)); PkgLength = sizeof (EFI_HII_PACKAGE_HEADER); fprintf (pFile, "\n\n // PACKAGE DATA\n"); Open (); while ((ReadSize = Read ((CHAR8 *)Buffer, BYTES_PRE_LINE * 8)) != 0) { PkgLength += ReadSize; if (PkgLength < PkgHdr->Length) { _WRITE_PKG_LINE (pFile, BYTES_PRE_LINE, " ", Buffer, ReadSize); } else { _WRITE_PKG_END (pFile, BYTES_PRE_LINE, " ", Buffer, ReadSize); } } Close (); delete PkgHdr; fprintf (pFile, "\n};\n"); return VFR_RETURN_SUCCESS; }
EFI_VFR_RETURN_CODE CFormPkg::GenCFile ( IN CHAR8 *BaseName, IN FILE *pFile, IN PACKAGE_DATA *PkgData ) { EFI_VFR_RETURN_CODE Ret; CHAR8 Buffer[BYTES_PRE_LINE * 8]; EFI_HII_PACKAGE_HEADER *PkgHdr; UINT32 PkgLength = 0; UINT32 ReadSize = 0; if ((BaseName == NULL) || (pFile == NULL)) { return VFR_RETURN_FATAL_ERROR; } fprintf (pFile, "\nunsigned char %sBin[] = {\n", BaseName); if ((Ret = BuildPkgHdr(&PkgHdr)) != VFR_RETURN_SUCCESS) { return Ret; } // // For framework vfr file, the extension framework header will be added. // if (VfrCompatibleMode) { fprintf (pFile, " // FRAMEWORK PACKAGE HEADER Length\n"); PkgLength = PkgHdr->Length + sizeof (UINT32) + 2; _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, " ", (CHAR8 *)&PkgLength, sizeof (UINT32)); fprintf (pFile, "\n\n // FRAMEWORK PACKAGE HEADER Type\n"); PkgLength = 3; _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, " ", (CHAR8 *)&PkgLength, sizeof (UINT16)); } else { fprintf (pFile, " // ARRAY LENGTH\n"); PkgLength = PkgHdr->Length + sizeof (UINT32); _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, " ", (CHAR8 *)&PkgLength, sizeof (UINT32)); } fprintf (pFile, "\n\n // PACKAGE HEADER\n"); _WRITE_PKG_LINE(pFile, BYTES_PRE_LINE, " ", (CHAR8 *)PkgHdr, sizeof (EFI_HII_PACKAGE_HEADER)); PkgLength = sizeof (EFI_HII_PACKAGE_HEADER); fprintf (pFile, "\n\n // PACKAGE DATA\n"); if (PkgData == NULL) { Open (); while ((ReadSize = Read ((CHAR8 *)Buffer, BYTES_PRE_LINE * 8)) != 0) { PkgLength += ReadSize; if (PkgLength < PkgHdr->Length) { _WRITE_PKG_LINE (pFile, BYTES_PRE_LINE, " ", Buffer, ReadSize); } else { _WRITE_PKG_END (pFile, BYTES_PRE_LINE, " ", Buffer, ReadSize); } } Close (); } else { if (PkgData->Size % BYTES_PRE_LINE != 0) { PkgLength = PkgData->Size - (PkgData->Size % BYTES_PRE_LINE); _WRITE_PKG_LINE (pFile, BYTES_PRE_LINE, " ", PkgData->Buffer, PkgLength); _WRITE_PKG_END (pFile, BYTES_PRE_LINE, " ", PkgData->Buffer + PkgLength, PkgData->Size % BYTES_PRE_LINE); } else { PkgLength = PkgData->Size - BYTES_PRE_LINE; _WRITE_PKG_LINE (pFile, BYTES_PRE_LINE, " ", PkgData->Buffer, PkgLength); _WRITE_PKG_END (pFile, BYTES_PRE_LINE, " ", PkgData->Buffer + PkgLength, BYTES_PRE_LINE); } } delete PkgHdr; fprintf (pFile, "\n};\n"); return VFR_RETURN_SUCCESS; }