Partially implemented RFE #2471534 and some other minor improvements
[fw/sdcc] / device / include / string.h
index 356d2f012a3e9475e83fb3ec40ab1d1023addcca..7b41c64d64d4971f56e5254d04f94f819788bb86 100644 (file)
 #ifndef __SDC51_STRING_H
 #define __SDC51_STRING_H 1
 
-#define memmove memcpy
+#ifndef NULL
+# define NULL (void *)0
+#endif
 
-#ifdef SDCC_STACK_AUTO
-#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