Back to index

glibc  2.9
Functions
wcsncpy.c File Reference
#include <wchar.h>

Go to the source code of this file.

Functions

wchar_t * __wcsncpy (wchar_t *dest, const wchar_t *src, size_t n)

Function Documentation

wchar_t* __wcsncpy ( wchar_t *  dest,
const wchar_t *  src,
size_t  n 
)

Definition at line 25 of file wcsncpy.c.

{
  wint_t c;
  wchar_t *const s = dest;

  --dest;

  if (n >= 4)
    {
      size_t n4 = n >> 2;

      for (;;)
       {
         c = *src++;
         *++dest = c;
         if (c == L'\0')
           break;
         c = *src++;
         *++dest = c;
         if (c == L'\0')
           break;
         c = *src++;
         *++dest = c;
         if (c == L'\0')
           break;
         c = *src++;
         *++dest = c;
         if (c == L'\0')
           break;
         if (--n4 == 0)
           goto last_chars;
       }
      n = n - (dest - s) - 1;
      if (n == 0)
       return s;
      goto zero_fill;
    }

 last_chars:
  n &= 3;
  if (n == 0)
    return s;

  do
    {
      c = *src++;
      *++dest = c;
      if (--n == 0)
       return s;
    }
  while (c != L'\0');

 zero_fill:
  do
    *++dest = L'\0';
  while (--n > 0);

  return s;
}

Here is the caller graph for this function: