40 lines
		
	
	
		
			863 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			863 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include <lib.h>
 | 
						|
/* memccpy - copy bytes up to a certain char
 | 
						|
 *
 | 
						|
 * CHARBITS should be defined only if the compiler lacks "unsigned char".
 | 
						|
 * It should be a mask, e.g. 0377 for an 8-bit machine.
 | 
						|
 */
 | 
						|
 | 
						|
#include <minix/ansi.h>
 | 
						|
#include <stddef.h>
 | 
						|
 | 
						|
_PROTOTYPE( void *memccpy, (void *dst, const void *src,
 | 
						|
			    int ucharstop, size_t size));
 | 
						|
#ifndef CHARBITS
 | 
						|
#	define	UNSCHAR(c)	((unsigned char)(c))
 | 
						|
#else
 | 
						|
#	define	UNSCHAR(c)	((c)&CHARBITS)
 | 
						|
#endif
 | 
						|
 | 
						|
void *memccpy(dst, src, ucharstop, size)
 | 
						|
void * dst;
 | 
						|
_CONST void * src;
 | 
						|
int ucharstop;
 | 
						|
_SIZET size;
 | 
						|
{
 | 
						|
  register char *d;
 | 
						|
  register _CONST char *s;
 | 
						|
  register _SIZET n;
 | 
						|
  register int uc;
 | 
						|
 | 
						|
  if (size <= 0) return( (void *) NULL);
 | 
						|
 | 
						|
  s = (char *) src;
 | 
						|
  d = (char *) dst;
 | 
						|
  uc = UNSCHAR(ucharstop);
 | 
						|
  for (n = size; n > 0; n--)
 | 
						|
	if (UNSCHAR(*d++ = *s++) == (char) uc) return( (void *) d);
 | 
						|
 | 
						|
  return( (void *) NULL);
 | 
						|
}
 |