//===----------------------------------------------------------------------===//
#include <stdlib.h>
-void *malloc(unsigned);
-void free(void *);
+#include <string.h>
-unsigned strlen(const char *Str) {
- int Count = 0;
+#ifdef strlen
+#undef strlen
+#endif
+size_t strlen(const char *Str) {
+ size_t Count = 0;
while (*Str) { ++Count; ++Str; }
return Count;
}
+#ifdef strdup
+#undef strdup
+#endif
char *strdup(const char *str) {
- int Len = strlen(str);
+ size_t Len = strlen(str);
char *Result = (char*)malloc((Len+1)*sizeof(char));
memcpy(Result, str, Len+1);
return Result;
}
+#ifdef strndup
+#undef strndup
+#endif
+char *strndup(const char *str, size_t n) {
+ size_t Len = strlen(str);
+ if (Len > n) Len = n;
+ char *Result = (char*)malloc((Len+1)*sizeof(char));
+ memcpy(Result, str, Len);
+ Result[Len] = 0;
+ return Result;
+}
+
+#ifdef strcpy
+#undef strcpy
+#endif
char *strcpy(char *s1, const char *s2) {
+ char *dest = s1;
while ((*s1++ = *s2++));
- return s1;
+ return dest;
+}
+
+#ifdef strncpy
+#undef strncpy
+#endif
+char *strncpy(char *s1, const char *s2, size_t n) {
+ char *dest = s1;
+ while (n-- && (*s1++ = *s2++));
+ return dest;
}
+#ifdef strcat
+#undef strcat
+#endif
char *strcat(char *s1, const char *s2) {
strcpy(s1+strlen(s1), s2);
return s1;
}
+#ifdef strcmp
+#undef strcmp
+#endif
/* Compare S1 and S2, returning less than, equal to or
greater than zero if S1 is lexicographically less than,
equal to or greater than S2. */
}
// http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/generic/?cvsroot=glibc
-
+#if 0
typedef unsigned int op_t;
#define OPSIZ 4
return dstpp;
}
+#endif
+#ifdef memcpy
+#undef memcpy
+#endif
void *memcpy(void *dstpp, const void *srcpp, size_t len) {
char *dstp = (char*)dstpp;
char *srcp = (char*) srcpp;