ArmPkg/SemihostFs: Various fixes for the file system

- Fix file deletion from the shell.
- Fix file creation using the shell editor.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Harry Liebel <Harry.Liebel@arm.com>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15390 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Harry Liebel 2014-03-25 11:04:41 +00:00 committed by oliviermartin
parent 228fdff4be
commit d276ac10f1
2 changed files with 22 additions and 9 deletions

View File

@ -2,7 +2,7 @@
Support a Semi Host file system over a debuggers JTAG
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
Portions copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -544,7 +544,9 @@ FileSetInfo (
if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid) != 0) {
//Status = SetFilesystemInfo (Fcb, BufferSize, Buffer);
} else if (CompareGuid (InformationType, &gEfiFileInfoGuid) != 0) {
//Status = SetFileInfo (Fcb, BufferSize, Buffer);
// Semihosting does not give us access to setting file info, but
// if we fail here we cannot create new files.
Status = EFI_SUCCESS;
} else if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid) != 0) {
if (StrSize (Buffer) > 0) {
FreePool (mSemihostFsLabel);

View File

@ -1,6 +1,7 @@
/** @file
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@ -73,10 +74,12 @@ SemihostFileSeek (
Result = Semihost_SYS_SEEK(&SeekBlock);
if (Result == 0) {
return RETURN_SUCCESS;
} else {
// Semihosting does not behave as documented. It returns the offset on
// success.
if (Result < 0) {
return RETURN_ABORTED;
} else {
return RETURN_SUCCESS;
}
}
@ -100,7 +103,7 @@ SemihostFileRead (
Result = Semihost_SYS_READ(&ReadBlock);
if (Result == *Length) {
if ((*Length != 0) && (Result == *Length)) {
return RETURN_ABORTED;
} else {
*Length -= Result;
@ -127,6 +130,9 @@ SemihostFileWrite (
*Length = Semihost_SYS_WRITE(&WriteBlock);
if (*Length != 0)
return RETURN_ABORTED;
else
return RETURN_SUCCESS;
}
@ -174,6 +180,11 @@ SemihostFileRemove (
SEMIHOST_FILE_REMOVE_BLOCK RemoveBlock;
UINT32 Result;
// Remove any leading separator (e.g.: '\'). EFI Shell adds one.
if (*FileName == '\\') {
FileName++;
}
RemoveBlock.FileName = FileName;
RemoveBlock.NameLength = AsciiStrLen(FileName);