extern "C" {
#endif
-void *memcpy(void *dest, const void *src, size_t len);
-void *memset(void *block, int count, size_t len);
-int memcmp(const void *b1, const void *b2, size_t len);
-size_t strlen(const char *s);
+ void *memcpy(void *dest, const void *src, size_t len);
+ void *memmove(void *dest, const void *src, size_t len);
+ int memcmp(const void *b1, const void *b2, size_t len);
+ void *memset(void *block, int count, size_t len);
+ size_t strnlen(const char *s, size_t n);
+ size_t strlen(const char *s);
+ char *strcpy(char *dest, const char *src);
+ char *strncpy(char *dest, const char *src, size_t len);
+ char *strcat(char *dest, const char *src);
+ char *strncat(char *dest, const char *src, size_t len);
+ int strcmp(const char *s1, const char *s2);
+ int strncmp(const char *s1, const char *s2, int n);
#ifdef __cplusplus
+ char *strchr(char *s, int c);
}
+
+static inline const char *strchr(const char *s, int c)
+{
+ return const_cast<const char *>(strchr(const_cast<char *>(s), c));
+}
+#else
+char *strchr(const char *s, int c);
#endif
#endif
void *memcpy(void *dest, const void *src, size_t len)
{
- const char *cs = static_cast<const char *>(src);
- char *cd = static_cast<char *>(dest);
+ const char *cs = src;
+ char *cd = dest;
+ size_t i;
- for (size_t i = 0; i < len; i++)
+ for (i = 0; i < len; i++)
cd[i] = cs[i];
return dest;
void *memmove(void *dest, const void *src, size_t len)
{
+ const char *cs = src;
+ char *cd = dest;
+ size_t i;
+
if (dest < src)
return memcpy(dest, src, len);
- const char *cs = static_cast<const char *>(src);
- char *cd = static_cast<char *>(dest);
-
- for (size_t i = len - 1; i >= 0; i--)
+ for (i = len - 1; i >= 0; i--)
cd[i] = cs[i];
return dest;
int memcmp(const void *b1, const void *b2, size_t len)
{
size_t pos;
- const char *c1 = static_cast<const char *>(b1);
- const char *c2 = static_cast<const char *>(b2);
+ const char *c1 = b1;
+ const char *c2 = b2;
for (pos = 0; pos < len; pos++) {
if (c1[pos] != c2[pos])
return 0;
}
+void *memset(void *b, int ch, size_t len)
+{
+ char *c = b;
+
+ while (len--)
+ *c++ = ch;
+
+ return b;
+}
+
size_t strnlen(const char *s, size_t n)
{
size_t pos = 0;
+
while (pos < n && *s++)
pos++;
+
return pos;
}
size_t strlen(const char *s)
{
size_t pos = 0;
+
while (*s++)
pos++;
+
return pos;
}
return orig;
}
-void *memset(void *b, int ch, size_t len)
+int strcmp(const char *s1, const char *s2)
{
- char *c = static_cast<char *>(b);
-
- while (len--)
- *c++ = ch;
+ while (*s1 && *s2 && *s1 == *s2) {
+ s1++;
+ s2++;
+ }
- return b;
+ return *s2 - *s1;
+}
+
+int strncmp(const char *s1, const char *s2, int n)
+{
+ int i = 0;
+
+ while (i < n && s1[i] && s2[i] && s1[i] == s2[i])
+ i++;
+
+ if (i == n)
+ return 0;
+
+ return *s2 - *s1;
+}
+
+char *strchr(const char *s, int c)
+{
+ while (*s && *s != c)
+ s++;
+
+ if (*s == c)
+ return (char *)s;
+
+ return NULL;
}
union {
uint32_t a;
uint8_t b[4];
- };
+ } u;
- a = 0x12345678;
+ u.a = 0x12345678;
- if (b[0] == 0x12 && b[1] == 0x34 && b[2] == 0x56 && b[3] == 0x78)
+ if (u.b[0] == 0x12 && u.b[1] == 0x34 && u.b[2] == 0x56 && u.b[3] == 0x78)
printf("BE");
- else if (b[3] == 0x12 && b[2] == 0x34 && b[1] == 0x56 && b[0] == 0x78)
+ else if (u.b[3] == 0x12 && u.b[2] == 0x34 &&
+ u.b[1] == 0x56 && u.b[0] == 0x78)
printf("LE");
else
printf("UNKNOWN");