/* linux (posix?) says val should be an int */ #include #define VALT char extern inline void *memset(void *dst, VALT val, size_t num) { register void *ds = dst; while (num--) *((char *) dst)++ = val; return ds; } extern inline void *memchr(const void *dst, VALT val, size_t num) { while (num-- && *((char *) dst)++ == val); if (num >= 0) return --dst; else return NULL; } extern inline void *memcpy(void *dst, const void *src, size_t num) { register void *ds = dst; while (num--) *((char *) dst)++ = *((char *) src)++; return ds; } extern inline int memcmp(void *dst, const void *src, size_t num) { while (num-- && (*((char *) dst)++ == *((char *) src)++)); if (num >= 0) return *--((char *) dst) - *--((char *) src); else return 0; } extern inline void *memccpy(void *dst, const void *src, int c, size_t num) { register void *ds = dst; while (num-- && *((char *) src) != c) *((char *) dst)++ = *((char *) src)++; if (num >= 0) *((char *) dst)++ = *((char *) src)++; return ds; } extern inline void *memmove(void *dst, const void *src, size_t num) { register void *ds = dst; if (dst < src || dst >= src + num) while (num--) *((char *) dst)++ = *((char *) src)++; else { dst += num; src += num; while (num--) *--((char *) dst) = *--((char *) src); } return ds; } extern inline size_t strlen(char *dst) { register size_t num = 0; while ((*dst++)) num++; return num; } extern inline char *strchr(const char *dst, int val) { while (*dst && *((char *) dst) != val) dst++; if (*dst != val) return NULL; else return dst; } extern inline char *strcat(char *dst, const char *src) { register char *ds = dst; while (*dst) dst++; while ((*dst++ = *src++)); return ds; } extern inline char *strncat(char *dst, const char *src, size_t num) { register char *ds = dst; while (*dst) dst++; while (num-- && (*dst++ = *src++)); return ds; } extern inline char *strcpy(char *dst, const char *src) { register char *ds = dst; while ((*dst++ = *src++)); return ds; } extern inline int strcmp(const char *dst, const char *src) { while (*dst && *src && (*dst++ == *src++)); if (*dst && *src) return *--src - *--dst; else return *src - *dst; } extern inline int strncmp(const char *dst, const char *src, size_t num) { while (num-- && *dst && *src && (*dst++ == *src++)); if (*dst && *src) return *--src - *--dst; else return *src - *dst; } extern inline char *strncpy(char *dst, const char *src, size_t num) { register char *ds = dst; while (num-- && (*dst++ = *src++)); if (num >= 0) while (num--) *dst++ = 0; return ds; }