| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | /* * Copyright (C) 2006-2007 Axis Communications AB * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */#include <string.h>char *strncpy(char *dest, const char *src, size_t count){  char *ret = dest;  unsigned long himagic = 0x80808080L;  unsigned long lomagic = 0x01010101L;  while (count && (unsigned long)src & (sizeof src - 1))  {    count--;    if (!(*dest++ = *src++))    {      goto finalize;    }  }  while (count >= sizeof (unsigned long))  {    unsigned long value = *(unsigned long*)src;    unsigned long magic;    if ((magic = (value - lomagic) & himagic))    {      if (magic & ~value)      {        break;      }    }    *(unsigned long*)dest = value;    dest += sizeof (unsigned long);    src += sizeof (unsigned long);    count -= sizeof (unsigned long);  }  while (count)  {    count--;    if (!(*dest++ = *src++))      break;  }finalize:  if (count)  {    memset(dest, '\0', count);  }  return ret;}libc_hidden_def(strncpy)
 |