#ifndef __SDC51_STRING_H
#define __SDC51_STRING_H 1
-#ifndef SDCC_mcs51
-#define _generic
-#define reentrant
+#ifndef NULL
+# define NULL (void *)0
#endif
-#define memmove memcpy
-
-#ifdef SDCC_STACK_AUTO
-#ifdef SDCC_mcs51
-#warning Make sure you recompiled _str*.c and _mem*.c library functions as 'reentrant'
+#ifndef _SIZE_T_DEFINED
+# define _SIZE_T_DEFINED
+ typedef unsigned int size_t;
#endif
-extern char _generic *strcpy (char _generic *, char _generic *) reentrant ;
-extern char _generic *strncpy(char _generic *, char _generic *,int ) reentrant ;
-extern char _generic *strcat (char _generic *, char _generic *) reentrant ;
-extern char _generic *strncat(char _generic *, char _generic *,int ) reentrant ;
-extern int strcmp (char _generic *, char _generic *) reentrant ;
-extern int strncmp(char _generic *, char _generic *,int ) reentrant ;
-extern char _generic *strchr (char _generic *, char ) reentrant ;
-extern char _generic *strrchr(char _generic *, char ) reentrant ;
-extern int strspn (char _generic *, char _generic *) reentrant ;
-extern int strcspn(char _generic *, char _generic *) reentrant ;
-extern char _generic *strpbrk(char _generic *, char _generic *) reentrant ;
-extern char _generic *strstr (char _generic *, char _generic *) reentrant ;
-extern int strlen (char _generic * ) reentrant ;
-extern char _generic *strtok (char _generic *, char _generic *) reentrant ;
-extern void _generic *memcpy (void _generic *, void _generic *, int ) reentrant ;
-extern int memcmp (void _generic *, void _generic *, int ) reentrant ;
-extern void _generic *memset (void _generic *, unsigned char , int ) reentrant ;
-
-#else
+extern char *strcpy (char *, char *) ;
+extern char *strncpy(char *, char *, size_t ) ;
+extern char *strcat (char *, char *) ;
+extern char *strncat(char *, char *, size_t ) ;
+extern int strcmp (char *, char *) ;
+extern int strncmp(char *, char *, size_t ) ;
+extern char *strchr (char *, char ) ;
+extern char *strrchr(char *, char ) ;
+extern int strspn (char *, char *) ;
+extern int strcspn(char *, char *) ;
+extern char *strpbrk(char *, char *) ;
+extern char *strstr (char *, char *) ;
+extern int strlen (char * ) ;
+extern char *strtok (char *, char *) ;
+extern void *memcpy (void *, void *, size_t ) ;
+extern int memcmp (void *, void *, size_t ) ;
+extern void *memset (void *, unsigned char , size_t ) ;
+extern void *memmove (void *, void *, size_t ) ;
-extern char _generic *strcpy (char _generic *, char _generic *) ;
-extern char _generic *strncpy(char _generic *, char _generic *,int ) ;
-extern char _generic *strcat (char _generic *, char _generic *) ;
-extern char _generic *strncat(char _generic *, char _generic *,int ) ;
-extern int strcmp (char _generic *, char _generic *) ;
-extern int strncmp(char _generic *, char _generic *,int ) ;
-extern char _generic *strchr (char _generic *, char ) ;
-extern char _generic *strrchr(char _generic *, char ) ;
-extern int strspn (char _generic *, char _generic *) ;
-extern int strcspn(char _generic *, char _generic *) ;
-extern char _generic *strpbrk(char _generic *, char _generic *) ;
-extern char _generic *strstr (char _generic *, char _generic *) ;
-extern int strlen (char _generic * ) ;
-extern char _generic *strtok (char _generic *, char _generic *) ;
-extern void _generic *memcpy (void _generic *, void _generic *, int ) ;
-extern int memcmp (void _generic *, void _generic *, int ) ;
-extern void _generic *memset (void _generic *, unsigned char , int ) ;
+#ifdef SDCC_ds390
+extern void __xdata * memcpyx(void __xdata *, void __xdata *, int) __naked;
+#endif
+#ifdef SDCC_z80
+#define memcpy(dst, src, n) __builtin_memcpy(dst, src, n)
#endif
#endif