(root)/
glibc-2.38/
string/
stpncpy.c
       1  /* Copyright (C) 1993-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifdef HAVE_CONFIG_H
      19  # include <config.h>
      20  #endif
      21  
      22  #ifdef _LIBC
      23  # include <string.h>
      24  #else
      25  # include <sys/types.h>
      26  #endif
      27  
      28  #ifndef STPNCPY
      29  # ifdef weak_alias
      30  #  define STPNCPY	__stpncpy
      31  weak_alias (__stpncpy, stpncpy)
      32  # else
      33  #  define STPNCPY	stpncpy
      34  # endif
      35  #endif
      36  
      37  /* Copy no more than N characters of SRC to DEST, returning the address of
      38     the terminating '\0' in DEST, if any, or else DEST + N.  */
      39  char *
      40  STPNCPY (char *dest, const char *src, size_t n)
      41  {
      42    size_t size = __strnlen (src, n);
      43    memcpy (dest, src, size);
      44    dest += size;
      45    if (size == n)
      46      return dest;
      47    return memset (dest, '\0', n - size);
      48  }
      49  #ifdef weak_alias
      50  libc_hidden_def (__stpncpy)
      51  #endif