|
@@ -57,6 +57,61 @@ RtStrCpy (
|
|
|
*Dest = 0;
|
|
|
}
|
|
|
|
|
|
+#ifndef __GNUC__
|
|
|
+#pragma RUNTIME_CODE(RtStrnCpy)
|
|
|
+#endif
|
|
|
+VOID
|
|
|
+RUNTIMEFUNCTION
|
|
|
+RtStrnCpy (
|
|
|
+ IN CHAR16 *Dest,
|
|
|
+ IN CONST CHAR16 *Src,
|
|
|
+ IN UINTN Len
|
|
|
+ )
|
|
|
+// copy strings
|
|
|
+{
|
|
|
+ UINTN Size = RtStrnLen(Src, Len);
|
|
|
+ if (Size != Len)
|
|
|
+ RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
|
|
|
+ RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
|
|
|
+}
|
|
|
+
|
|
|
+#ifndef __GNUC__
|
|
|
+#pragma RUNTIME_CODE(RtStrCpy)
|
|
|
+#endif
|
|
|
+CHAR16 *
|
|
|
+RUNTIMEFUNCTION
|
|
|
+RtStpCpy (
|
|
|
+ IN CHAR16 *Dest,
|
|
|
+ IN CONST CHAR16 *Src
|
|
|
+ )
|
|
|
+// copy strings
|
|
|
+{
|
|
|
+ while (*Src) {
|
|
|
+ *(Dest++) = *(Src++);
|
|
|
+ }
|
|
|
+ *Dest = 0;
|
|
|
+ return Dest;
|
|
|
+}
|
|
|
+
|
|
|
+#ifndef __GNUC__
|
|
|
+#pragma RUNTIME_CODE(RtStrnCpy)
|
|
|
+#endif
|
|
|
+CHAR16 *
|
|
|
+RUNTIMEFUNCTION
|
|
|
+RtStpnCpy (
|
|
|
+ IN CHAR16 *Dest,
|
|
|
+ IN CONST CHAR16 *Src,
|
|
|
+ IN UINTN Len
|
|
|
+ )
|
|
|
+// copy strings
|
|
|
+{
|
|
|
+ UINTN Size = RtStrnLen(Src, Len);
|
|
|
+ if (Size != Len)
|
|
|
+ RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
|
|
|
+ RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
|
|
|
+ return Dest + Size;
|
|
|
+}
|
|
|
+
|
|
|
#ifndef __GNUC__
|
|
|
#pragma RUNTIME_CODE(RtStrCat)
|
|
|
#endif
|
|
@@ -66,10 +121,24 @@ RtStrCat (
|
|
|
IN CHAR16 *Dest,
|
|
|
IN CONST CHAR16 *Src
|
|
|
)
|
|
|
-{
|
|
|
+{
|
|
|
RtStrCpy(Dest+StrLen(Dest), Src);
|
|
|
}
|
|
|
|
|
|
+#ifndef __GNUC__
|
|
|
+#pragma RUNTIME_CODE(RtStrCat)
|
|
|
+#endif
|
|
|
+VOID
|
|
|
+RUNTIMEFUNCTION
|
|
|
+RtStrnCat (
|
|
|
+ IN CHAR16 *Dest,
|
|
|
+ IN CONST CHAR16 *Src,
|
|
|
+ IN UINTN Len
|
|
|
+ )
|
|
|
+{
|
|
|
+ RtStrnCpy(Dest+StrLen(Dest), Src, Len);
|
|
|
+}
|
|
|
+
|
|
|
#ifndef __GNUC__
|
|
|
#pragma RUNTIME_CODE(RtStrLen)
|
|
|
#endif
|
|
@@ -81,11 +150,28 @@ RtStrLen (
|
|
|
// string length
|
|
|
{
|
|
|
UINTN len;
|
|
|
-
|
|
|
+
|
|
|
for (len=0; *s1; s1+=1, len+=1) ;
|
|
|
return len;
|
|
|
}
|
|
|
|
|
|
+#ifndef __GNUC__
|
|
|
+#pragma RUNTIME_CODE(RtStrnLen)
|
|
|
+#endif
|
|
|
+UINTN
|
|
|
+RUNTIMEFUNCTION
|
|
|
+RtStrnLen (
|
|
|
+ IN CONST CHAR16 *s1,
|
|
|
+ IN UINTN Len
|
|
|
+ )
|
|
|
+// copy strings
|
|
|
+{
|
|
|
+ UINTN i;
|
|
|
+ for (i = 0; *s1 && i < Len; i++)
|
|
|
+ s1++;
|
|
|
+ return i;
|
|
|
+}
|
|
|
+
|
|
|
#ifndef __GNUC__
|
|
|
#pragma RUNTIME_CODE(RtStrSize)
|
|
|
#endif
|
|
@@ -97,7 +183,7 @@ RtStrSize (
|
|
|
// string size
|
|
|
{
|
|
|
UINTN len;
|
|
|
-
|
|
|
+
|
|
|
for (len=0; *s1; s1+=1, len+=1) ;
|
|
|
return (len + 1) * sizeof(CHAR16);
|
|
|
}
|