Blame SOURCES/0018-gnu-efi-add-some-more-common-string-functions.patch

d30f3b
From 9485c65f6d28b71ff697849c1c8d47fd077ccd07 Mon Sep 17 00:00:00 2001
d30f3b
From: Peter Jones <pjones@redhat.com>
d30f3b
Date: Tue, 13 Mar 2018 15:20:28 -0400
d30f3b
Subject: [PATCH 18/25] gnu-efi: add some more common string functions.
d30f3b
d30f3b
This adds bounded string helper functions:
d30f3b
d30f3b
StrnLen()
d30f3b
StrnCpy()
d30f3b
StrnCat()
d30f3b
StpnCpy()
d30f3b
d30f3b
And the unbounded function StpCpy().
d30f3b
d30f3b
Signed-off-by: Peter Jones <pjones@redhat.com>
d30f3b
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
d30f3b
---
d30f3b
 lib/runtime/rtstr.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++--
d30f3b
 lib/str.c           | 53 ++++++++++++++++++++++++++++++
d30f3b
 inc/efilib.h        | 33 +++++++++++++++++++
d30f3b
 inc/efirtlib.h      | 38 ++++++++++++++++++++++
d30f3b
 4 files changed, 213 insertions(+), 3 deletions(-)
d30f3b
d30f3b
diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c
d30f3b
index e283c09582e..80ff4891199 100644
d30f3b
--- a/lib/runtime/rtstr.c
d30f3b
+++ b/lib/runtime/rtstr.c
d30f3b
@@ -57,6 +57,61 @@ RtStrCpy (
d30f3b
     *Dest = 0;
d30f3b
 }
d30f3b
 
d30f3b
+#ifndef __GNUC__
d30f3b
+#pragma RUNTIME_CODE(RtStrnCpy)
d30f3b
+#endif
d30f3b
+VOID
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStrnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    UINTN Size = RtStrnLen(Src, Len);
d30f3b
+    if (Size != Len)
d30f3b
+	RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
d30f3b
+    RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
d30f3b
+}
d30f3b
+
d30f3b
+#ifndef __GNUC__
d30f3b
+#pragma RUNTIME_CODE(RtStrCpy)
d30f3b
+#endif
d30f3b
+CHAR16 *
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStpCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    while (*Src) {
d30f3b
+        *(Dest++) = *(Src++);
d30f3b
+    }
d30f3b
+    *Dest = 0;
d30f3b
+    return Dest;
d30f3b
+}
d30f3b
+
d30f3b
+#ifndef __GNUC__
d30f3b
+#pragma RUNTIME_CODE(RtStrnCpy)
d30f3b
+#endif
d30f3b
+CHAR16 *
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStpnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    UINTN Size = RtStrnLen(Src, Len);
d30f3b
+    if (Size != Len)
d30f3b
+	RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
d30f3b
+    RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
d30f3b
+    return Dest + Size;
d30f3b
+}
d30f3b
+
d30f3b
 #ifndef __GNUC__
d30f3b
 #pragma RUNTIME_CODE(RtStrCat)
d30f3b
 #endif
d30f3b
@@ -66,10 +121,24 @@ RtStrCat (
d30f3b
     IN CHAR16   *Dest,
d30f3b
     IN CONST CHAR16   *Src
d30f3b
     )
d30f3b
-{   
d30f3b
+{
d30f3b
     RtStrCpy(Dest+StrLen(Dest), Src);
d30f3b
 }
d30f3b
 
d30f3b
+#ifndef __GNUC__
d30f3b
+#pragma RUNTIME_CODE(RtStrCat)
d30f3b
+#endif
d30f3b
+VOID
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStrnCat (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN    Len
d30f3b
+    )
d30f3b
+{
d30f3b
+    RtStrnCpy(Dest+StrLen(Dest), Src, Len);
d30f3b
+}
d30f3b
+
d30f3b
 #ifndef __GNUC__
d30f3b
 #pragma RUNTIME_CODE(RtStrLen)
d30f3b
 #endif
d30f3b
@@ -81,11 +150,28 @@ RtStrLen (
d30f3b
 // string length
d30f3b
 {
d30f3b
     UINTN        len;
d30f3b
-    
d30f3b
+
d30f3b
     for (len=0; *s1; s1+=1, len+=1) ;
d30f3b
     return len;
d30f3b
 }
d30f3b
 
d30f3b
+#ifndef __GNUC__
d30f3b
+#pragma RUNTIME_CODE(RtStrnLen)
d30f3b
+#endif
d30f3b
+UINTN
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStrnLen (
d30f3b
+    IN CONST CHAR16   *s1,
d30f3b
+    IN UINTN           Len
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    UINTN i;
d30f3b
+    for (i = 0; *s1 && i < Len; i++)
d30f3b
+	    s1++;
d30f3b
+    return i;
d30f3b
+}
d30f3b
+
d30f3b
 #ifndef __GNUC__
d30f3b
 #pragma RUNTIME_CODE(RtStrSize)
d30f3b
 #endif
d30f3b
@@ -97,7 +183,7 @@ RtStrSize (
d30f3b
 // string size
d30f3b
 {
d30f3b
     UINTN        len;
d30f3b
-    
d30f3b
+
d30f3b
     for (len=0; *s1; s1+=1, len+=1) ;
d30f3b
     return (len + 1) * sizeof(CHAR16);
d30f3b
 }
d30f3b
diff --git a/lib/str.c b/lib/str.c
d30f3b
index cf1495c1fc8..9a89f30ee55 100644
d30f3b
--- a/lib/str.c
d30f3b
+++ b/lib/str.c
d30f3b
@@ -113,6 +113,38 @@ StrCpy (
d30f3b
     RtStrCpy (Dest, Src);
d30f3b
 }
d30f3b
 
d30f3b
+VOID
d30f3b
+StrnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    RtStrnCpy (Dest, Src, Len);
d30f3b
+}
d30f3b
+
d30f3b
+CHAR16 *
d30f3b
+StpCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    return RtStpCpy (Dest, Src);
d30f3b
+}
d30f3b
+
d30f3b
+CHAR16 *
d30f3b
+StpnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    )
d30f3b
+// copy strings
d30f3b
+{
d30f3b
+    return RtStpnCpy (Dest, Src, Len);
d30f3b
+}
d30f3b
+
d30f3b
 VOID
d30f3b
 StrCat (
d30f3b
     IN CHAR16   *Dest,
d30f3b
@@ -122,6 +154,27 @@ StrCat (
d30f3b
     RtStrCat(Dest, Src);
d30f3b
 }
d30f3b
 
d30f3b
+VOID
d30f3b
+StrnCat (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    )
d30f3b
+{
d30f3b
+    RtStrnCat(Dest, Src, Len);
d30f3b
+}
d30f3b
+
d30f3b
+
d30f3b
+UINTN
d30f3b
+StrnLen (
d30f3b
+    IN CONST CHAR16   *s1,
d30f3b
+    IN UINTN           Len
d30f3b
+    )
d30f3b
+// string length
d30f3b
+{
d30f3b
+    return RtStrnLen(s1, Len);
d30f3b
+}
d30f3b
+
d30f3b
 UINTN
d30f3b
 StrLen (
d30f3b
     IN CONST CHAR16   *s1
d30f3b
diff --git a/inc/efilib.h b/inc/efilib.h
d30f3b
index 22da65bbc27..8a507aff7cd 100644
d30f3b
--- a/inc/efilib.h
d30f3b
+++ b/inc/efilib.h
d30f3b
@@ -313,17 +313,50 @@ StrCpy (
d30f3b
     IN CONST CHAR16    *Src
d30f3b
     );
d30f3b
 
d30f3b
+VOID
d30f3b
+StrnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16    *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    );
d30f3b
+
d30f3b
+CHAR16 *
d30f3b
+StpCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16    *Src
d30f3b
+    );
d30f3b
+
d30f3b
+CHAR16 *
d30f3b
+StpnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16    *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    );
d30f3b
+
d30f3b
 VOID
d30f3b
 StrCat (
d30f3b
     IN CHAR16   *Dest,
d30f3b
     IN CONST CHAR16   *Src
d30f3b
     );
d30f3b
 
d30f3b
+VOID
d30f3b
+StrnCat (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    );
d30f3b
+
d30f3b
 UINTN
d30f3b
 StrLen (
d30f3b
     IN CONST CHAR16   *s1
d30f3b
     );
d30f3b
 
d30f3b
+UINTN
d30f3b
+StrnLen (
d30f3b
+    IN CONST CHAR16   *s1,
d30f3b
+    IN UINTN           Len
d30f3b
+    );
d30f3b
+
d30f3b
 UINTN
d30f3b
 StrSize (
d30f3b
     IN CONST CHAR16   *s1
d30f3b
diff --git a/inc/efirtlib.h b/inc/efirtlib.h
d30f3b
index c073ead97a7..49d0b4d3ae0 100644
d30f3b
--- a/inc/efirtlib.h
d30f3b
+++ b/inc/efirtlib.h
d30f3b
@@ -69,6 +69,29 @@ RtStrCpy (
d30f3b
     IN CONST CHAR16    *Src
d30f3b
     );
d30f3b
 
d30f3b
+VOID
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStrnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16    *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    );
d30f3b
+
d30f3b
+CHAR16 *
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStpCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16    *Src
d30f3b
+    );
d30f3b
+
d30f3b
+CHAR16 *
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStpnCpy (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16    *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    );
d30f3b
+
d30f3b
 VOID
d30f3b
 RUNTIMEFUNCTION
d30f3b
 RtStrCat (
d30f3b
@@ -76,12 +99,27 @@ RtStrCat (
d30f3b
     IN CONST CHAR16   *Src
d30f3b
     );
d30f3b
 
d30f3b
+VOID
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStrnCat (
d30f3b
+    IN CHAR16   *Dest,
d30f3b
+    IN CONST CHAR16   *Src,
d30f3b
+    IN UINTN     Len
d30f3b
+    );
d30f3b
+
d30f3b
 UINTN
d30f3b
 RUNTIMEFUNCTION
d30f3b
 RtStrLen (
d30f3b
     IN CONST CHAR16   *s1
d30f3b
     );
d30f3b
 
d30f3b
+UINTN
d30f3b
+RUNTIMEFUNCTION
d30f3b
+RtStrnLen (
d30f3b
+    IN CONST CHAR16   *s1,
d30f3b
+    IN UINTN           Len
d30f3b
+    );
d30f3b
+
d30f3b
 UINTN
d30f3b
 RUNTIMEFUNCTION
d30f3b
 RtStrSize (
d30f3b
-- 
d30f3b
2.15.0
d30f3b