Revision: 16606
http://sourceforge.net/p/edk2/code/16606
Author: jcarsey
Date: 2015-01-13 22:16:41 +0000 (Tue, 13 Jan 2015)
Log Message:
-----------
ShellPkg: allow creating of files to create required directory path
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: jaben carsey <[email protected]>
Reviewed-by: Tapan Shah <[email protected]>
Reviewed-by: Joe Peterson <[email protected]>
Modified Paths:
--------------
trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.c
trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.inf
Modified: trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.c 2015-01-13
18:58:00 UTC (rev 16605)
+++ trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.c 2015-01-13
22:16:41 UTC (rev 16606)
@@ -1,7 +1,7 @@
/** @file
Provides interface to shell functionality for shell commands and
applications.
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
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
@@ -15,6 +15,7 @@
#include "UefiShellLib.h"
#include <ShellBase.h>
#include <Library/SortLib.h>
+#include <Library/PathLib.h>
#define FIND_XXXXX_FILE_BUFFER_SIZE (SIZE_OF_EFI_FILE_INFO + MAX_FILE_NAME_LEN)
@@ -671,6 +672,7 @@
EFI_DEVICE_PATH_PROTOCOL *FilePath;
EFI_STATUS Status;
EFI_FILE_INFO *FileInfo;
+ CHAR16 *FileNameCopy;
//
// ASSERT if FileName is NULL
@@ -682,11 +684,32 @@
}
if (gEfiShellProtocol != NULL) {
- if ((OpenMode & EFI_FILE_MODE_CREATE) == EFI_FILE_MODE_CREATE &&
(Attributes & EFI_FILE_DIRECTORY) == EFI_FILE_DIRECTORY) {
- return ShellCreateDirectory(FileName, FileHandle);
+ if ((OpenMode & EFI_FILE_MODE_CREATE) == EFI_FILE_MODE_CREATE) {
+
+ //
+ // Create only a directory
+ //
+ if ((Attributes & EFI_FILE_DIRECTORY) == EFI_FILE_DIRECTORY) {
+ return ShellCreateDirectory(FileName, FileHandle);
+ }
+
+ //
+ // Create the directory to create the file in
+ //
+ FileNameCopy = AllocateCopyPool (StrSize (FileName), FileName);
+ if (FileName == NULL) {
+ return (EFI_OUT_OF_RESOURCES);
+ }
+ PathCleanUpDirectories (FileNameCopy);
+ if (PathRemoveLastItem (FileNameCopy)) {
+ ShellCreateDirectory (FileNameCopy, FileHandle);
+ ShellCloseFile (FileHandle);
+ }
+ SHELL_FREE_NON_NULL (FileNameCopy);
}
+
//
- // Use UEFI Shell 2.0 method
+ // Use UEFI Shell 2.0 method to create the file
//
Status = gEfiShellProtocol->OpenFileByName(FileName,
FileHandle,
Modified: trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.inf
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.inf 2015-01-13
18:58:00 UTC (rev 16605)
+++ trunk/edk2/ShellPkg/Library/UefiShellLib/UefiShellLib.inf 2015-01-13
22:16:41 UTC (rev 16606)
@@ -1,7 +1,7 @@
## @file
# Provides interface to shell functionality for shell commands and
applications.
#
-# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved. <BR>
+# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved. <BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD
License
@@ -48,6 +48,7 @@
UefiLib
HiiLib
SortLib
+ PathLib
[Protocols]
gEfiSimpleFileSystemProtocolGuid # ALWAYS_CONSUMED
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits