Skip to content

Commit

Permalink
[libc] Add stpcpy()
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Brown <[email protected]>
  • Loading branch information
mcb30 committed May 31, 2024
1 parent dc118c5 commit e965f17
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
17 changes: 15 additions & 2 deletions src/core/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

Expand All @@ -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;
}

Expand Down
1 change: 1 addition & 0 deletions src/include/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
18 changes: 18 additions & 0 deletions src/tests/string_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down

0 comments on commit e965f17

Please sign in to comment.