]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Library/SemihostLib/SemihostLib.c
ArmPkg/SemihostLib: Add library functions
[mirror_edk2.git] / ArmPkg / Library / SemihostLib / SemihostLib.c
index f93d7991d298dbb9b71bae9c8d15d37df075df35..b1bbcbb392797c32be65ae14030e54db38435616 100644 (file)
@@ -172,6 +172,46 @@ SemihostFileLength (
   }\r
 }\r
 \r
+/**\r
+  Get a temporary name for a file from the host running the debug agent.\r
+\r
+  @param[out]  Buffer      Pointer to the buffer where the temporary name has to\r
+                           be stored\r
+  @param[in]   Identifier  File name identifier (integer in the range 0 to 255)\r
+  @param[in]   Length      Length of the buffer to store the temporary name\r
+\r
+  @retval  RETURN_SUCCESS            Temporary name returned\r
+  @retval  RETURN_INVALID_PARAMETER  Invalid buffer address\r
+  @retval  RETURN_ABORTED            Temporary name not returned\r
+\r
+**/\r
+RETURN_STATUS\r
+SemihostFileTmpName(\r
+  OUT  VOID   *Buffer,\r
+  IN   UINT8  Identifier,\r
+  IN   UINTN  Length\r
+  )\r
+{\r
+  SEMIHOST_FILE_TMPNAME_BLOCK  TmpNameBlock;\r
+  INT32                        Result;\r
+\r
+  if (Buffer == NULL) {\r
+    return RETURN_INVALID_PARAMETER;\r
+  }\r
+\r
+  TmpNameBlock.Buffer     = Buffer;\r
+  TmpNameBlock.Identifier = Identifier;\r
+  TmpNameBlock.Length     = Length;\r
+\r
+  Result = Semihost_SYS_TMPNAME (&TmpNameBlock);\r
+\r
+  if (Result != 0) {\r
+    return  RETURN_ABORTED;\r
+  } else {\r
+    return  RETURN_SUCCESS;\r
+  }\r
+}\r
+\r
 RETURN_STATUS\r
 SemihostFileRemove (\r
   IN CHAR8 *FileName\r
@@ -197,6 +237,44 @@ SemihostFileRemove (
   }\r
 }\r
 \r
+/**\r
+  Rename a specified file.\r
+\r
+  @param[in]  FileName     Name of the file to rename.\r
+  @param[in]  NewFileName  The new name of the file.\r
+\r
+  @retval  RETURN_SUCCESS            File Renamed\r
+  @retval  RETURN_INVALID_PARAMETER  Either the current or the new name is not specified\r
+  @retval  RETURN_ABORTED            Rename failed\r
+\r
+**/\r
+RETURN_STATUS\r
+SemihostFileRename(\r
+  IN  CHAR8  *FileName,\r
+  IN  CHAR8  *NewFileName\r
+  )\r
+{\r
+  SEMIHOST_FILE_RENAME_BLOCK  RenameBlock;\r
+  INT32                       Result;\r
+\r
+  if ((FileName == NULL) || (NewFileName == NULL)) {\r
+    return RETURN_INVALID_PARAMETER;\r
+  }\r
+\r
+  RenameBlock.FileName          = FileName;\r
+  RenameBlock.FileNameLength    = AsciiStrLen (FileName);\r
+  RenameBlock.NewFileName       = NewFileName;\r
+  RenameBlock.NewFileNameLength = AsciiStrLen (NewFileName);\r
+\r
+  Result = Semihost_SYS_RENAME (&RenameBlock);\r
+\r
+  if (Result != 0) {\r
+    return  RETURN_ABORTED;\r
+  } else {\r
+    return  RETURN_SUCCESS;\r
+  }\r
+}\r
+\r
 CHAR8\r
 SemihostReadCharacter (\r
   VOID\r