}
/**
- * Find character within a string
+ * Find character within a string, or NUL terminator
*
* @v src String
* @v character Character to find
- * @ret found Found character, or NULL if not found
+ * @ret found Found character, or terminating NUL if not found
*/
-char * strchr ( const char *src, int character ) {
+char * strchrnul ( const char *src, int character ) {
const uint8_t *src_bytes = ( ( const uint8_t * ) src );
for ( ; ; src_bytes++ ) {
- if ( *src_bytes == character )
+ if ( ( *src_bytes == character ) || ( ! *src_bytes ) )
return ( ( char * ) src_bytes );
- if ( ! *src_bytes )
- return NULL;
}
}
+/**
+ * Find character within a string
+ *
+ * @v src String
+ * @v character Character to find
+ * @ret found Found character, or NULL if not found
+ */
+char * strchr ( const char *src, int character ) {
+ char *found;
+
+ found = strchrnul ( src, character );
+ if ( character != *( ( uint8_t * ) found ) )
+ return NULL;
+ return found;
+}
+
/**
* Find rightmost character within a string
*
size_t max ) __nonnull;
extern size_t __pure strlen ( const char *src ) __nonnull;
extern size_t __pure strnlen ( const char *src, size_t max ) __nonnull;
+extern char * __pure strchrnul ( const char *src, int character ) __nonnull;
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,
ok ( *(strchr ( "Testing", 'e' )) == 'e' );
ok ( *(strchr ( "Testing", 'g' )) == 'g' );
ok ( strchr ( "Testing", 'x' ) == NULL );
+ ok ( *(strchr ( "Testing", '\0' )) == '\0' );
/* Test strrchr() */
ok ( strrchr ( "", 'a' ) == NULL );
ok ( *(strrchr ( "Haystack", 'k' )) == 'k' );
ok ( strrchr ( "Haystack", 'x' ) == NULL );
+ /* Test strchrnul() */
+ ok ( *(strchrnul ( "", 'x' )) == '\0' );
+ ok ( *(strchrnul ( "Nonstandard", 's' )) == 's' );
+ ok ( *(strchrnul ( "Nonstandard", 't' )) == 't' );
+ ok ( *(strchrnul ( "Nonstandard", 'x' )) == '\0' );
+ ok ( *(strchrnul ( "Nonstandard", '\0' )) == '\0' );
+
/* Test memchr() */
ok ( memchr ( "", '\0', 0 ) == NULL );
ok ( *((uint8_t *)memchr ( "post\0null", 'l', 9 )) == 'l' );