*
* @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 );
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;
}
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;
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";