#ifndef _STRING_H
#define _STRING_H

/** @file
 *
 * String functions
 *
 */

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
FILE_SECBOOT ( PERMITTED );

#include <stddef.h>

extern void * generic_memset ( void *dest, int character,
			       size_t len ) __nonnull;
extern void * generic_memcpy ( void *dest, const void *src,
			       size_t len ) __nonnull;
extern void * generic_memcpy_reverse ( void *dest, const void *src,
				       size_t len ) __nonnull;
extern void * generic_memmove ( void *dest, const void *src,
				size_t len ) __nonnull;

#include <bits/string.h>

/* Architecture-specific code is expected to provide these functions,
 * but may instead explicitly choose to use the generic versions.
 */
void * memset ( void *dest, int character, size_t len ) __nonnull;
void * memcpy ( void *dest, const void *src, size_t len ) __nonnull;
void * memmove ( void *dest, const void *src, size_t len ) __nonnull;

extern int __pure memcmp ( const void *first, const void *second,
			   size_t len ) __nonnull;
extern void * __pure memchr ( const void *src, int character,
			      size_t len ) __nonnull;
extern void * memswap ( void *dest, void *src, size_t len ) __nonnull;
extern int __pure strcmp ( const char *first, const char *second ) __nonnull;
extern int __pure strncmp ( const char *first, const char *second,
			    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,
			      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;
extern char * __malloc strdup ( const char *src ) __nonnull;
extern char * __malloc strndup ( const char *src, size_t max ) __nonnull;
extern char * __pure strpbrk ( const char *string,
			       const char *delim ) __nonnull;
extern char * strsep ( char **string, const char *delim ) __nonnull;

extern char * __pure strerror ( int errno );

#endif /* _STRING_H */
