| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 | /* vi: set sw=4 ts=4: *//* Copyright (C) 1995,1996 Robert de Bath <rdebath@cix.compulink.co.uk> * This file is part of the Linux-8086 C library and is distributed * under the GNU Library General Public License. */#include <string.h>#include <malloc.h>/********************** Function strlen ************************************/#ifdef L_strlensize_t strlen(const char *str){	register char *ptr = (char *) str;	while (*ptr)		ptr++;	return (ptr - str);}#endif/********************** Function strcat ************************************/#ifdef L_strcatchar *strcat(char *dst, const char *src){	strcpy(dst + strlen(dst), src);	return dst;}#endif/********************** Function strcpy ************************************/#ifdef L_strcpychar *strcpy(char *dst, const char *src){	register char *ptr = dst;	while (*src)		*dst++ = *src++;	*dst = '\0';	return ptr;}#endif/********************** Function strcmp ************************************/#ifdef L_strcmpint strcmp(const char *s1, const char *s2){	unsigned register char c1, c2;	do {		c1 = (unsigned char) *s1++;		c2 = (unsigned char) *s2++;		if (c1 == '\0')			return c1 - c2;	}	while (c1 == c2);	return c1 - c2;}#endif/********************** Function strncat ************************************/#ifdef L_strncatchar *strncat(char *dst, const char *src, size_t len){	register char *s1 = dst + strlen(dst), *s2;	s2 = memchr(src, 0, len);	if (s2) {		memcpy(s1, src, s2 - src + 1);	} else {		memcpy(s1, src, len);		s1[len] = '\0';	}	return dst;}#endif/********************** Function strncpy ************************************/#ifdef L_strncpychar *strncpy(char *dst, const char *src, size_t len){	char *ptr = dst;	while (len--) {		if (*src)			*dst++ = *src++;		else			*dst++ = '\0';	}	return ptr;}#endif/********************** Function strncmp ************************************/#ifdef L_strncmpint strncmp(const char *s1, const char *s2, size_t len){	unsigned register char c1 = '\0';	unsigned register char c2 = '\0';	while (len > 0) {		c1 = (unsigned char) *s1++;		c2 = (unsigned char) *s2++;		if (c1 == '\0' || c1 != c2)			return c1 - c2;		len--;	}	return c1 - c2;}#endif/********************** Function strchr ************************************/#ifdef L_strchrchar *strchr(const char *str, int c){	register char ch;	do {		if ((ch = *str) == c)			return (char *) str;		str++;	}	while (ch);	return 0;}#endif/********************** Function strrchr ************************************/#ifdef L_strrchrchar *strrchr(const char *str, int c){	register char *prev = 0;	register char *ptr = (char *) str;	/* For null it's just like strlen */	if (c == '\0')		return ptr + strlen(ptr);	/* everything else just step along the string. */	while ((ptr = strchr(ptr, c)) != 0) {		prev = ptr;		ptr++;	}	return prev;}#endif/********************** Function strdup ************************************/#ifdef L_strdupchar *strdup(const char *str){	register size_t len;	register char *dst;	len = strlen(str) + 1;	dst = (char *) malloc(len);	if (dst)		memcpy(dst, str, len);	return dst;}#endif/********************** Function memcpy ************************************/#ifdef L_memcpyvoid *memcpy(void *dst, const void *src, size_t len){	register char *a = dst;	register const char *b = src;	while (len--)		*a++ = *b++;	return dst;}#endif/********************** Function memccpy ************************************/#ifdef L_memccpyvoid *memccpy(void *dst, const void *src, int c, size_t len){	register char *a = dst;	register const char *b = src;	while (len--) {		if ((*a++ = *b++) == c)			return a;	}	return 0;}#endif/********************** Function memset ************************************/#ifdef L_memsetvoid *memset(void *str, int c, size_t len){	register char *a = str;	while (len--)		*a++ = c;	return str;}#endif/********************** Function memmove ************************************/#ifdef L_memmovevoid *memmove(void *dst, const void *src, size_t len){	register char *s1 = dst, *s2 = (char *) src;	/* This bit of sneakyness c/o Glibc, it assumes the test is unsigned */	if (s1 - s2 >= len)		return memcpy(dst, src, len);	/* This reverse copy only used if we absolutly have to */	s1 += len;	s2 += len;	while (len-- > 0)		*(--s1) = *(--s2);	return dst;}#endif/********************** Function memchr ************************************/#ifdef L_memchrvoid *memchr(const void *str, int c, size_t len){	register unsigned char *ptr = (unsigned char *) str;	while (len--) {		if (*ptr == (unsigned char) c)			return ptr;		ptr++;	}	return 0;}#endif/********************** Function memcmp ************************************/#ifdef L_memcmpint memcmp(const void *s1, const void *s2, size_t len){	unsigned register char c1 = '\0';	unsigned register char c2 = '\0';	register char *str1 = (char *) s1;	register char *str2 = (char *) s2;	while (len > 0) {		c1 = (unsigned char) *str1++;		c2 = (unsigned char) *str2++;		if (c1 == '\0' || c1 != c2)			return c1 - c2;		len--;	}	return c1 - c2;}#endif/********************** THE END ********************************************/
 |