home *** CD-ROM | disk | FTP | other *** search
- /*
- * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).
- * You may copy, distribute, and use this software as long as this
- * copyright statement is not removed.
- */
-
- #ifndef lint
- static
- char rcs_hdr[] = "$Id: memory.c,v 1.7 90/08/29 21:27:58 cpcahil Exp $";
- #endif
-
- void malloc_check_data();
-
- char *
- memccpy(ptr1, ptr2, ch, len)
- register char * ptr1;
- register char * ptr2;
- int len;
- int ch;
- {
- int check;
- register int i;
- char * rtn;
-
- /*
- * I know that the assignment could be done in the following, but
- * I wanted to perform a check before any assignment, so first I
- * determine the length, check the pointers and then do the assignment.
- */
- for( i=0; (i < len) && (ptr2[i] != ch); i++)
- {
- }
- if( ptr2[i] == ch )
- {
- check = i+1;
- }
- else
- {
- check = len;
- }
-
- malloc_check_data("memccpy", ptr1, check);
- malloc_check_data("memccpy", ptr2, check);
-
- /*
- * if we found the character...
- */
-
- if( i < len )
- {
- rtn = ptr1+i+1;
- i++;
- }
- else
- {
- rtn = (char *) 0;
- }
-
- while( i-- )
- {
- *(ptr1++) = *(ptr2++);
- }
-
- return(rtn);
- }
-
- char *
- memchr(ptr1,ch,len)
- register char * ptr1;
- register int ch;
- int len;
- {
- int i;
-
- for( i=0; (i < len) && (ptr1[i] != (char) ch); i++)
- {
- }
-
- malloc_check_data("memchr", ptr1, i);
-
- if( i < len )
- {
- return( ptr1+i );
- }
- else
- {
- return( (char *) 0);
- }
- }
-
- char *
- memcpy(ptr1, ptr2, len)
- register char * ptr1;
- register char * ptr2;
- register int len;
- {
- char * rtn = ptr1;
-
- malloc_check_data("memcpy", ptr1, len);
- malloc_check_data("memcpy", ptr2, len);
-
- /*
- * while the normal memcpy does not guarrantee that it will
- * handle overlapping memory correctly, we will try...
- */
- if( ptr1 > ptr2 && ptr1 < (ptr2+len))
- {
- ptr1 += (len-1);
- ptr2 += (len-1);
- while( len-- > 0 )
- {
- *(ptr1--) = *(ptr2--);
- }
- }
- else
- {
- while( len-- > 0 )
- {
- *(ptr1++) = *(ptr2++);
- }
- }
-
- return(rtn);
- }
-
- int
- memcmp(ptr1, ptr2, len)
- register char * ptr1;
- register char * ptr2;
- register int len;
- {
- malloc_check_data("memcpy", ptr1, len);
- malloc_check_data("memcpy", ptr2, len);
-
- while( --len >= 0 && (*ptr1 == *ptr2) )
- {
- ptr1++;
- ptr2++;
- }
-
- /*
- * If stopped by len, return zero
- */
- if( len < 0 )
- {
- return(0);
- }
-
- return( *ptr1 - *ptr2 );
- }
-
- char *
- memset(ptr1, ch, len)
- register char * ptr1;
- register int ch;
- register int len;
- {
- char * rtn = ptr1;
-
- malloc_check_data("memcpy", ptr1, len);
-
- while( len-- )
- {
- *(ptr1++) = ch;
- }
-
- return(rtn);
- }
-
- char *
- bcopy(ptr2,ptr1,len)
- char * ptr2;
- char * ptr1;
- int len;
- {
- return(memcpy(ptr1,ptr2,len));
- }
-
- char *
- bzero(ptr1,len)
- char * ptr1;
- int len;
- {
- return(memset(ptr1,'\0',len));
- }
-
- int
- bcmp(ptr2, ptr1, len)
- char * ptr1;
- char * ptr2;
- int len;
- {
- return( memcmp(ptr1,ptr2,len) );
- }
-
- /*
- * $Log: memory.c,v $
- * Revision 1.7 90/08/29 21:27:58 cpcahil
- * fixed value of check in memccpy when character was not found.
- *
- * Revision 1.6 90/07/16 20:06:26 cpcahil
- * fixed several minor bugs found with Henry Spencer's string/mem tester
- * program.
- *
- *
- * Revision 1.5 90/05/11 15:39:36 cpcahil
- * fixed bug in memccpy().
- *
- * Revision 1.4 90/05/11 00:13:10 cpcahil
- * added copyright statment
- *
- * Revision 1.3 90/02/24 21:50:29 cpcahil
- * lots of lint fixes
- *
- * Revision 1.2 90/02/24 17:29:41 cpcahil
- * changed $Header to $Id so full path wouldnt be included as part of rcs
- * id string
- *
- * Revision 1.1 90/02/22 23:17:43 cpcahil
- * Initial revision
- *
- */
-