| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | /* * Copyright (C) 2006-2007 Axis Communications AB * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */#include <string.h>/* Experimentally off - libc_hidden_proto(memset) *//* Experimentally off - libc_hidden_proto(strncpy) */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)
 |