Initial revision
[kopensolaris-gnu/glibc.git] / sysdeps / generic / memccpy.c
1 /* Copyright (C) 1991 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is distributed in the hope that it will be useful, but
5 WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility for
6 the consequences of using it or for whether it serves any particular
7 purpose or works at all, unless he says so in writing.  Refer to the GNU
8 C Library General Public License (in the file COPYING) for full details.
9
10 Everyone is granted permission to copy, modify and redistribute
11 the GNU C Library, but only under the conditions described in the
12 GNU C Library General Public License.  Among other things, this notice
13 must not be changed and a copy of the license must be included.  */
14
15 #include <ansidecl.h>
16 #include <stddef.h>     /* For size_t and NULL. */
17
18
19 /*
20  * Copy no more than N bytes of SRC to DEST, stopping when C is found.
21  * Return the position in DEST one byte past where C was copied,
22  * or NULL if C was not found in the first N bytes of SRC.
23  */
24 PTR
25 DEFUN(__memccpy, (dest, src, c, n),
26       PTR dest AND CONST PTR src AND int c AND size_t n)
27 {
28   register CONST char *s = src;
29   register char *d = dest;
30   register CONST int x = (unsigned char) c;
31   register size_t i = n;
32
33   while (i-- > 0)
34     if ((*d++ = *s++) == x)
35       return d;
36
37   return NULL;
38 }