mirror of https://github.com/acidanthera/audk.git
190 lines
7.4 KiB
Diff
190 lines
7.4 KiB
Diff
|
diff -urN Shell1.04\Shell/Library/DPath.c EdkCompatibilityPkg\Shell/Library/DPath.c
|
||
|
--- Shell1.04\Shell/Library/DPath.c 2007-11-15 14:38:52.000000000 +0800
|
||
|
+++ EdkCompatibilityPkg\Shell/Library/DPath.c 2008-02-25 13:38:07.000000000 +0800
|
||
|
@@ -1,6 +1,6 @@
|
||
|
/*++
|
||
|
|
||
|
-Copyright (c) 2005 - 2007, Intel Corporation
|
||
|
+Copyright (c) 2005 - 2008, Intel Corporation
|
||
|
All rights reserved. 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
|
||
|
@@ -1294,17 +1294,8 @@
|
||
|
ASSERT (Str != NULL);
|
||
|
ASSERT (DevPath != NULL);
|
||
|
|
||
|
- if (ST->Hdr.Revision > 0x00020000) {
|
||
|
- FvPath = DevPath;
|
||
|
- CatPrint (Str, L"Fv(%g)", &FvPath->NameGuid);
|
||
|
- } else if (ST->Hdr.Revision < 0x00020000) {
|
||
|
- //
|
||
|
- // MEDIA_FV_FILEPATH_DP_EFI_1_10 == MEDIA_FV_DP == 0x06
|
||
|
- //
|
||
|
- _DevPathFvFilePath (Str, DevPath);
|
||
|
- } else {
|
||
|
- _DevPathNodeUnknown (Str, DevPath);
|
||
|
- }
|
||
|
+ FvPath = DevPath;
|
||
|
+ CatPrint (Str, L"Fv(%g)", &FvPath->NameGuid);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
@@ -2006,16 +1997,11 @@
|
||
|
#if (EFI_SPECIFICATION_VERSION > 0x00020000)
|
||
|
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH_EFI_2_00 *FvDevicePathNodeUefi_2_00;
|
||
|
|
||
|
- if (ST->Hdr.Revision > 0x00020000) {
|
||
|
+ if (ST->Hdr.Revision != 0x00020000) {
|
||
|
if (DevicePathType (&FvDevicePathNode->Header) == MEDIA_DEVICE_PATH &&
|
||
|
DevicePathSubType (&FvDevicePathNode->Header) == MEDIA_FV_FILEPATH_DP) {
|
||
|
return &FvDevicePathNode->NameGuid;
|
||
|
}
|
||
|
- } else if (ST->Hdr.Revision < 0x00020000) {
|
||
|
- if (DevicePathType (&FvDevicePathNode->Header) == MEDIA_DEVICE_PATH &&
|
||
|
- DevicePathSubType (&FvDevicePathNode->Header) == MEDIA_FV_FILEPATH_DP_EFI_1_10) {
|
||
|
- return &FvDevicePathNode->NameGuid;
|
||
|
- }
|
||
|
} else {
|
||
|
FvDevicePathNodeUefi_2_00 = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH_EFI_2_00 *)FvDevicePathNode;
|
||
|
if (DevicePathType (&FvDevicePathNodeUefi_2_00->Piwg.Header) == MEDIA_DEVICE_PATH &&
|
||
|
diff -urN Shell1.04\Shell/Library/DPath.h EdkCompatibilityPkg\Shell/Library/DPath.h
|
||
|
--- Shell1.04\Shell/Library/DPath.h 2007-11-14 22:48:14.000000000 +0800
|
||
|
+++ EdkCompatibilityPkg\Shell/Library/DPath.h 2008-02-25 13:38:07.000000000 +0800
|
||
|
@@ -1,6 +1,6 @@
|
||
|
/*++
|
||
|
|
||
|
-Copyright (c) 2005 - 2007, Intel Corporation
|
||
|
+Copyright (c) 2005 - 2008, Intel Corporation
|
||
|
All rights reserved. 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
|
||
|
@@ -161,11 +161,6 @@
|
||
|
|
||
|
#if (EFI_SPECIFICATION_VERSION > 0x00020000)
|
||
|
//
|
||
|
-// For EFI1.10 FV file device path
|
||
|
-//
|
||
|
-#define MEDIA_FV_FILEPATH_DP_EFI_1_10 0x06
|
||
|
-
|
||
|
-//
|
||
|
// For UEFI2.0 FV file device path
|
||
|
//
|
||
|
typedef struct {
|
||
|
diff -urN Shell1.04\Shell/Library/FileIO.c EdkCompatibilityPkg\Shell/Library/FileIO.c
|
||
|
--- Shell1.04\Shell/Library/FileIO.c 2006-03-15 11:54:44.000000000 +0800
|
||
|
+++ EdkCompatibilityPkg\Shell/Library/FileIO.c 2008-03-24 13:44:52.000000000 +0800
|
||
|
@@ -1,6 +1,6 @@
|
||
|
/*++
|
||
|
|
||
|
-Copyright (c) 2005, Intel Corporation
|
||
|
+Copyright (c) 2005 - 2008, Intel Corporation
|
||
|
All rights reserved. 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
|
||
|
@@ -253,14 +253,16 @@
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
- EFI_STATUS Status;
|
||
|
- EFI_FILE_HANDLE LastHandle;
|
||
|
- FILEPATH_DEVICE_PATH *FilePathNode;
|
||
|
+ EFI_STATUS Status;
|
||
|
+ EFI_FILE_HANDLE LastHandle;
|
||
|
+ FILEPATH_DEVICE_PATH *FilePathNode;
|
||
|
+ EFI_DEVICE_PATH_PROTOCOL *AlignedFilePath;
|
||
|
|
||
|
ASSERT (FilePath != NULL);
|
||
|
ASSERT (DeviceHandle != NULL);
|
||
|
ASSERT (FileHandle != NULL);
|
||
|
-
|
||
|
+
|
||
|
+ AlignedFilePath = NULL;
|
||
|
//
|
||
|
// File the file system for this file path
|
||
|
//
|
||
|
@@ -274,12 +276,26 @@
|
||
|
*FileHandle = LibOpenRoot (*DeviceHandle);
|
||
|
Status = *FileHandle ? EFI_SUCCESS : EFI_UNSUPPORTED;
|
||
|
|
||
|
+ if (EFI_ERROR (Status)) {
|
||
|
+ return Status;
|
||
|
+ }
|
||
|
+
|
||
|
+ //
|
||
|
+ // Duplicate FilePath to make sure it is aligned so that
|
||
|
+ // FilePathNode->PathName below is 16-bit aligned.
|
||
|
+ //
|
||
|
+ AlignedFilePath = DuplicateDevicePath(*FilePath);
|
||
|
+ if (AlignedFilePath == NULL) {
|
||
|
+ (*FileHandle)->Close (*FileHandle);
|
||
|
+ *FileHandle = NULL;
|
||
|
+ return EFI_OUT_OF_RESOURCES;
|
||
|
+ }
|
||
|
+ FilePathNode = (FILEPATH_DEVICE_PATH *)AlignedFilePath;
|
||
|
//
|
||
|
// To access as a file system, the file path should only
|
||
|
// contain file path components. Follow the file path nodes
|
||
|
// and find the target file
|
||
|
//
|
||
|
- FilePathNode = (FILEPATH_DEVICE_PATH *) *FilePath;
|
||
|
while (!IsDevicePathEnd (&FilePathNode->Header)) {
|
||
|
//
|
||
|
// For file system access each node should be a file path component
|
||
|
@@ -332,6 +348,7 @@
|
||
|
if (EFI_ERROR (Status)) {
|
||
|
*FileHandle = NULL;
|
||
|
}
|
||
|
+ FreePool(AlignedFilePath);
|
||
|
|
||
|
return Status;
|
||
|
}
|
||
|
diff -urN Shell1.04\Shell/shellenv/var.c EdkCompatibilityPkg\Shell/shellenv/var.c
|
||
|
--- Shell1.04\Shell/shellenv/var.c 2006-03-07 16:20:44.000000000 +0800
|
||
|
+++ EdkCompatibilityPkg\Shell/shellenv/var.c 2008-02-25 13:38:08.000000000 +0800
|
||
|
@@ -389,8 +389,15 @@
|
||
|
{
|
||
|
UINTN Size;
|
||
|
VARIABLE_ID *Var;
|
||
|
+ UINTN RoundUpValueSize;
|
||
|
|
||
|
- Size = sizeof (VARIABLE_ID) + StrSize (Name) + ValueSize;
|
||
|
+ //
|
||
|
+ // Variable buffer layout: VARIABLE_ID + Value + Name
|
||
|
+ // We need to round up the variable size to make sure Name is aligned (for IPF).
|
||
|
+ //
|
||
|
+ RoundUpValueSize = (ValueSize % 2) ? (ValueSize + 1) : ValueSize;
|
||
|
+
|
||
|
+ Size = sizeof (VARIABLE_ID) + StrSize (Name) + RoundUpValueSize;
|
||
|
Var = AllocateZeroPool (Size);
|
||
|
if (Var == NULL) {
|
||
|
return NULL;
|
||
|
@@ -398,7 +405,7 @@
|
||
|
|
||
|
Var->Signature = VARIABLE_SIGNATURE;
|
||
|
Var->u.Value = ((UINT8 *) Var) + sizeof (VARIABLE_ID);
|
||
|
- Var->Name = (CHAR16 *) (Var->u.Value + ValueSize);
|
||
|
+ Var->Name = (CHAR16 *) (Var->u.Value + RoundUpValueSize);
|
||
|
Var->ValueSize = ValueSize;
|
||
|
CopyMem (Var->u.Value, Value, ValueSize);
|
||
|
StrCpy (Var->Name, Name);
|
||
|
diff -urN Shell1.04\Shell/ver/Ver.inf EdkCompatibilityPkg\Shell/ver/Ver.inf
|
||
|
--- Shell1.04\Shell/ver/Ver.inf 2007-03-04 23:30:48.000000000 +0800
|
||
|
+++ EdkCompatibilityPkg\Shell/ver/Ver.inf 2008-03-03 13:36:05.000000000 +0800
|
||
|
@@ -1,6 +1,6 @@
|
||
|
#/*++
|
||
|
#
|
||
|
-# Copyright (c) 2005 - 2007, Intel Corporation
|
||
|
+# Copyright (c) 2005 - 2008, Intel Corporation
|
||
|
# All rights reserved. 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
|
||
|
@@ -45,7 +45,7 @@
|
||
|
Ver.c
|
||
|
Ver.h
|
||
|
|
||
|
-[sources.ia32|x64]
|
||
|
+[sources.ia32,sources.x64]
|
||
|
ia32\ver32.c
|
||
|
|
||
|
[sources.ipf]
|