memccpy.c 1.85 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 * This file is part of the Sofia-SIP package
 *
 * Copyright (C) 2005 Nokia Corporation.
 *
 * Contact: Pekka Pessi <pekka.pessi@nokia.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 *
 */

Pekka Pessi's avatar
Pekka Pessi committed
25
/**@internal @file memccpy.c
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
 * @brief The memccpy() replacement function.
 *  
 * @author Pekka Pessi <Pekka.Pessi@nokia.com>
 * 
 * @date Created: Thu Nov 17 17:45:51 EET 2005 ppessi
 */

#include "config.h"

#include <string.h>
#include <limits.h>

/**Copy memory until @a c is found.
 *
 * Copies no more than @a n bytes from memory area @a src to memory area @a
 * dest, stopping after the character @a c is copied and found.
 *
 * @param dest       pointer to destination area
 * @param src        pointer to source area
 * @param c          terminating byte
 * @param n          size of destination area
 *
 * @return
 * Returns a pointer to the next character in @a dest after @a c, 
 * or NULL if @a c was not found in the first @a n characters of @a src.
 */
void *memccpy(void *dest, const void *src, int c, size_t n)
{
  char *d;
  char const *s;

  if (!src || !dest)
    return dest;

  for (d = dest, s = src; n-- > 0;) {
    if (c == (*d++ = *s++))
      return d;
  }

  return NULL;
}