summaryrefslogtreecommitdiff
path: root/MdeModulePkg
diff options
context:
space:
mode:
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2008-02-26 12:03:38 +0000
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2008-02-26 12:03:38 +0000
commitcd4c1ac3124fa3618561ffd978a4a18c9bad5a77 (patch)
treed74078e6f5dbdd75f90189c1f400cf6d3091fb59 /MdeModulePkg
parentfb42e02bb4715793e73ad543700f2c252a4dd962 (diff)
downloadedk2-platforms-cd4c1ac3124fa3618561ffd978a4a18c9bad5a77.tar.xz
A short-term fix that StrCpy() needs to handle two overlapping strings.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4762 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg')
-rw-r--r--MdeModulePkg/Universal/BdsDxe/BootMaint/BootOption.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/MdeModulePkg/Universal/BdsDxe/BootMaint/BootOption.c b/MdeModulePkg/Universal/BdsDxe/BootMaint/BootOption.c
index 9a2273cfc4..661f2c9102 100644
--- a/MdeModulePkg/Universal/BdsDxe/BootMaint/BootOption.c
+++ b/MdeModulePkg/Universal/BdsDxe/BootMaint/BootOption.c
@@ -1104,6 +1104,27 @@ Returns:
}
CHAR16 *
+BdsStrCpy (
+ OUT CHAR16 *Destination,
+ IN CONST CHAR16 *Source
+ )
+{
+ CHAR16 *ReturnValue;
+
+ //
+ // Destination cannot be NULL
+ //
+ ASSERT (Destination != NULL);
+
+ ReturnValue = Destination;
+ while (*Source) {
+ *(Destination++) = *(Source++);
+ }
+ *Destination = 0;
+ return ReturnValue;
+}
+
+CHAR16 *
BOpt_AppendFileName (
IN CHAR16 *Str1,
IN CHAR16 *Str2
@@ -1150,13 +1171,13 @@ Returns:
// DO NOT convert the .. if it is at the end of the string. This will
// break the .. behavior in changing directories.
//
- StrCpy (LastSlash, Ptr + 3);
+ BdsStrCpy (LastSlash, Ptr + 3);
Ptr = LastSlash;
} else if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '\\') {
//
// Convert a \.\ to a \
//
- StrCpy (Ptr, Ptr + 2);
+ BdsStrCpy (Ptr, Ptr + 2);
Ptr = LastSlash;
} else if (*Ptr == '\\') {
LastSlash = Ptr;