]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[libc] Add stpcpy()
authorMichael Brown <mcb30@ipxe.org>
Thu, 23 May 2024 12:18:16 +0000 (13:18 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 31 May 2024 09:11:22 +0000 (10:11 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/string.c
src/include/string.h
src/tests/string_test.c

index 9a1b9b72a891265de896561a4f49c68b82fd0444..364c4cf0edf3e592c50f2f210d9d381cbe0a6dbe 100644 (file)
@@ -321,9 +321,9 @@ char * strstr ( const char *haystack, const char *needle ) {
  *
  * @v dest             Destination string
  * @v src              Source string
- * @ret dest           Destination string
+ * @ret dnul           Terminating NUL of destination string
  */
-char * strcpy ( char *dest, const char *src ) {
+char * stpcpy ( char *dest, const char *src ) {
        const uint8_t *src_bytes = ( ( const uint8_t * ) src );
        uint8_t *dest_bytes = ( ( uint8_t * ) dest );
 
@@ -333,6 +333,19 @@ char * strcpy ( char *dest, const char *src ) {
                if ( ! *dest_bytes )
                        break;
        }
+       return ( ( char * ) dest_bytes );
+}
+
+/**
+ * Copy string
+ *
+ * @v dest             Destination string
+ * @v src              Source string
+ * @ret dest           Destination string
+ */
+char * strcpy ( char *dest, const char *src ) {
+
+       stpcpy ( dest, src );
        return dest;
 }
 
index 5f5aecb92a8bf8f4e59d3aacb954c0c947e8223c..4ee9c7344ba0f23844be4fb98542611ad5bcfb79 100644 (file)
@@ -43,6 +43,7 @@ extern char * __pure strchr ( const char *src, int character ) __nonnull;
 extern char * __pure strrchr ( const char *src, int character ) __nonnull;
 extern char * __pure strstr ( const char *haystack,
                              const char *needle ) __nonnull;
+extern char * stpcpy ( char *dest, const char *src ) __nonnull;
 extern char * strcpy ( char *dest, const char *src ) __nonnull;
 extern char * strncpy ( char *dest, const char *src, size_t max ) __nonnull;
 extern char * strcat ( char *dest, const char *src ) __nonnull;
index 3afb8deb26795fd2b5cdca528595f1d61d1e3d42..c0436c3ad93ef032f4dfaa261c7aba834ed7f2a8 100644 (file)
@@ -204,6 +204,24 @@ static void string_test_exec ( void ) {
                free ( dup );
        }
 
+       /* Test stpcpy() */
+       {
+               const char longer[12] = "duplicateme";
+               const char shorter[6] = "hello";
+               char dest[12];
+               char *dnul;
+
+               dnul = stpcpy ( dest, longer );
+               ok ( *dnul == '\0' );
+               ok ( dnul == &dest[11] );
+               ok ( memcmp ( dest, longer, 12 ) == 0 );
+               dnul = stpcpy ( dest, shorter );
+               ok ( *dnul == '\0' );
+               ok ( dnul == &dest[5] );
+               ok ( memcmp ( dest, shorter, 6 ) == 0 );
+               ok ( memcmp ( ( dest + 6 ), ( longer + 6 ), 6 ) == 0 );
+       }
+
        /* Test strcpy() */
        {
                const char longer[7] = "copyme";